diff --git a/lib/workers/repository/init/config.spec.ts b/lib/workers/repository/init/config.spec.ts index 1707c056d91248f0e6997197d0c9f0631b298d3f..524380e758114f6d248ad2a5f68f08faab8aa533 100644 --- a/lib/workers/repository/init/config.spec.ts +++ b/lib/workers/repository/init/config.spec.ts @@ -1,5 +1,6 @@ import { RenovateConfig, + fs, getConfig, mocked, platform, @@ -7,6 +8,8 @@ import { import * as _migrateAndValidate from '../../../config/migrate-validate'; import { mergeRenovateConfig } from './config'; +jest.mock('../../../util/fs'); + const migrateAndValidate = mocked(_migrateAndValidate); let config: RenovateConfig; @@ -29,7 +32,7 @@ describe('workers/repository/init/config', () => { }); it('returns config if not found', async () => { platform.getFileList.mockResolvedValue(['package.json']); - platform.getFile.mockResolvedValue('{}'); + fs.readLocalFile.mockResolvedValue('{}'); const res = await mergeRenovateConfig(config); expect(res).toMatchObject(config); }); @@ -41,12 +44,12 @@ describe('workers/repository/init/config', () => { prHourlyLimit: 10, }, }); - platform.getFile.mockResolvedValue(pJson); + fs.readLocalFile.mockResolvedValue(pJson); await mergeRenovateConfig(config); }); it('returns error if cannot parse', async () => { platform.getFileList.mockResolvedValue(['package.json', 'renovate.json']); - platform.getFile.mockResolvedValue('cannot parse'); + fs.readLocalFile.mockResolvedValue('cannot parse'); let e; try { await mergeRenovateConfig(config); @@ -60,7 +63,7 @@ describe('workers/repository/init/config', () => { }); it('throws error if duplicate keys', async () => { platform.getFileList.mockResolvedValue(['package.json', '.renovaterc']); - platform.getFile.mockResolvedValue( + fs.readLocalFile.mockResolvedValue( '{ "enabled": true, "enabled": false }' ); let e; @@ -79,7 +82,7 @@ describe('workers/repository/init/config', () => { 'package.json', 'renovate.json5', ]); - platform.getFile.mockResolvedValue(`{ + fs.readLocalFile.mockResolvedValue(`{ // this is json5 format }`); await mergeRenovateConfig(config); @@ -89,7 +92,7 @@ describe('workers/repository/init/config', () => { 'package.json', '.github/renovate.json', ]); - platform.getFile.mockResolvedValue('{}'); + fs.readLocalFile.mockResolvedValue('{}'); await mergeRenovateConfig(config); }); it('finds .gitlab/renovate.json', async () => { @@ -97,7 +100,7 @@ describe('workers/repository/init/config', () => { 'package.json', '.gitlab/renovate.json', ]); - platform.getFile.mockResolvedValue('{}'); + fs.readLocalFile.mockResolvedValue('{}'); await mergeRenovateConfig(config); }); it('finds .renovaterc.json', async () => { @@ -105,7 +108,7 @@ describe('workers/repository/init/config', () => { 'package.json', '.renovaterc.json', ]); - platform.getFile.mockResolvedValue('{}'); + fs.readLocalFile.mockResolvedValue('{}'); await mergeRenovateConfig(config); }); it('throws error if misconfigured', async () => { @@ -113,7 +116,7 @@ describe('workers/repository/init/config', () => { 'package.json', '.renovaterc.json', ]); - platform.getFile.mockResolvedValue('{}'); + fs.readLocalFile.mockResolvedValue('{}'); migrateAndValidate.migrateAndValidate.mockResolvedValueOnce({ errors: [{ depName: 'dep', message: 'test error' }], }); diff --git a/lib/workers/repository/init/config.ts b/lib/workers/repository/init/config.ts index 52b8b2cd22275887091ab5d727ed2305bf3bd8b5..547c2b39335b7bb3c81b06e8dfac9bf6b1efa93c 100644 --- a/lib/workers/repository/init/config.ts +++ b/lib/workers/repository/init/config.ts @@ -14,6 +14,7 @@ import { import * as npmApi from '../../../datasource/npm'; import { logger } from '../../../logger'; import { platform } from '../../../platform'; +import { readLocalFile } from '../../../util/fs'; import * as hostRules from '../../../util/host-rules'; import { flattenPackageRules } from './flatten'; @@ -27,7 +28,7 @@ export async function mergeRenovateConfig( for (const fileName of configFileNames) { if (fileName === 'package.json') { try { - const pJson = JSON.parse(await platform.getFile('package.json')); + const pJson = JSON.parse(await readLocalFile('package.json', 'utf8')); if (pJson.renovate) { logger.debug('Using package.json for global renovate config'); return 'package.json'; @@ -50,10 +51,11 @@ export async function mergeRenovateConfig( let renovateJson; if (configFile === 'package.json') { // We already know it parses - renovateJson = JSON.parse(await platform.getFile('package.json')).renovate; + renovateJson = JSON.parse(await readLocalFile('package.json', 'utf8')) + .renovate; logger.debug({ config: renovateJson }, 'package.json>renovate config'); } else { - let renovateConfig = await platform.getFile(configFile); + let renovateConfig = await readLocalFile(configFile, 'utf8'); // istanbul ignore if if (renovateConfig === null) { logger.warn('Fetching renovate config returns null'); diff --git a/lib/workers/repository/onboarding/branch/check.ts b/lib/workers/repository/onboarding/branch/check.ts index 728117308eb818240cb11d75e8a9632792098340..363c697cec7548f3c84a65069b5f67342b5d95ca 100644 --- a/lib/workers/repository/onboarding/branch/check.ts +++ b/lib/workers/repository/onboarding/branch/check.ts @@ -4,6 +4,7 @@ import { REPOSITORY_DISABLED } from '../../../../constants/error-messages'; import { PR_STATE_NOT_OPEN } from '../../../../constants/pull-requests'; import { logger } from '../../../../logger'; import { platform } from '../../../../platform'; +import { readLocalFile } from '../../../../util/fs'; const findFile = async (fileName: string): Promise<boolean> => { logger.debug(`findFile(${fileName})`); @@ -22,7 +23,7 @@ const configFileExists = async (): Promise<boolean> => { const packageJsonConfigExists = async (): Promise<boolean> => { try { - const pJson = JSON.parse(await platform.getFile('package.json')); + const pJson = JSON.parse(await readLocalFile('package.json', 'utf8')); if (pJson.renovate) { return true; } diff --git a/lib/workers/repository/onboarding/branch/config.ts b/lib/workers/repository/onboarding/branch/config.ts index 70c99d825fee1931ec0497fb8e169f8e0e76ec45..45cee4492b8ebde0151fa621dfbda41b2e6b99c8 100644 --- a/lib/workers/repository/onboarding/branch/config.ts +++ b/lib/workers/repository/onboarding/branch/config.ts @@ -1,8 +1,8 @@ import is from '@sindresorhus/is'; import { RenovateConfig } from '../../../../config'; import { logger } from '../../../../logger'; -import { platform } from '../../../../platform'; import { clone } from '../../../../util/clone'; +import { readLocalFile } from '../../../../util/fs'; export async function getOnboardingConfig( config: RenovateConfig @@ -11,8 +11,9 @@ export async function getOnboardingConfig( try { logger.debug('Checking for greenkeeper config'); - const greenkeeperConfig = JSON.parse(await platform.getFile('package.json')) - .greenkeeper; + const greenkeeperConfig = JSON.parse( + await readLocalFile('package.json', 'utf8') + ).greenkeeper; if (greenkeeperConfig) { onboardingConfig.statusCheckVerify = true; } diff --git a/lib/workers/repository/onboarding/branch/index.spec.ts b/lib/workers/repository/onboarding/branch/index.spec.ts index 1ffea415f255e41ed285056732835f870ccc72d3..7c9502a47fd03ac876b61130de3d7303da8e9604 100644 --- a/lib/workers/repository/onboarding/branch/index.spec.ts +++ b/lib/workers/repository/onboarding/branch/index.spec.ts @@ -1,5 +1,10 @@ import { mock } from 'jest-mock-extended'; -import { RenovateConfig, getConfig, platform } from '../../../../../test/util'; +import { + RenovateConfig, + fs, + getConfig, + platform, +} from '../../../../../test/util'; import { PR_STATE_OPEN } from '../../../../constants/pull-requests'; import { Pr } from '../../../../platform'; import * as _rebase from './rebase'; @@ -8,6 +13,7 @@ import { checkOnboardingBranch } from '.'; const rebase: any = _rebase; jest.mock('../../../../workers/repository/onboarding/branch/rebase'); +jest.mock('../../../../util/fs'); describe('workers/repository/onboarding/branch', () => { describe('checkOnboardingBranch', () => { @@ -26,7 +32,7 @@ describe('workers/repository/onboarding/branch', () => { }); it('has default onboarding config', async () => { platform.getFileList.mockResolvedValue(['package.json']); - platform.getFile.mockResolvedValue('{}'); + fs.readLocalFile.mockResolvedValue('{}'); await checkOnboardingBranch(config); expect( platform.commitFilesToBranch.mock.calls[0][0].files[0].contents @@ -49,7 +55,7 @@ describe('workers/repository/onboarding/branch', () => { config.requireConfig = true; config.onboarding = false; platform.getFileList.mockResolvedValueOnce(['package.json']); - platform.getFile.mockResolvedValueOnce('{}'); + fs.readLocalFile.mockResolvedValueOnce('{}'); const onboardingResult = checkOnboardingBranch(config); await expect(onboardingResult).rejects.toThrow('disabled'); }); @@ -60,7 +66,7 @@ describe('workers/repository/onboarding/branch', () => { }); it('detects repo is onboarded via package.json config', async () => { platform.getFileList.mockResolvedValueOnce(['package.json']); - platform.getFile.mockResolvedValueOnce('{"renovate":{}}'); + fs.readLocalFile.mockResolvedValueOnce('{"renovate":{}}'); const res = await checkOnboardingBranch(config); expect(res.repoIsOnboarded).toBe(true); }); @@ -93,7 +99,7 @@ describe('workers/repository/onboarding/branch', () => { ignore: ['foo', 'bar'], }, }); - platform.getFile.mockResolvedValue(pJsonContent); + fs.readLocalFile.mockResolvedValue(pJsonContent); platform.commitFilesToBranch.mockResolvedValueOnce('abc123'); await checkOnboardingBranch(config); expect( diff --git a/test/util.ts b/test/util.ts index bfa4162860faa35da2d8f115afdd4ab9ba1043e3..34e742350300090ca56d4fe3765202a05e49c930 100644 --- a/test/util.ts +++ b/test/util.ts @@ -3,6 +3,7 @@ import * as upath from 'upath'; import { RenovateConfig as _RenovateConfig } from '../lib/config'; import { getConfig } from '../lib/config/defaults'; import { platform as _platform } from '../lib/platform'; +import * as _fs from '../lib/util/fs'; /** * Simple wrapper for getting mocked version of a module @@ -41,6 +42,7 @@ export function partial<T>(obj: Partial<T>): T { return obj as T; } +export const fs = mocked(_fs); export const platform = mocked(_platform); // Required because of isolatedModules