Skip to content

Commit dabe3d0

Browse files
pret-a-porterrarkinsJamieMageeviceice
authored
refactor: introduce Fixtures util class (#12638)
* refactor: introduce Fixtures util class * refactor: align yarn.spec * refactor: move fs mocks to __mocks__ folder * refactor: improve fs-extra mock * refactor: move callsite to dev deps * refactor: use fixtures class * refactor: use fixtures class * refactor: reduce external variables in tests * refactor: improve Fixtures * refactor: add type for realFs * refactor: remove obsolete snapshot * fix: by comments * refactor: provide ability to spy on mocked fs methods * refactor: fix build * refactor: fix by comments * refactor: add docs * refactor: fix unit test * refactor: return called times checks * refactor: fix by comments * refactor: adjust unit test * refactor: adjust unit test * refactor: fix unit test * refactor: fix by comments * refactor: fix by comments * refactor: update jsdoc * refactor: fix by comments Co-authored-by: Rhys Arkins <[email protected]> Co-authored-by: Jamie Magee <[email protected]> Co-authored-by: Michael Kriese <[email protected]>
1 parent 38a6119 commit dabe3d0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+428
-337
lines changed

__mocks__/fs.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { fs } from 'memfs';
2+
3+
module.exports = fs;

lib/config/decrypt.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { loadFixture } from '../../test/util';
1+
import { Fixtures } from '../../test/fixtures';
22
import { decryptConfig } from './decrypt';
33
import { GlobalConfig } from './global';
44
import type { RenovateConfig } from './types';
55

6-
const privateKey = loadFixture('private.pem', '.');
7-
const privateKeyPgp = loadFixture('private-pgp.pem', '.');
6+
const privateKey = Fixtures.get('private.pem');
7+
const privateKeyPgp = Fixtures.get('private-pgp.pem');
88
const repository = 'abc/def';
99

1010
describe('config/decrypt', () => {

lib/datasource/adoptium-java/index.spec.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
import { getPkgReleases } from '..';
2+
import { Fixtures } from '../../../test/fixtures';
23
import * as httpMock from '../../../test/http-mock';
3-
import { loadFixture } from '../../../test/util';
44
import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
55
import { range } from '../../util/range';
66
import { datasource, defaultRegistryUrl, pageSize } from './common';
77

8-
const res1 = loadFixture('page.json');
9-
const jre = loadFixture('jre.json');
10-
118
function getPath(page: number, imageType = 'jdk'): string {
129
return `/v3/info/release_versions?page_size=${pageSize}&image_type=${imageType}&project=jdk&release_type=ga&sort_method=DATE&sort_order=DESC&vendor=adoptium&page=${page}`;
1310
}
@@ -73,7 +70,10 @@ describe('datasource/adoptium-java/index', () => {
7370
});
7471

7572
it('processes real data', async () => {
76-
httpMock.scope(defaultRegistryUrl).get(getPath(0)).reply(200, res1);
73+
httpMock
74+
.scope(defaultRegistryUrl)
75+
.get(getPath(0))
76+
.reply(200, Fixtures.get('page.json'));
7777
const res = await getPkgReleases({
7878
datasource,
7979
depName,
@@ -83,7 +83,10 @@ describe('datasource/adoptium-java/index', () => {
8383
});
8484

8585
it('processes real data (jre)', async () => {
86-
httpMock.scope(defaultRegistryUrl).get(getPath(0, 'jre')).reply(200, jre);
86+
httpMock
87+
.scope(defaultRegistryUrl)
88+
.get(getPath(0, 'jre'))
89+
.reply(200, Fixtures.get('jre.json'));
8790
const res = await getPkgReleases({
8891
datasource,
8992
depName: 'java-jre',

lib/datasource/artifactory/index.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getPkgReleases } from '..';
2+
import { Fixtures } from '../../../test/fixtures';
23
import * as httpMock from '../../../test/http-mock';
3-
import { loadFixture } from '../../../test/util';
44
import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
55
import { logger } from '../../logger';
66
import { joinUrlParts } from '../../util/url';
@@ -14,8 +14,8 @@ const testConfig = {
1414
registryUrls: [testRegistryUrl],
1515
depName: testLookupName,
1616
};
17-
const fixtureReleasesAsFolders = loadFixture('releases-as-folders.html');
18-
const fixtureReleasesAsFiles = loadFixture('releases-as-files.html');
17+
const fixtureReleasesAsFolders = Fixtures.get('releases-as-folders.html');
18+
const fixtureReleasesAsFiles = Fixtures.get('releases-as-files.html');
1919

2020
function getPath(folder: string): string {
2121
return `/${folder}`;

lib/datasource/cdnjs/index.spec.ts

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
import { getPkgReleases } from '..';
2+
import { Fixtures } from '../../../test/fixtures';
23
import * as httpMock from '../../../test/http-mock';
3-
import { loadFixture } from '../../../test/util';
44
import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
55
import { CdnJsDatasource } from '.';
66

7-
const res1 = loadFixture('d3-force.json');
8-
const res2 = loadFixture('bulma.json');
9-
107
const baseUrl = 'https://api.cdnjs.com/';
118

129
const pathFor = (s: string): string =>
@@ -105,7 +102,7 @@ describe('datasource/cdnjs/index', () => {
105102
httpMock
106103
.scope(baseUrl)
107104
.get(pathFor('d3-force/d3-force.js'))
108-
.reply(200, res1);
105+
.reply(200, Fixtures.get('d3-force.json'));
109106
const res = await getPkgReleases({
110107
datasource: CdnJsDatasource.id,
111108
depName: 'd3-force/d3-force.js',
@@ -117,7 +114,7 @@ describe('datasource/cdnjs/index', () => {
117114
httpMock
118115
.scope(baseUrl)
119116
.get(pathFor('bulma/only/0.7.5/style.css'))
120-
.reply(200, res2);
117+
.reply(200, Fixtures.get('bulma.json'));
121118
const res = await getPkgReleases({
122119
datasource: CdnJsDatasource.id,
123120
depName: 'bulma/only/0.7.5/style.css',

lib/datasource/crate/index.spec.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import _simpleGit from 'simple-git';
44
import { DirectoryResult, dir } from 'tmp-promise';
55
import { dirname, join } from 'upath';
66
import { getPkgReleases } from '..';
7+
import { Fixtures } from '../../../test/fixtures';
78
import * as httpMock from '../../../test/http-mock';
8-
import { loadFixture } from '../../../test/util';
99
import { GlobalConfig } from '../../config/global';
1010
import type { RepoGlobalConfig } from '../../config/types';
1111
import * as memCache from '../../util/cache/memory';
@@ -15,10 +15,6 @@ import { CrateDatasource } from '.';
1515
jest.mock('simple-git');
1616
const simpleGit: any = _simpleGit;
1717

18-
const res1 = loadFixture('libc');
19-
const res2 = loadFixture('amethyst');
20-
const res3 = loadFixture('mypkg');
21-
2218
const baseUrl =
2319
'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';
2420

@@ -36,7 +32,7 @@ function setupGitMocks(delayMs?: number): { mockClone: jest.Mock<any, any> } {
3632

3733
const path = `${clonePath}/my/pk/mypkg`;
3834
fs.mkdirSync(dirname(path), { recursive: true });
39-
fs.writeFileSync(path, res3, { encoding: 'utf8' });
35+
fs.writeFileSync(path, Fixtures.get('mypkg'), { encoding: 'utf8' });
4036
}
4137
);
4238

@@ -209,7 +205,10 @@ describe('datasource/crate/index', () => {
209205
expect(httpMock.getTrace()).toMatchSnapshot();
210206
});
211207
it('processes real data: libc', async () => {
212-
httpMock.scope(baseUrl).get('/li/bc/libc').reply(200, res1);
208+
httpMock
209+
.scope(baseUrl)
210+
.get('/li/bc/libc')
211+
.reply(200, Fixtures.get('libc'));
213212
const res = await getPkgReleases({
214213
datasource,
215214
depName: 'libc',
@@ -221,7 +220,10 @@ describe('datasource/crate/index', () => {
221220
expect(httpMock.getTrace()).toMatchSnapshot();
222221
});
223222
it('processes real data: amethyst', async () => {
224-
httpMock.scope(baseUrl).get('/am/et/amethyst').reply(200, res2);
223+
httpMock
224+
.scope(baseUrl)
225+
.get('/am/et/amethyst')
226+
.reply(200, Fixtures.get('amethyst'));
225227
const res = await getPkgReleases({
226228
datasource,
227229
depName: 'amethyst',

lib/datasource/galaxy-collection/index.spec.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import { getPkgReleases } from '..';
2+
import { Fixtures } from '../../../test/fixtures';
23
import * as httpMock from '../../../test/http-mock';
3-
import { loadFixture } from '../../../test/util';
44
import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
55
import { GalaxyCollectionDatasource } from '.';
66

7-
const communityKubernetesBase = loadFixture('community_kubernetes_base.json');
8-
const communityKubernetesVersions = loadFixture(
7+
const communityKubernetesBase = Fixtures.get('community_kubernetes_base.json');
8+
const communityKubernetesVersions = Fixtures.get(
99
'community_kubernetes_versions.json'
1010
);
11-
const communityKubernetesDetails121 = loadFixture(
11+
const communityKubernetesDetails121 = Fixtures.get(
1212
'community_kubernetes_version_details_1.2.1.json'
1313
);
14-
const communityKubernetesDetails120 = loadFixture(
14+
const communityKubernetesDetails120 = Fixtures.get(
1515
'community_kubernetes_version_details_1.2.0.json'
1616
);
17-
const communityKubernetesDetails0111 = loadFixture(
17+
const communityKubernetesDetails0111 = Fixtures.get(
1818
'community_kubernetes_version_details_0.11.1.json'
1919
);
2020

lib/datasource/galaxy/index.spec.ts

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
import { getPkgReleases } from '..';
2+
import { Fixtures } from '../../../test/fixtures';
23
import * as httpMock from '../../../test/http-mock';
3-
import { loadFixture } from '../../../test/util';
44
import { GalaxyDatasource } from '.';
55

6-
const res1 = loadFixture('timezone');
7-
const empty = loadFixture('empty');
8-
96
const baseUrl = 'https://galaxy.ansible.com/';
107

118
describe('datasource/galaxy/index', () => {
@@ -79,7 +76,7 @@ describe('datasource/galaxy/index', () => {
7976
httpMock
8077
.scope(baseUrl)
8178
.get('/api/v1/roles/?owner__username=yatesr&name=timezone')
82-
.reply(200, res1);
79+
.reply(200, Fixtures.get('timezone'));
8380
const res = await getPkgReleases({
8481
datasource: GalaxyDatasource.id,
8582
depName: 'yatesr.timezone',
@@ -93,7 +90,7 @@ describe('datasource/galaxy/index', () => {
9390
httpMock
9491
.scope(baseUrl)
9592
.get('/api/v1/roles/?owner__username=foo&name=bar')
96-
.reply(200, empty);
93+
.reply(200, Fixtures.get('empty'));
9794
const res = await getPkgReleases({
9895
datasource: GalaxyDatasource.id,
9996
depName: 'foo.bar',

lib/datasource/git-refs/index.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import _simpleGit from 'simple-git';
22
import { getPkgReleases } from '..';
3-
import { loadFixture } from '../../../test/util';
3+
import { Fixtures } from '../../../test/fixtures';
44
import { GitRefsDatasource } from '.';
55

66
jest.mock('simple-git');
77
const simpleGit: any = _simpleGit;
88

99
const depName = 'https://github.com/example/example.git';
1010

11-
const lsRemote1 = loadFixture('ls-remote-1.txt');
11+
const lsRemote1 = Fixtures.get('ls-remote-1.txt');
1212

1313
const datasource = GitRefsDatasource.id;
1414

lib/datasource/git-tags/index.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import _simpleGit from 'simple-git';
22
import { getPkgReleases } from '..';
3-
import { loadFixture } from '../../../test/util';
3+
import { Fixtures } from '../../../test/fixtures';
44
import { GitTagsDatasource } from '.';
55

66
jest.mock('simple-git');
77
const simpleGit: any = _simpleGit;
88

99
const depName = 'https://github.com/example/example.git';
1010

11-
const lsRemote1 = loadFixture('ls-remote-1.txt', '../git-refs');
11+
const lsRemote1 = Fixtures.get('ls-remote-1.txt', '../git-refs');
1212

1313
const datasource = GitTagsDatasource.id;
1414
const datasourceInstance = new GitTagsDatasource();

lib/datasource/helm/index.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { getPkgReleases } from '..';
2+
import { Fixtures } from '../../../test/fixtures';
23
import * as httpMock from '../../../test/http-mock';
3-
import { loadFixture } from '../../../test/util';
44
import { HelmDatasource } from '.';
55

66
// Truncated index.yaml file
7-
const indexYaml = loadFixture('index.yaml');
7+
const indexYaml = Fixtures.get('index.yaml');
88

99
describe('datasource/helm/index', () => {
1010
describe('getReleases', () => {

lib/datasource/node/index.spec.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import { getPkgReleases } from '..';
2+
import { Fixtures } from '../../../test/fixtures';
23
import * as httpMock from '../../../test/http-mock';
3-
import { loadFixture } from '../../../test/util';
44
import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
55
import { datasource, defaultRegistryUrl } from './common';
66

7-
const res1 = loadFixture('index.json');
8-
97
describe('datasource/node/index', () => {
108
describe('getReleases', () => {
119
it('throws for 500', async () => {
@@ -42,7 +40,10 @@ describe('datasource/node/index', () => {
4240
});
4341

4442
it('processes real data', async () => {
45-
httpMock.scope(defaultRegistryUrl).get('/index.json').reply(200, res1);
43+
httpMock
44+
.scope(defaultRegistryUrl)
45+
.get('/index.json')
46+
.reply(200, Fixtures.get('index.json'));
4647
const res = await getPkgReleases({
4748
datasource,
4849
depName: 'node',

lib/datasource/ruby-version/index.spec.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
import { getPkgReleases } from '..';
2+
import { Fixtures } from '../../../test/fixtures';
23
import * as httpMock from '../../../test/http-mock';
3-
import { loadFixture } from '../../../test/util';
44
import { RubyVersionDatasource } from '.';
55

6-
const rubyReleasesHtml = loadFixture('releases.html');
7-
86
const datasource = RubyVersionDatasource.id;
97

108
describe('datasource/ruby-version/index', () => {
@@ -13,7 +11,7 @@ describe('datasource/ruby-version/index', () => {
1311
httpMock
1412
.scope('https://www.ruby-lang.org')
1513
.get('/en/downloads/releases/')
16-
.reply(200, rubyReleasesHtml);
14+
.reply(200, Fixtures.get('releases.html'));
1715
const res = await getPkgReleases({
1816
datasource,
1917
depName: 'ruby',

lib/datasource/sbt-package/index.spec.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
import { getPkgReleases } from '..';
2+
import { Fixtures } from '../../../test/fixtures';
23
import * as httpMock from '../../../test/http-mock';
3-
import { loadFixture } from '../../../test/util';
44
import * as mavenVersioning from '../../versioning/maven';
55
import { MAVEN_REPO } from '../maven/common';
66
import { parseIndexDir } from '../sbt-plugin/util';
77
import * as sbtPackage from '.';
88

9-
const mavenIndexHtml = loadFixture(`maven-index.html`);
10-
const sbtPluginIndex = loadFixture(`sbt-plugins-index.html`);
11-
129
describe('datasource/sbt-package/index', () => {
1310
it('parses Maven index directory', () => {
14-
expect(parseIndexDir(mavenIndexHtml)).toMatchSnapshot();
11+
expect(parseIndexDir(Fixtures.get(`maven-index.html`))).toMatchSnapshot();
1512
});
1613

1714
it('parses sbt index directory', () => {
18-
expect(parseIndexDir(sbtPluginIndex)).toMatchSnapshot();
15+
expect(
16+
parseIndexDir(Fixtures.get(`sbt-plugins-index.html`))
17+
).toMatchSnapshot();
1918
});
2019

2120
describe('getPkgReleases', () => {

lib/manager/ansible/extract.spec.ts

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
1-
import { loadFixture } from '../../../test/util';
1+
import { Fixtures } from '../../../test/fixtures';
22
import { extractPackageFile } from './extract';
33

4-
const yamlFile1 = loadFixture('main1.yaml');
5-
const yamlFile2 = loadFixture('main2.yaml');
6-
74
describe('manager/ansible/extract', () => {
85
describe('extractPackageFile()', () => {
96
it('returns null for empty', () => {
107
expect(extractPackageFile('nothing here')).toBeNull();
118
});
129
it('extracts multiple image lines from docker_container', () => {
13-
const res = extractPackageFile(yamlFile1);
10+
const res = extractPackageFile(Fixtures.get('main1.yaml'));
1411
expect(res.deps).toMatchSnapshot();
1512
expect(res.deps).toHaveLength(9);
1613
});
1714
it('extracts multiple image lines from docker_service', () => {
18-
const res = extractPackageFile(yamlFile2);
15+
const res = extractPackageFile(Fixtures.get('main2.yaml'));
1916
expect(res.deps).toMatchSnapshot();
2017
expect(res.deps).toHaveLength(4);
2118
});

lib/manager/argocd/extract.spec.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { loadFixture } from '../../../test/util';
1+
import { Fixtures } from '../../../test/fixtures';
22
import { extractPackageFile } from './extract';
33

4-
const validApplication = loadFixture('validApplication.yml');
5-
const malformedApplication = loadFixture('malformedApplications.yml');
6-
const randomManifest = loadFixture('randomManifest.yml');
4+
const validApplication = Fixtures.get('validApplication.yml');
5+
const malformedApplication = Fixtures.get('malformedApplications.yml');
6+
const randomManifest = Fixtures.get('randomManifest.yml');
77

88
describe('manager/argocd/extract', () => {
99
describe('extractPackageFile()', () => {

lib/manager/azure-pipelines/extract.spec.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
import { loadFixture } from '../../../test/util';
1+
import { Fixtures } from '../../../test/fixtures';
22
import {
33
extractContainer,
44
extractPackageFile,
55
extractRepository,
66
parseAzurePipelines,
77
} from './extract';
88

9-
const azurePipelines = loadFixture('azure-pipelines.yaml');
9+
const azurePipelines = Fixtures.get('azure-pipelines.yaml');
1010

11-
const azurePipelinesInvalid = loadFixture('azure-pipelines-invalid.yaml');
11+
const azurePipelinesInvalid = Fixtures.get('azure-pipelines-invalid.yaml');
1212

13-
const azurePipelinesNoDependency = loadFixture(
13+
const azurePipelinesNoDependency = Fixtures.get(
1414
'azure-pipelines-no-dependency.yaml'
1515
);
1616

0 commit comments

Comments
 (0)