Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(gradle): Refactor manager test mocks #9957

Merged
merged 11 commits into from
May 12, 2021

Conversation

zharinov
Copy link
Collaborator

@zharinov zharinov commented May 11, 2021

Changes:

Simplify test mocks. Now it doesn't rely on temp dirs.

Context:

Blocks #9932

Documentation (please check one with an [x])

  • I have updated the documentation, or
  • No documentation update is required

How I've tested my work (please tick one)

I have verified these changes via:

  • Code inspection only, or
  • Newly added unit tests, or
  • No new tests but ran on a real repository, or
  • Both unit tests + ran on a real repository

@zharinov
Copy link
Collaborator Author

@viceice Can you please run this test on Windows?

@viceice viceice self-requested a review May 11, 2021 13:41
@viceice
Copy link
Member

viceice commented May 11, 2021

@viceice Can you please run this test on Windows?

Sure, pushed a cleanup commit. Test is running 😉

Copy link
Member

@viceice viceice left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't work as expected
image

@viceice
Copy link
Member

viceice commented May 11, 2021

Pushed another commit to fully use our fs wrapper, you now need to fix the tests 😉

@zharinov
Copy link
Collaborator Author

Thanks, I'll try to test it on my own, using Virtual Box and Windows 10 developer images

@viceice
Copy link
Member

viceice commented May 11, 2021

wsl2, looks like some mocks are missing now?

 FAIL  lib/manager/gradle/index.spec.ts
  ● manager/gradle/index › extractPackageFile › should update an existing module dependency

    ENOENT: no such file or directory, open '/foo/bar/renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should return gradle.kts dependencies

    ENOENT: no such file or directory, open '/foo/bar/renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should return empty if there are no dependencies

    ENOENT: no such file or directory, open '/foo/bar/renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should return empty if there is no dependency report

    ENOENT: no such file or directory, open '/foo/bar/renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should return empty if renovate report is invalid

    ENOENT: no such file or directory, open '/foo/bar/renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should use repositories only for current project

    ENOENT: no such file or directory, open '/foo/bar/renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should execute gradlew when available

    ENOENT: no such file or directory, open '/foo/bar/renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should execute gradlew.bat when available on Windows

    ENOENT: no such file or directory, open '/foo/bar/renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should execute gradle if gradlew is not available

    ENOENT: no such file or directory, open '/foo/bar/renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should return gradle dependencies for build.gradle in subdirectories if there is gradlew in the same directory

    ENOENT: no such file or directory, open '/foo/bar/baz/qux/renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should use docker if required

    ENOENT: no such file or directory, open '/foo/bar/renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should use docker even if gradlew is available

    ENOENT: no such file or directory, open '/foo/bar/renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should use docker even if gradlew.bat is available on Windows

    ENOENT: no such file or directory, open '/foo/bar/renovate-plugin.gradle'


@viceice
Copy link
Member

viceice commented May 11, 2021

Windows:


    expect(received).toEqual(expected) // deep equality

    Expected: "/foo/bar/gradlew"
    Received: "/foo/bar/gradlew.bat"

      59 |     fs.stat.mockImplementationOnce((dirname) => {
      60 |       if (wrapperFilename) {
    > 61 |         expect(dirname).toEqual(join(baseDir, wrapperFilename));
         |                         ^
      62 |         return Promise.resolve({
      63 |           isFile: () => true,
      64 |         } as Stats);

      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:61:25)
      at Object.extractAllPackageFiles (lib/manager/gradle/index.ts:96:21)
      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:101:34)

  ● manager/gradle/index › extractPackageFile › should return gradle.kts dependencies

    expect(received).toEqual(expected) // deep equality

    Expected: "/foo/bar/gradlew"
    Received: "/foo/bar/gradlew.bat"

      59 |     fs.stat.mockImplementationOnce((dirname) => {
      60 |       if (wrapperFilename) {
    > 61 |         expect(dirname).toEqual(join(baseDir, wrapperFilename));
         |                         ^
      62 |         return Promise.resolve({
      63 |           isFile: () => true,
      64 |         } as Stats);

      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:61:25)
      at Object.extractAllPackageFiles (lib/manager/gradle/index.ts:96:21)
      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:110:34)

  ● manager/gradle/index › extractPackageFile › should return empty if there are no dependencies

    expect(received).toEqual(expected) // deep equality

    Expected: "/foo/bar/gradlew"
    Received: "/foo/bar/gradlew.bat"

      59 |     fs.stat.mockImplementationOnce((dirname) => {
      60 |       if (wrapperFilename) {
    > 61 |         expect(dirname).toEqual(join(baseDir, wrapperFilename));
         |                         ^
      62 |         return Promise.resolve({
      63 |           isFile: () => true,
      64 |         } as Stats);

      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:61:25)
      at Object.extractAllPackageFiles (lib/manager/gradle/index.ts:96:21)
      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:121:34)

  ● manager/gradle/index › extractPackageFile › should return empty if there is no dependency report

    expect(received).toEqual(expected) // deep equality

    Expected: "/foo/bar/gradlew"
    Received: "/foo/bar/gradlew.bat"

      59 |     fs.stat.mockImplementationOnce((dirname) => {
      60 |       if (wrapperFilename) {
    > 61 |         expect(dirname).toEqual(join(baseDir, wrapperFilename));
         |                         ^
      62 |         return Promise.resolve({
      63 |           isFile: () => true,
      64 |         } as Stats);

      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:61:25)
      at Object.extractAllPackageFiles (lib/manager/gradle/index.ts:96:21)
      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:130:34)

  ● manager/gradle/index › extractPackageFile › should return empty if renovate report is invalid

    expect(received).toEqual(expected) // deep equality

    Expected: "/foo/bar/gradlew"
    Received: "/foo/bar/gradlew.bat"

      59 |     fs.stat.mockImplementationOnce((dirname) => {
      60 |       if (wrapperFilename) {
    > 61 |         expect(dirname).toEqual(join(baseDir, wrapperFilename));
         |                         ^
      62 |         return Promise.resolve({
      63 |           isFile: () => true,
      64 |         } as Stats);

      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:61:25)
      at Object.extractAllPackageFiles (lib/manager/gradle/index.ts:96:21)
      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:139:34)

  ● manager/gradle/index › extractPackageFile › should use repositories only for current project

    expect(received).toEqual(expected) // deep equality

    Expected: "/foo/bar/gradlew"
    Received: "/foo/bar/gradlew.bat"

      59 |     fs.stat.mockImplementationOnce((dirname) => {
      60 |       if (wrapperFilename) {
    > 61 |         expect(dirname).toEqual(join(baseDir, wrapperFilename));
         |                         ^
      62 |         return Promise.resolve({
      63 |           isFile: () => true,
      64 |         } as Stats);

      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:61:25)
      at Object.extractAllPackageFiles (lib/manager/gradle/index.ts:96:21)
      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:150:34)

  ● manager/gradle/index › extractPackageFile › should execute gradlew when available

    expect(received).toEqual(expected) // deep equality

    Expected: "/foo/bar/gradlew"
    Received: "/foo/bar/gradlew.bat"

      59 |     fs.stat.mockImplementationOnce((dirname) => {
      60 |       if (wrapperFilename) {
    > 61 |         expect(dirname).toEqual(join(baseDir, wrapperFilename));
         |                         ^
      62 |         return Promise.resolve({
      63 |           isFile: () => true,
      64 |         } as Stats);

      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:61:25)
      at Object.extractAllPackageFiles (lib/manager/gradle/index.ts:96:21)
      at Object.<anonymous> (lib/manager/gradle/index.spec.ts:159:34)

  ● manager/gradle/index › extractPackageFile › should execute gradlew.bat when available on Windows

    ENOENT: no such file or directory, open 'C:\foo\bar\renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should execute gradle if gradlew is not available

    ENOENT: no such file or directory, open 'C:\foo\bar\renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should return gradle dependencies for build.gradle in subdirectories if there is gradlew in the same directory

    ENOENT: no such file or directory, open 'C:\foo\bar\baz\qux\renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should use docker if required

    ENOENT: no such file or directory, open 'C:\foo\bar\renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should use docker even if gradlew is available

    ENOENT: no such file or directory, open 'C:\foo\bar\renovate-plugin.gradle'



  ● manager/gradle/index › extractPackageFile › should use docker even if gradlew.bat is available on Windows

    ENOENT: no such file or directory, open 'C:\foo\bar\renovate-plugin.gradle'

@zharinov
Copy link
Collaborator Author

Can't remember why we continued to use fs-extra in gradle-updates-report.ts. I guess, because util/fs led to test failures 😂

@zharinov
Copy link
Collaborator Author

So, I would propose continue with extra-fs mocks for now, after fixing it for Windows.
In the upcoming PR, we refactor gradle-updates-report.ts separatedly.
And then, rewrite mocks for using util/fs.

@viceice
Copy link
Member

viceice commented May 11, 2021

I've changed only a small bit in index.ts so we schould be able to fix mocking here? or is it interferring with gradle-updates-report so there needs to be used our fs layer too?

@zharinov
Copy link
Collaborator Author

I'll try to figure it out

@zharinov
Copy link
Collaborator Author

My guess it has something to do with proxies.ts re-export

@viceice
Copy link
Member

viceice commented May 11, 2021

My guess it has something to do with proxies.ts re-export

Ah yes, i remember some issues with typescript and reexports. 🤔

export * from './proxies';

That's maybe also the cause for this:

fs.readFile = jest.fn(() => 'package-lock-contents') as never;

@zharinov
Copy link
Collaborator Author

zharinov commented May 11, 2021

So, let's solve it in another PR. I want to separate test and execution refactoring for this manager. I don't like how it joins paths with localDir being obtained directly from config.

UPD: I don't like gradle manager at all 😁

@zharinov
Copy link
Collaborator Author

Now it should pass in Windows platform, I've made my own check

@viceice viceice merged commit 0016485 into renovatebot:main May 12, 2021
@viceice viceice deleted the refactor/gradle-manager-test branch May 12, 2021 13:41
@renovate-release
Copy link
Collaborator

🎉 This PR is included in version 25.19.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jun 12, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants