From 1c2a78bd675dd876cb58c2ba591477e34659b5ec Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Wed, 27 Jul 2022 14:40:15 +0300 Subject: [PATCH] test(sbt-package): Refactor tests (#16804) --- .../datasource/sbt-package/index.spec.ts | 383 +++++++----------- 1 file changed, 137 insertions(+), 246 deletions(-) diff --git a/lib/modules/datasource/sbt-package/index.spec.ts b/lib/modules/datasource/sbt-package/index.spec.ts index b85e70b1d2016d..9a8c1e6e14041b 100644 --- a/lib/modules/datasource/sbt-package/index.spec.ts +++ b/lib/modules/datasource/sbt-package/index.spec.ts @@ -18,246 +18,146 @@ describe('modules/datasource/sbt-package/index', () => { }); describe('getPkgReleases', () => { - beforeEach(() => { + it('returns null in case of errors', async () => { httpMock .scope('https://failed_repo') .get('/maven/org/scalatest/') + .reply(404) + .get('/maven/org.scalatest/') .reply(404); + + const res = await getPkgReleases({ + versioning: mavenVersioning.id, + datasource: SbtPackageDatasource.id, + depName: 'org.scalatest:scalatest', + registryUrls: ['https://failed_repo/maven'], + }); + + expect(res).toBeNull(); + }); + + it('returns null if there is no version', async () => { httpMock .scope('https://repo.maven.apache.org') .get('/maven2/com/example/') - .reply(200, 'empty_2.12/\n'); - httpMock - .scope('https://repo.maven.apache.org') + .reply(200, 'empty_2.12/\n') .get('/maven2/com/example/empty/') - .reply(200, ''); - httpMock - .scope('https://repo.maven.apache.org') - .get('/maven2/org/scalatest/') - .times(3) - .reply( - 200, - 'scalatest_2.12/\n' + - 'scalatest_2.12/\n' + - "scalatest_2.12/" + - "scalatest_2.12/" + - 'scalatest-app_2.12' + - 'scalatest-flatspec_2.12' + - 'scalatest-matchers-core_2.12' - ); - httpMock - .scope('https://repo.maven.apache.org') - .get('/maven2/org/scalatest/scalatest/') - .reply(200, "1.2.0/"); - httpMock - .scope('https://repo.maven.apache.org') - .get('/maven2/org/scalatest/scalatest_2.12/') - .reply(200, "4.5.6/"); - httpMock - .scope('https://repo.maven.apache.org') - .get('/maven2/org/scalatest/scalatest-app_2.12/') - .reply(200, "3.2.1/"); - httpMock - .scope('https://repo.maven.apache.org') - .get('/maven2/org/scalatest/scalatest-flatspec_2.12/') - .reply(200, "3.2.1/"); - httpMock - .scope('https://repo.maven.apache.org') - .get('/maven2/org/scalatest/scalatest-matchers-core_2.12/') - .reply(200, "3.2.1/"); - httpMock - .scope('https://repo.maven.apache.org') - .get( - '/maven2/org/scalatest/scalatest-app_2.12/6.5.4/scalatest-app_2.12-6.5.4.pom' - ) - .reply( - 200, - '' + - 'http://www.scalatest.org' + - '' + - 'https://github.com/scalatest/scalatest' + - '' + - '' - ); + .reply(200, '') + .get('/maven2/com.example/') + .reply(404); + + const res = await getPkgReleases({ + versioning: mavenVersioning.id, + datasource: SbtPackageDatasource.id, + depName: 'com.example:empty', + registryUrls: [], + }); + + expect(res).toBeNull(); + }); + + it('fetches releases from Maven', async () => { httpMock - .scope('https://repo.maven.apache.org') - .get( - '/maven2/org/scalatest/scalatest-flatspec_2.12/6.5.4/scalatest-flatspec_2.12-6.5.4.pom' - ) + .scope('https://repo.maven.apache.org/maven2/') + .get('/org/example/') .reply( 200, - '' + - '' + - 'scm:git:git:git@github.com/scalatest/scalatest' + - '' + - '' - ); - httpMock - .scope('https://repo.maven.apache.org') - .get( - '/maven2/org/scalatest/scalatest-matchers-core_2.12/6.5.4/scalatest-matchers-core_2.12-6.5.4.pom' + [ + `example_2.12/`, + `example_2.12/`, + `example_native/`, + `example_sjs/`, + ].join('\n') ) - .reply( - 200, - '' + - 'http://www.scalatest.org' + - '' - ); + .get('/org/example/example/') + .reply(200, `1.2.0/`) + .get('/org/example/example_2.12/') + .reply(200, `1.2.3/`) + .get('/org/example/example/1.2.3/example-1.2.3.pom') + .twice() + .reply(200, ``) + .get('/org/example/example_2.12/1.2.3/example-1.2.3.pom') + .reply(200, ``) + .get('/org/example/example_2.12/1.2.3/example_2.12-1.2.3.pom') + .reply(200, ``); + const res = await getPkgReleases({ + versioning: mavenVersioning.id, + datasource: SbtPackageDatasource.id, + depName: 'org.example:example', + registryUrls: [MAVEN_REPO], + }); + + expect(res).toEqual({ + dependencyUrl: 'https://repo.maven.apache.org/maven2/org/example', + registryUrl: 'https://repo.maven.apache.org/maven2', + releases: [{ version: '1.2.0' }, { version: '1.2.3' }], + }); + }); + + it('fetches Maven releases with Scala version', async () => { httpMock - .scope('https://dl.bintray.com') - .get('/sbt/sbt-plugin-releases/com.github.gseitz/') - .reply(200, ''); - httpMock - .scope('https://dl.bintray.com') - .get('/sbt/sbt-plugin-releases/org.foundweekends/sbt-bintray/') + .scope('https://repo.maven.apache.org/maven2/') + .get('/org/example/') .reply( 200, - '\n' + - '\n' + - '\n' + - '\n' + - '
scala_2.12/
\n' + - '\n' + - '' - ); - httpMock - .scope('https://dl.bintray.com') - .get( - '/sbt/sbt-plugin-releases/org.foundweekends/sbt-bintray/scala_2.12/' + `example_2.12/` ) - .reply( - 200, - '\n' + - '\n' + - '\n' + - '\n' + - '\n' + - '
sbt_1.0/
\n' + - '\n' + - '\n' - ); - httpMock - .scope('https://dl.bintray.com') - .get( - '/sbt/sbt-plugin-releases/org.foundweekends/sbt-bintray/scala_2.12/sbt_1.0/' - ) - .reply( - 200, - '\n' + - '\n' + - '\n' + - '\n' + - '\n' + - '
0.5.5/
\n' + - '\n' + - '\n' - ); + .get('/org/example/example_2.12/') + .reply(200, `1.2.3/`) + .get('/org/example/example_2.12/1.2.3/example-1.2.3.pom') + .reply(200, ``) + .get('/org/example/example_2.12/1.2.3/example_2.12-1.2.3.pom') + .reply(200, ``); + + const res = await getPkgReleases({ + versioning: mavenVersioning.id, + datasource: SbtPackageDatasource.id, + depName: 'org.example:example_2.12', + registryUrls: [], + }); + expect(res).toEqual({ + dependencyUrl: 'https://repo.maven.apache.org/maven2/org/example', + registryUrl: 'https://repo.maven.apache.org/maven2', + releases: [{ version: '1.2.3' }], + }); + }); + + it('fetches releases from Confluent', async () => { httpMock - .scope('https://packages.confluent.io/maven') - .get('/io/confluent/') + .scope('https://packages.confluent.io/maven/io/confluent') + .get('/') .reply( 200, 'kafka-avro-serializer/' - ); - httpMock - .scope('https://packages.confluent.io/maven') - .get('/io/confluent/kafka-avro-serializer/') + ) + .get('/kafka-avro-serializer/') .reply( 200, '7.0.1/' - ); - httpMock - .scope('https://packages.confluent.io/maven') - .get('/io/confluent/kafka-avro-serializer/7.0.1/') - .reply( - 200, - 'kafka-avro-serializer-7.0.1.pom' - ); - httpMock - .scope('https://packages.confluent.io/maven') - .get( - '/io/confluent/kafka-avro-serializer/7.0.1/kafka-avro-serializer-7.0.1.pom' ) + .get('/kafka-avro-serializer/7.0.1/kafka-avro-serializer-7.0.1.pom') .reply( 200, ` - z - kafka-avro-serializer - jar - kafka-avro-serializer - - ` + z + kafka-avro-serializer + jar + kafka-avro-serializer + + ` ); - }); - - // TODO: fix mocks - afterEach(() => httpMock.clear(false)); - - it('returns null in case of errors', async () => { - expect( - await getPkgReleases({ - versioning: mavenVersioning.id, - datasource: SbtPackageDatasource.id, - depName: 'org.scalatest:scalatest', - registryUrls: ['https://failed_repo/maven'], - }) - ).toBeNull(); - }); - it('returns null if there is no version', async () => { - expect( - await getPkgReleases({ - versioning: mavenVersioning.id, - datasource: SbtPackageDatasource.id, - depName: 'com.example:empty', - registryUrls: [], - }) - ).toBeNull(); - }); - - it('fetches releases from Maven', async () => { - expect( - await getPkgReleases({ - versioning: mavenVersioning.id, - datasource: SbtPackageDatasource.id, - depName: 'org.scalatest:scalatest', - registryUrls: ['https://failed_repo/maven', MAVEN_REPO], - }) - ).toEqual({ - dependencyUrl: 'https://repo.maven.apache.org/maven2/org/scalatest', - registryUrl: 'https://repo.maven.apache.org/maven2', - releases: [{ version: '1.2.0' }, { version: '1.2.3' }], - }); - }); - - it('fetches releases from Maven 2', async () => { - expect( - await getPkgReleases({ - versioning: mavenVersioning.id, - datasource: SbtPackageDatasource.id, - depName: 'org.scalatest:scalatest_2.12', - registryUrls: [], - }) - ).toEqual({ - dependencyUrl: 'https://repo.maven.apache.org/maven2/org/scalatest', - registryUrl: 'https://repo.maven.apache.org/maven2', - releases: [{ version: '1.2.3' }], + const res = await getPkgReleases({ + versioning: mavenVersioning.id, + datasource: SbtPackageDatasource.id, + depName: 'io.confluent:kafka-avro-serializer', + registryUrls: ['https://packages.confluent.io/maven'], }); - }); - - it('fetches releases from Confluent', async () => { - expect( - await getPkgReleases({ - versioning: mavenVersioning.id, - datasource: SbtPackageDatasource.id, - depName: 'io.confluent:kafka-avro-serializer', - registryUrls: ['https://packages.confluent.io/maven'], - }) - ).toEqual({ + expect(res).toEqual({ dependencyUrl: 'https://packages.confluent.io/maven/io/confluent', registryUrl: 'https://packages.confluent.io/maven', releases: [{ version: '7.0.1' }], @@ -265,45 +165,36 @@ describe('modules/datasource/sbt-package/index', () => { }); it('extracts URL from Maven POM file', async () => { - expect( - await getPkgReleases({ - versioning: mavenVersioning.id, - datasource: SbtPackageDatasource.id, - depName: 'org.scalatest:scalatest-app_2.12', - registryUrls: [], - }) - ).toEqual({ - dependencyUrl: 'https://repo.maven.apache.org/maven2/org/scalatest', - registryUrl: 'https://repo.maven.apache.org/maven2', - releases: [{ version: '6.5.4' }], - homepage: 'http://www.scalatest.org', - sourceUrl: 'https://github.com/scalatest/scalatest', - }); - expect( - await getPkgReleases({ - versioning: mavenVersioning.id, - datasource: SbtPackageDatasource.id, - depName: 'org.scalatest:scalatest-flatspec_2.12', - registryUrls: [], - }) - ).toEqual({ - dependencyUrl: 'https://repo.maven.apache.org/maven2/org/scalatest', - registryUrl: 'https://repo.maven.apache.org/maven2', - releases: [{ version: '6.5.4' }], - sourceUrl: 'https://github.com/scalatest/scalatest', + httpMock + .scope('https://repo.maven.apache.org/maven2/') + .get('/org/example/') + .reply(200, `example_2.12/`) + .get('/org/example/example/') + .reply(200, `1.2.3/`) + .get('/org/example/example/1.2.3/example-1.2.3.pom') + .reply( + 200, + ` + + https://package.example.org/about + + https://example.org/repo.git + + + ` + ); + + const res = await getPkgReleases({ + versioning: mavenVersioning.id, + datasource: SbtPackageDatasource.id, + depName: 'org.example:example', + registryUrls: [MAVEN_REPO], }); - expect( - await getPkgReleases({ - versioning: mavenVersioning.id, - datasource: SbtPackageDatasource.id, - depName: 'org.scalatest:scalatest-matchers-core_2.12', - registryUrls: [], - }) - ).toEqual({ - dependencyUrl: 'https://repo.maven.apache.org/maven2/org/scalatest', - registryUrl: 'https://repo.maven.apache.org/maven2', - releases: [{ version: '6.5.4' }], - homepage: 'http://www.scalatest.org', + + expect(res).toMatchObject({ + homepage: 'https://package.example.org/about', + sourceUrl: 'https://example.org/repo', + releases: [{ version: '1.2.3' }], }); }); });