Skip to content

Commit

Permalink
test: fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
viceice committed May 5, 2023
1 parent 7bf73be commit 3eec61b
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 32 deletions.
52 changes: 30 additions & 22 deletions lib/logger/index.spec.ts
@@ -1,4 +1,6 @@
import _fs from 'fs-extra';
import type { WriteStream } from 'node:fs';
import fs from 'fs-extra';
import { partial } from '../../test/util';
import { add } from '../util/host-rules';
import { addSecretForSanitizing as addSecret } from '../util/sanitize';
import {
Expand All @@ -16,9 +18,6 @@ import {

jest.unmock('.');

jest.mock('fs-extra');
const fs: any = _fs;

describe('logger/index', () => {
it('inits', () => {
expect(logger).toBeDefined();
Expand Down Expand Up @@ -97,12 +96,15 @@ describe('logger/index', () => {

it('supports file-based logging', () => {
let chunk = '';
fs.createWriteStream.mockReturnValueOnce({
writable: true,
write(x: string) {
chunk = x;
},
});
jest.spyOn(fs, 'createWriteStream').mockReturnValueOnce(
partial<WriteStream>({
writable: true,
write(x: string): boolean {
chunk = x;
return true;
},
})
);

addStream({
name: 'logfile',
Expand All @@ -117,12 +119,15 @@ describe('logger/index', () => {

it('handles cycles', () => {
let logged: Record<string, any> = {};
fs.createWriteStream.mockReturnValueOnce({
writable: true,
write(x: string) {
logged = JSON.parse(x);
},
});
jest.spyOn(fs, 'createWriteStream').mockReturnValueOnce(
partial<WriteStream>({
writable: true,
write(x: string): boolean {
logged = JSON.parse(x);
return true;
},
})
);

addStream({
name: 'logfile',
Expand All @@ -142,12 +147,15 @@ describe('logger/index', () => {

it('sanitizes secrets', () => {
let logged: Record<string, any> = {};
fs.createWriteStream.mockReturnValueOnce({
writable: true,
write(x: string) {
logged = JSON.parse(x);
},
});
jest.spyOn(fs, 'createWriteStream').mockReturnValueOnce(
partial<WriteStream>({
writable: true,
write(x: string): boolean {
logged = JSON.parse(x);
return true;
},
})
);

addStream({
name: 'logfile',
Expand Down
1 change: 0 additions & 1 deletion lib/modules/manager/bundler/artifacts.spec.ts
Expand Up @@ -23,7 +23,6 @@ import { updateArtifacts } from '.';
const datasource = mocked(_datasource);
const bundlerHostRules = mocked(_bundlerHostRules);

jest.mock('fs-extra');
jest.mock('../../../util/exec/env');
jest.mock('../../datasource');
jest.mock('../../../util/fs');
Expand Down
3 changes: 2 additions & 1 deletion lib/util/git/private-key.spec.ts
@@ -1,9 +1,10 @@
import { Fixtures } from '../../../test/fixtures';
import { mocked } from '../../../test/util';
import * as exec_ from '../exec';
import { configSigningKey, writePrivateKey } from './private-key';
import { setPrivateKey } from '.';

jest.mock('fs-extra');
jest.mock('fs-extra', () => Fixtures.fsExtra());
jest.mock('../exec');

const exec = mocked(exec_);
Expand Down
25 changes: 19 additions & 6 deletions lib/workers/global/index.spec.ts
@@ -1,11 +1,11 @@
import { expect } from '@jest/globals';
import { ERROR, WARN } from 'bunyan';
import * as _fs from 'fs-extra';
import fs from 'fs-extra';
import { logger, mocked } from '../../../test/util';
import * as _presets from '../../config/presets';
import { CONFIG_PRESETS_INVALID } from '../../constants/error-messages';
import { DockerDatasource } from '../../modules/datasource/docker';
import * as _platform from '../../modules/platform';
import * as platform from '../../modules/platform';
import * as secrets from '../../util/sanitize';
import * as repositoryWorker from '../repository';
import * as configParser from './config/parse';
Expand All @@ -16,20 +16,33 @@ jest.mock('../repository');
jest.mock('../../util/fs');
jest.mock('../../config/presets');

jest.mock('fs-extra');
const fs = mocked(_fs);
const platform = mocked(_platform);
jest.mock('fs-extra', () => {
const realFs = jest.requireActual<typeof fs>('fs-extra');
return {
ensureDir: jest.fn(),
remove: jest.fn(),
readFile: jest.fn((file: string, options: any) => {
if (file.endsWith('.wasm.gz')) {
return realFs.readFile(file, options);
}
return undefined;
}),
writeFile: jest.fn(),
outputFile: jest.fn(),
};
});

// imports are readonly
const presets = mocked(_presets);

const addSecretForSanitizing = jest.spyOn(secrets, 'addSecretForSanitizing');
const parseConfigs = jest.spyOn(configParser, 'parseConfigs');
const initPlatform = jest.spyOn(platform, 'initPlatform');

describe('workers/global/index', () => {
beforeEach(() => {
logger.getProblems.mockImplementationOnce(() => []);
platform.initPlatform.mockImplementation((input) => Promise.resolve(input));
initPlatform.mockImplementation((input) => Promise.resolve(input));
delete process.env.AWS_SECRET_ACCESS_KEY;
delete process.env.AWS_SESSION_TOKEN;
});
Expand Down
17 changes: 15 additions & 2 deletions test/fixtures.ts
@@ -1,8 +1,10 @@
import type fs from 'node:fs';
import fs from 'node:fs';
import type { PathLike, Stats } from 'node:fs';
import { jest } from '@jest/globals';
import callsite from 'callsite';
import { DirectoryJSON, fs as memfs, vol } from 'memfs';
import type { TDataOut } from 'memfs/lib/encoding';
import type { IOptions } from 'memfs/lib/volume';
import upath from 'upath';

// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
Expand Down Expand Up @@ -93,7 +95,7 @@ export class Fixtures {
...memfs,
pathExists: jest.fn(pathExists),
remove: jest.fn(memfs.promises.rm),
readFile: jest.fn(memfs.promises.readFile),
readFile: jest.fn(readFile),
writeFile: jest.fn(memfs.promises.writeFile),
outputFile: jest.fn(outputFile),
stat: jest.fn(stat),
Expand All @@ -107,6 +109,17 @@ export class Fixtures {
}
}

export function readFile(
fileName: string,
options: IOptions
): Promise<TDataOut> {
if (fileName.endsWith('.wasm') || fileName.endsWith('.wasm.gz')) {
return fs.promises.readFile(fileName, options as any);
}

return memfs.promises.readFile(fileName, options);
}

export async function outputFile(
file: string,
data: string | Buffer | Uint8Array
Expand Down

0 comments on commit 3eec61b

Please sign in to comment.