Skip to content

Commit

Permalink
refactor: introduce Fixtures util class (#12638)
Browse files Browse the repository at this point in the history
* 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]>
  • Loading branch information
4 people authored Jan 23, 2022
1 parent 38a6119 commit dabe3d0
Show file tree
Hide file tree
Showing 54 changed files with 428 additions and 337 deletions.
3 changes: 3 additions & 0 deletions __mocks__/fs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { fs } from 'memfs';

module.exports = fs;
6 changes: 3 additions & 3 deletions lib/config/decrypt.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { loadFixture } from '../../test/util';
import { Fixtures } from '../../test/fixtures';
import { decryptConfig } from './decrypt';
import { GlobalConfig } from './global';
import type { RenovateConfig } from './types';

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

describe('config/decrypt', () => {
Expand Down
15 changes: 9 additions & 6 deletions lib/datasource/adoptium-java/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import { getPkgReleases } from '..';
import { Fixtures } from '../../../test/fixtures';
import * as httpMock from '../../../test/http-mock';
import { loadFixture } from '../../../test/util';
import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
import { range } from '../../util/range';
import { datasource, defaultRegistryUrl, pageSize } from './common';

const res1 = loadFixture('page.json');
const jre = loadFixture('jre.json');

function getPath(page: number, imageType = 'jdk'): string {
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}`;
}
Expand Down Expand Up @@ -73,7 +70,10 @@ describe('datasource/adoptium-java/index', () => {
});

it('processes real data', async () => {
httpMock.scope(defaultRegistryUrl).get(getPath(0)).reply(200, res1);
httpMock
.scope(defaultRegistryUrl)
.get(getPath(0))
.reply(200, Fixtures.get('page.json'));
const res = await getPkgReleases({
datasource,
depName,
Expand All @@ -83,7 +83,10 @@ describe('datasource/adoptium-java/index', () => {
});

it('processes real data (jre)', async () => {
httpMock.scope(defaultRegistryUrl).get(getPath(0, 'jre')).reply(200, jre);
httpMock
.scope(defaultRegistryUrl)
.get(getPath(0, 'jre'))
.reply(200, Fixtures.get('jre.json'));
const res = await getPkgReleases({
datasource,
depName: 'java-jre',
Expand Down
6 changes: 3 additions & 3 deletions lib/datasource/artifactory/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { getPkgReleases } from '..';
import { Fixtures } from '../../../test/fixtures';
import * as httpMock from '../../../test/http-mock';
import { loadFixture } from '../../../test/util';
import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
import { logger } from '../../logger';
import { joinUrlParts } from '../../util/url';
Expand All @@ -14,8 +14,8 @@ const testConfig = {
registryUrls: [testRegistryUrl],
depName: testLookupName,
};
const fixtureReleasesAsFolders = loadFixture('releases-as-folders.html');
const fixtureReleasesAsFiles = loadFixture('releases-as-files.html');
const fixtureReleasesAsFolders = Fixtures.get('releases-as-folders.html');
const fixtureReleasesAsFiles = Fixtures.get('releases-as-files.html');

function getPath(folder: string): string {
return `/${folder}`;
Expand Down
9 changes: 3 additions & 6 deletions lib/datasource/cdnjs/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import { getPkgReleases } from '..';
import { Fixtures } from '../../../test/fixtures';
import * as httpMock from '../../../test/http-mock';
import { loadFixture } from '../../../test/util';
import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
import { CdnJsDatasource } from '.';

const res1 = loadFixture('d3-force.json');
const res2 = loadFixture('bulma.json');

const baseUrl = 'https://api.cdnjs.com/';

const pathFor = (s: string): string =>
Expand Down Expand Up @@ -105,7 +102,7 @@ describe('datasource/cdnjs/index', () => {
httpMock
.scope(baseUrl)
.get(pathFor('d3-force/d3-force.js'))
.reply(200, res1);
.reply(200, Fixtures.get('d3-force.json'));
const res = await getPkgReleases({
datasource: CdnJsDatasource.id,
depName: 'd3-force/d3-force.js',
Expand All @@ -117,7 +114,7 @@ describe('datasource/cdnjs/index', () => {
httpMock
.scope(baseUrl)
.get(pathFor('bulma/only/0.7.5/style.css'))
.reply(200, res2);
.reply(200, Fixtures.get('bulma.json'));
const res = await getPkgReleases({
datasource: CdnJsDatasource.id,
depName: 'bulma/only/0.7.5/style.css',
Expand Down
18 changes: 10 additions & 8 deletions lib/datasource/crate/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import _simpleGit from 'simple-git';
import { DirectoryResult, dir } from 'tmp-promise';
import { dirname, join } from 'upath';
import { getPkgReleases } from '..';
import { Fixtures } from '../../../test/fixtures';
import * as httpMock from '../../../test/http-mock';
import { loadFixture } from '../../../test/util';
import { GlobalConfig } from '../../config/global';
import type { RepoGlobalConfig } from '../../config/types';
import * as memCache from '../../util/cache/memory';
Expand All @@ -15,10 +15,6 @@ import { CrateDatasource } from '.';
jest.mock('simple-git');
const simpleGit: any = _simpleGit;

const res1 = loadFixture('libc');
const res2 = loadFixture('amethyst');
const res3 = loadFixture('mypkg');

const baseUrl =
'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';

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

const path = `${clonePath}/my/pk/mypkg`;
fs.mkdirSync(dirname(path), { recursive: true });
fs.writeFileSync(path, res3, { encoding: 'utf8' });
fs.writeFileSync(path, Fixtures.get('mypkg'), { encoding: 'utf8' });
}
);

Expand Down Expand Up @@ -209,7 +205,10 @@ describe('datasource/crate/index', () => {
expect(httpMock.getTrace()).toMatchSnapshot();
});
it('processes real data: libc', async () => {
httpMock.scope(baseUrl).get('/li/bc/libc').reply(200, res1);
httpMock
.scope(baseUrl)
.get('/li/bc/libc')
.reply(200, Fixtures.get('libc'));
const res = await getPkgReleases({
datasource,
depName: 'libc',
Expand All @@ -221,7 +220,10 @@ describe('datasource/crate/index', () => {
expect(httpMock.getTrace()).toMatchSnapshot();
});
it('processes real data: amethyst', async () => {
httpMock.scope(baseUrl).get('/am/et/amethyst').reply(200, res2);
httpMock
.scope(baseUrl)
.get('/am/et/amethyst')
.reply(200, Fixtures.get('amethyst'));
const res = await getPkgReleases({
datasource,
depName: 'amethyst',
Expand Down
12 changes: 6 additions & 6 deletions lib/datasource/galaxy-collection/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import { getPkgReleases } from '..';
import { Fixtures } from '../../../test/fixtures';
import * as httpMock from '../../../test/http-mock';
import { loadFixture } from '../../../test/util';
import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
import { GalaxyCollectionDatasource } from '.';

const communityKubernetesBase = loadFixture('community_kubernetes_base.json');
const communityKubernetesVersions = loadFixture(
const communityKubernetesBase = Fixtures.get('community_kubernetes_base.json');
const communityKubernetesVersions = Fixtures.get(
'community_kubernetes_versions.json'
);
const communityKubernetesDetails121 = loadFixture(
const communityKubernetesDetails121 = Fixtures.get(
'community_kubernetes_version_details_1.2.1.json'
);
const communityKubernetesDetails120 = loadFixture(
const communityKubernetesDetails120 = Fixtures.get(
'community_kubernetes_version_details_1.2.0.json'
);
const communityKubernetesDetails0111 = loadFixture(
const communityKubernetesDetails0111 = Fixtures.get(
'community_kubernetes_version_details_0.11.1.json'
);

Expand Down
9 changes: 3 additions & 6 deletions lib/datasource/galaxy/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import { getPkgReleases } from '..';
import { Fixtures } from '../../../test/fixtures';
import * as httpMock from '../../../test/http-mock';
import { loadFixture } from '../../../test/util';
import { GalaxyDatasource } from '.';

const res1 = loadFixture('timezone');
const empty = loadFixture('empty');

const baseUrl = 'https://galaxy.ansible.com/';

describe('datasource/galaxy/index', () => {
Expand Down Expand Up @@ -79,7 +76,7 @@ describe('datasource/galaxy/index', () => {
httpMock
.scope(baseUrl)
.get('/api/v1/roles/?owner__username=yatesr&name=timezone')
.reply(200, res1);
.reply(200, Fixtures.get('timezone'));
const res = await getPkgReleases({
datasource: GalaxyDatasource.id,
depName: 'yatesr.timezone',
Expand All @@ -93,7 +90,7 @@ describe('datasource/galaxy/index', () => {
httpMock
.scope(baseUrl)
.get('/api/v1/roles/?owner__username=foo&name=bar')
.reply(200, empty);
.reply(200, Fixtures.get('empty'));
const res = await getPkgReleases({
datasource: GalaxyDatasource.id,
depName: 'foo.bar',
Expand Down
4 changes: 2 additions & 2 deletions lib/datasource/git-refs/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import _simpleGit from 'simple-git';
import { getPkgReleases } from '..';
import { loadFixture } from '../../../test/util';
import { Fixtures } from '../../../test/fixtures';
import { GitRefsDatasource } from '.';

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

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

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

const datasource = GitRefsDatasource.id;

Expand Down
4 changes: 2 additions & 2 deletions lib/datasource/git-tags/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import _simpleGit from 'simple-git';
import { getPkgReleases } from '..';
import { loadFixture } from '../../../test/util';
import { Fixtures } from '../../../test/fixtures';
import { GitTagsDatasource } from '.';

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

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

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

const datasource = GitTagsDatasource.id;
const datasourceInstance = new GitTagsDatasource();
Expand Down
4 changes: 2 additions & 2 deletions lib/datasource/helm/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { getPkgReleases } from '..';
import { Fixtures } from '../../../test/fixtures';
import * as httpMock from '../../../test/http-mock';
import { loadFixture } from '../../../test/util';
import { HelmDatasource } from '.';

// Truncated index.yaml file
const indexYaml = loadFixture('index.yaml');
const indexYaml = Fixtures.get('index.yaml');

describe('datasource/helm/index', () => {
describe('getReleases', () => {
Expand Down
9 changes: 5 additions & 4 deletions lib/datasource/node/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import { getPkgReleases } from '..';
import { Fixtures } from '../../../test/fixtures';
import * as httpMock from '../../../test/http-mock';
import { loadFixture } from '../../../test/util';
import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
import { datasource, defaultRegistryUrl } from './common';

const res1 = loadFixture('index.json');

describe('datasource/node/index', () => {
describe('getReleases', () => {
it('throws for 500', async () => {
Expand Down Expand Up @@ -42,7 +40,10 @@ describe('datasource/node/index', () => {
});

it('processes real data', async () => {
httpMock.scope(defaultRegistryUrl).get('/index.json').reply(200, res1);
httpMock
.scope(defaultRegistryUrl)
.get('/index.json')
.reply(200, Fixtures.get('index.json'));
const res = await getPkgReleases({
datasource,
depName: 'node',
Expand Down
6 changes: 2 additions & 4 deletions lib/datasource/ruby-version/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { getPkgReleases } from '..';
import { Fixtures } from '../../../test/fixtures';
import * as httpMock from '../../../test/http-mock';
import { loadFixture } from '../../../test/util';
import { RubyVersionDatasource } from '.';

const rubyReleasesHtml = loadFixture('releases.html');

const datasource = RubyVersionDatasource.id;

describe('datasource/ruby-version/index', () => {
Expand All @@ -13,7 +11,7 @@ describe('datasource/ruby-version/index', () => {
httpMock
.scope('https://www.ruby-lang.org')
.get('/en/downloads/releases/')
.reply(200, rubyReleasesHtml);
.reply(200, Fixtures.get('releases.html'));
const res = await getPkgReleases({
datasource,
depName: 'ruby',
Expand Down
11 changes: 5 additions & 6 deletions lib/datasource/sbt-package/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
import { getPkgReleases } from '..';
import { Fixtures } from '../../../test/fixtures';
import * as httpMock from '../../../test/http-mock';
import { loadFixture } from '../../../test/util';
import * as mavenVersioning from '../../versioning/maven';
import { MAVEN_REPO } from '../maven/common';
import { parseIndexDir } from '../sbt-plugin/util';
import * as sbtPackage from '.';

const mavenIndexHtml = loadFixture(`maven-index.html`);
const sbtPluginIndex = loadFixture(`sbt-plugins-index.html`);

describe('datasource/sbt-package/index', () => {
it('parses Maven index directory', () => {
expect(parseIndexDir(mavenIndexHtml)).toMatchSnapshot();
expect(parseIndexDir(Fixtures.get(`maven-index.html`))).toMatchSnapshot();
});

it('parses sbt index directory', () => {
expect(parseIndexDir(sbtPluginIndex)).toMatchSnapshot();
expect(
parseIndexDir(Fixtures.get(`sbt-plugins-index.html`))
).toMatchSnapshot();
});

describe('getPkgReleases', () => {
Expand Down
9 changes: 3 additions & 6 deletions lib/manager/ansible/extract.spec.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,18 @@
import { loadFixture } from '../../../test/util';
import { Fixtures } from '../../../test/fixtures';
import { extractPackageFile } from './extract';

const yamlFile1 = loadFixture('main1.yaml');
const yamlFile2 = loadFixture('main2.yaml');

describe('manager/ansible/extract', () => {
describe('extractPackageFile()', () => {
it('returns null for empty', () => {
expect(extractPackageFile('nothing here')).toBeNull();
});
it('extracts multiple image lines from docker_container', () => {
const res = extractPackageFile(yamlFile1);
const res = extractPackageFile(Fixtures.get('main1.yaml'));
expect(res.deps).toMatchSnapshot();
expect(res.deps).toHaveLength(9);
});
it('extracts multiple image lines from docker_service', () => {
const res = extractPackageFile(yamlFile2);
const res = extractPackageFile(Fixtures.get('main2.yaml'));
expect(res.deps).toMatchSnapshot();
expect(res.deps).toHaveLength(4);
});
Expand Down
8 changes: 4 additions & 4 deletions lib/manager/argocd/extract.spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { loadFixture } from '../../../test/util';
import { Fixtures } from '../../../test/fixtures';
import { extractPackageFile } from './extract';

const validApplication = loadFixture('validApplication.yml');
const malformedApplication = loadFixture('malformedApplications.yml');
const randomManifest = loadFixture('randomManifest.yml');
const validApplication = Fixtures.get('validApplication.yml');
const malformedApplication = Fixtures.get('malformedApplications.yml');
const randomManifest = Fixtures.get('randomManifest.yml');

describe('manager/argocd/extract', () => {
describe('extractPackageFile()', () => {
Expand Down
8 changes: 4 additions & 4 deletions lib/manager/azure-pipelines/extract.spec.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { loadFixture } from '../../../test/util';
import { Fixtures } from '../../../test/fixtures';
import {
extractContainer,
extractPackageFile,
extractRepository,
parseAzurePipelines,
} from './extract';

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

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

const azurePipelinesNoDependency = loadFixture(
const azurePipelinesNoDependency = Fixtures.get(
'azure-pipelines-no-dependency.yaml'
);

Expand Down
Loading

0 comments on commit dabe3d0

Please sign in to comment.