diff --git a/lib/config/index.js b/lib/config/index.js index 9e946a6a5c8e2da67eb49b2b1508620a95e54559..a165b3b440c05d814d72b3ec985913a819ddac07 100644 --- a/lib/config/index.js +++ b/lib/config/index.js @@ -27,13 +27,12 @@ async function parseConfigs(env, argv) { const cliConfig = cliParser.getConfig(argv); const envConfig = envParser.getConfig(env); - const config = Object.assign( - {}, - defaultConfig, - fileConfig, - envConfig, - cliConfig - ); + const config = { + ...defaultConfig, + ...fileConfig, + ...envConfig, + ...cliConfig, + }; // Set log level logger.levels('stdout', config.logLevel); @@ -115,15 +114,14 @@ async function parseConfigs(env, argv) { function mergeChildConfig(parentConfig, childConfig) { logger.trace({ parentConfig, childConfig }, `mergeChildConfig`); - const config = Object.assign({}, parentConfig, childConfig); + const config = { ...parentConfig, ...childConfig }; for (const option of definitions.getOptions()) { if (option.mergeable && childConfig[option.name]) { logger.debug(`mergeable option: ${option.name}`); - config[option.name] = Object.assign( - {}, - parentConfig[option.name], - childConfig[option.name] - ); + config[option.name] = { + ...parentConfig[option.name], + ...childConfig[option.name], + }; logger.debug({ option: config[option.name] }, `config.${option.name}`); } } @@ -132,7 +130,7 @@ function mergeChildConfig(parentConfig, childConfig) { function filterConfig(inputConfig, targetStage) { logger.trace({ config: inputConfig }, `filterConfig('${targetStage}')`); - const outputConfig = Object.assign({}, inputConfig); + const outputConfig = { ...inputConfig }; const stages = [ 'global', 'repository', diff --git a/lib/config/migration.js b/lib/config/migration.js index 7dec6805d7ec566b31a1f73ab4892509197549dd..cbbd4c805b4aabd00a553f4c728d5d555d8d173c 100644 --- a/lib/config/migration.js +++ b/lib/config/migration.js @@ -18,7 +18,7 @@ const removedOptions = [ // Returns a migrated config function migrateConfig(config) { let isMigrated = false; - const migratedConfig = Object.assign({}, config); + const migratedConfig = { ...config }; for (const key of Object.keys(config)) { const val = config[key]; if (removedOptions.includes(key)) { @@ -44,7 +44,7 @@ function migrateConfig(config) { if (isObject(depType)) { const depTypeName = depType.depType; if (depTypeName) { - migratedConfig[depTypeName] = Object.assign({}, depType); + migratedConfig[depTypeName] = { ...depType }; delete migratedConfig[depTypeName].depType; } } diff --git a/lib/logger/pretty-stdout.js b/lib/logger/pretty-stdout.js index 8948ac68d3ec18c03d9c556230bfb3a0bb443418..40b98665a5f59d3fb4b1d70bd6c9e34b643da2a8 100644 --- a/lib/logger/pretty-stdout.js +++ b/lib/logger/pretty-stdout.js @@ -56,7 +56,7 @@ function getDetails(rec) { if (!rec) { return ''; } - const recFiltered = Object.assign({}, rec); + const recFiltered = { ...rec }; Object.keys(recFiltered).forEach(key => { if (bunyanFields.indexOf(key) !== -1 || metaFields.indexOf(key) !== -1) { delete recFiltered[key]; diff --git a/lib/workers/branch/index.js b/lib/workers/branch/index.js index be71bfab21bf8cbd03da251911197cbf507a6164..0a37e6e53a89d5449a0e8fb7f5edcdc13e18dd22 100644 --- a/lib/workers/branch/index.js +++ b/lib/workers/branch/index.js @@ -214,7 +214,7 @@ async function ensureBranch(config) { async function processBranchUpgrades(branchUpgrades, errors, warnings) { logger = branchUpgrades.logger || logger; logger.trace({ config: branchUpgrades }, 'processBranchUpgrades'); - const config = Object.assign({}, branchUpgrades); + const config = { ...branchUpgrades }; // Check schedule if ( config.schedule && diff --git a/lib/workers/branch/npm.js b/lib/workers/branch/npm.js index 164996e8f935bf8e107b7a2b6cca38fa796aac0d..0601b827fccbbabd7b9bc17ee75a503d9441abb0 100644 --- a/lib/workers/branch/npm.js +++ b/lib/workers/branch/npm.js @@ -24,7 +24,7 @@ async function generateLockFile(newPackageJson, npmrcContent) { const result = cp.spawnSync('npm', ['install', '--ignore-scripts'], { cwd: tmpDir.name, shell: true, - env: Object.assign({}, process.env, { NODE_ENV: 'dev' }), + env: { ...process.env, ...{ NODE_ENV: 'dev' } }, }); logger.debug( { stdout: String(result.stdout), stderr: String(result.stderr) }, diff --git a/lib/workers/branch/yarn.js b/lib/workers/branch/yarn.js index 90fa2bfcf45e3fdf79f3b1d412932a485f6ae6a5..231d0806a6fb1a73ff6c8ee2644d6e98e28a3908 100644 --- a/lib/workers/branch/yarn.js +++ b/lib/workers/branch/yarn.js @@ -48,7 +48,7 @@ async function generateLockFile( const result = cp.spawnSync('node', yarnOptions, { cwd: tmpDir.name, shell: true, - env: Object.assign({}, process.env, { NODE_ENV: 'dev' }), + env: { ...process.env, ...{ NODE_ENV: 'dev' } }, }); logger.debug(String(result.stdout)); logger.debug(String(result.stderr)); diff --git a/lib/workers/package-file/index.js b/lib/workers/package-file/index.js index c0c570e7cfc978263fabc4bb0b675c5c62c783b2..21db67eda6f6befd489ddc3765d24ec3746bc2a2 100644 --- a/lib/workers/package-file/index.js +++ b/lib/workers/package-file/index.js @@ -11,7 +11,7 @@ module.exports = { }; async function renovatePackageFile(packageFileConfig) { - let config = Object.assign({}, packageFileConfig); + let config = { ...packageFileConfig }; let upgrades = []; logger = config.logger; logger.info(`Processing package file`); @@ -64,7 +64,7 @@ async function renovatePackageFile(packageFileConfig) { /* TODO #556 errors.forEach(error => { upgrades.push( - Object.assign({}, error, { + { ...error, { depName: `${config.packageFile}(renovate)`, type: 'error', }) @@ -90,10 +90,9 @@ async function renovatePackageFile(packageFileConfig) { 'peerDependencies', ]; const depTypeConfigs = depTypes.map(depType => { - const depTypeConfig = configParser.mergeChildConfig( - config, - Object.assign({}, config[depType]) - ); + const depTypeConfig = configParser.mergeChildConfig(config, { + ...config[depType], + }); depTypeConfig.depType = depType; depTypeConfig.logger = logger.child({ repository: depTypeConfig.repository, diff --git a/lib/workers/package/versions.js b/lib/workers/package/versions.js index bd7dae0f44320f66909501ee5d83053b7bcefa2b..498b221da81e8644146e00bd84fcdd7aa080c4ae 100644 --- a/lib/workers/package/versions.js +++ b/lib/workers/package/versions.js @@ -160,7 +160,7 @@ function determineUpgrades(npmDep, config) { // Loop through all upgrades and convert to ranges const rangedUpgrades = _(upgrades) .reject(upgrade => upgrade.type === 'pin') - .map(upgrade => Object.assign(upgrade, { isRange: true })) + .map(upgrade => ({ ...upgrade, ...{ isRange: true } })) .map(upgrade => { const { major, minor } = semverUtils.parse(upgrade.newVersion); if (currentSemver.operator === '~') { @@ -170,36 +170,42 @@ function determineUpgrades(npmDep, config) { `${major}.${minor}` ); // Add a tilde before that version number - return Object.assign(upgrade, { newVersion: `~${minSatisfying}` }); + return { ...upgrade, ...{ newVersion: `~${minSatisfying}` } }; } else if (currentSemver.operator === '^') { // Special case where major and minor are 0 if (major === '0' && minor === '0') { - return Object.assign(upgrade, { - newVersion: `^${upgrade.newVersion}`, - }); + return { + ...upgrade, + ...{ + newVersion: `^${upgrade.newVersion}`, + }, + }; } // If version is < 1, then semver treats ^ same as ~ const newRange = major === '0' ? `${major}.${minor}` : `${major}`; const minSatisfying = semver.minSatisfying(versionList, newRange); // Add in the caret - return Object.assign(upgrade, { newVersion: `^${minSatisfying}` }); + return { ...upgrade, ...{ newVersion: `^${minSatisfying}` } }; } else if (currentSemver.operator === '<=') { // Example: <= 1.2.0 - return Object.assign(upgrade, { - newVersion: `<= ${upgrade.newVersion}`, - }); + return { + ...upgrade, + ...{ + newVersion: `<= ${upgrade.newVersion}`, + }, + }; } else if (currentSemver.minor === undefined) { // Example: 1 - return Object.assign(upgrade, { newVersion: `${major}` }); + return { ...upgrade, ...{ newVersion: `${major}` } }; } else if (currentSemver.minor === 'x') { // Example: 1.x - return Object.assign(upgrade, { newVersion: `${major}.x` }); + return { ...upgrade, ...{ newVersion: `${major}.x` } }; } else if (currentSemver.patch === undefined) { // Example: 1.2 - return Object.assign(upgrade, { newVersion: `${major}.${minor}` }); + return { ...upgrade, ...{ newVersion: `${major}.${minor}` } }; } else if (currentSemver.patch === 'x') { // Example: 1.2.x - return Object.assign(upgrade, { newVersion: `${major}.${minor}.x` }); + return { ...upgrade, ...{ newVersion: `${major}.${minor}.x` } }; } result.message = `The current semver range "${currentVersion}" is not supported so won't ever be upgraded`; logger.warn(result.message); diff --git a/lib/workers/pr/index.js b/lib/workers/pr/index.js index b34a1a4fdee458d71d07eeedcc8a20f4f4b8ddb6..1ce40986fe3ec0924c9308af041d5270156b9268 100644 --- a/lib/workers/pr/index.js +++ b/lib/workers/pr/index.js @@ -14,7 +14,7 @@ module.exports = { async function ensurePr(inputConfig, logger, errors, warnings) { logger.trace({ config: inputConfig }, 'ensurePr'); // If there is a group, it will use the config of the first upgrade in the array - const config = Object.assign({}, inputConfig); + const config = { ...inputConfig }; const upgrades = config.upgrades; config.upgrades = []; const branchName = config.branchName; @@ -71,12 +71,12 @@ async function ensurePr(inputConfig, logger, errors, warnings) { upgrade.githubName = logJSON.project.github; upgrade.releases = []; logJSON.versions.forEach(version => { - const release = Object.assign({}, version); + const release = { ...version }; release.date = version.date.toISOString().slice(0, 10); release.commits = []; if (release.changes) { release.changes.forEach(change => { - const commit = Object.assign({}, change); + const commit = { ...change }; delete commit.date; commit.shortSha = change.sha.slice(0, 7); commit.url = `${logJSON.project.repository}/commit/${change.sha}`; diff --git a/lib/workers/repository/apis.js b/lib/workers/repository/apis.js index a95bf979bb53bd6a9c6342ac2493f71aa567699e..fffc3f5a54a984133a58cab45eefb78f6d673fef 100644 --- a/lib/workers/repository/apis.js +++ b/lib/workers/repository/apis.js @@ -60,7 +60,7 @@ async function initApis(inputConfig, token) { throw new Error(`Unknown platform: ${platform}`); } - const config = Object.assign({}, inputConfig); + const config = { ...inputConfig }; config.api = getPlatformApi(config.platform); const platformConfig = await config.api.initRepo( config.repository, @@ -78,7 +78,7 @@ async function initApis(inputConfig, token) { // Check for config in `renovate.json` async function mergeRenovateJson(config, branchName) { - let returnConfig = Object.assign({}, config); + let returnConfig = { ...config }; const renovateJsonContent = await config.api.getFileContent( 'renovate.json', branchName @@ -142,7 +142,7 @@ async function mergeRenovateJson(config, branchName) { /* TODO #556 renovateJsonErrors.forEach(error => { config.errors.push( - Object.assign({}, error, { depName: 'renovate.json' }) + { ...error, ...{ depName: 'renovate.json' } } ); }); */ } @@ -161,7 +161,7 @@ async function mergeRenovateJson(config, branchName) { } async function detectPackageFiles(input) { - const config = Object.assign({}, input); + const config = { ...input }; config.logger.trace({ config }, 'detectPackageFiles'); config.packageFiles = await config.api.findFilePaths('package.json'); config.logger.debug( diff --git a/lib/workers/repository/index.js b/lib/workers/repository/index.js index f50cb263dc888e8a02da426be57ef9a5e910c0ad..c0132831838f519f244088e5bd4e56705da5ea49 100644 --- a/lib/workers/repository/index.js +++ b/lib/workers/repository/index.js @@ -11,7 +11,7 @@ module.exports = { }; async function renovateRepository(repoConfig, token) { - let config = Object.assign({}, repoConfig); + let config = { ...repoConfig }; config.errors = []; config.warnings = []; config.logger.trace({ config }, 'renovateRepository'); diff --git a/lib/workers/repository/upgrades.js b/lib/workers/repository/upgrades.js index 6f2bfe7a99a18d37463d0c48a01fb00badb52536..4c41a46ce929d366e154f1f5384d6f5c62dc5e78 100644 --- a/lib/workers/repository/upgrades.js +++ b/lib/workers/repository/upgrades.js @@ -44,7 +44,7 @@ function generateConfig(branchUpgrades) { const useGroupSettings = hasGroupName && groupEligible; logger.debug(`useGroupSettings: ${useGroupSettings}`); for (const branchUpgrade of branchUpgrades) { - const upgrade = Object.assign({}, branchUpgrade); + const upgrade = { ...branchUpgrade }; if (useGroupSettings) { // Now overwrite original config with group config Object.assign(upgrade, upgrade.group); @@ -69,7 +69,7 @@ function generateConfig(branchUpgrades) { config.upgrades.push(upgrade); } // Now assign first upgrade's config as branch config - return Object.assign(config, config.upgrades[0]); + return { ...config, ...config.upgrades[0] }; } function groupByBranch(upgrades) { @@ -81,7 +81,7 @@ function groupByBranch(upgrades) { branchUpgrades: {}, }; for (const upg of upgrades) { - const upgrade = Object.assign({}, upg); + const upgrade = { ...upg }; // Split out errors and wrnings first if (upgrade.type === 'error') { result.errors.push(upgrade); diff --git a/package.json b/package.json index 3d7b8db5c43d591bd80440efe7173486f9a508cc..f19b92bf8d50a9b464465babb41359fe7a22d3d9 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "babel-cli": "6.24.1", "babel-jest": "20.0.3", "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.23.0", "chai": "4.1.0", "condition-circle": "1.5.0", "eslint": "4.3.0", @@ -89,7 +90,8 @@ }, "babel": { "plugins": [ - "transform-async-to-generator" + "transform-async-to-generator", + "transform-object-rest-spread" ] }, "jest": { diff --git a/test/api/npm.spec.js b/test/api/npm.spec.js index 99a1c41008c30e06b2e3be99601df9d59a189af3..10a39cbcca87a516c8f6324dc5a12fbe4842ff88 100644 --- a/test/api/npm.spec.js +++ b/test/api/npm.spec.js @@ -38,7 +38,7 @@ describe('api/npm', () => { }); it('should use homepage', async () => { registryUrl.mockImplementation(() => 'https://npm.mycustomregistry.com/'); - const npmResponseHomepage = Object.assign({}, npmResponse); + const npmResponseHomepage = { ...npmResponse }; npmResponseHomepage.body.repository.url = ''; npmResponseHomepage.body.homepage = 'https://google.com'; got.mockImplementationOnce(() => Promise.resolve(npmResponseHomepage)); diff --git a/test/config/index.spec.js b/test/config/index.spec.js index 2f0bb4ccbe117a28c02ad1f84d70290acc4a8dcf..315b08575bf40e563544ccc29b6e7d0b1f4e1d1f 100644 --- a/test/config/index.spec.js +++ b/test/config/index.spec.js @@ -147,7 +147,7 @@ describe('config/index', () => { }); describe('mergeChildConfig(parentConfig, childConfig)', () => { it('merges', () => { - const parentConfig = Object.assign({}, defaultConfig); + const parentConfig = { ...defaultConfig }; const childConfig = { foo: 'bar', pinVersions: false, @@ -163,7 +163,7 @@ describe('config/index', () => { expect(config.lockFileMaintenance).toMatchSnapshot(); }); it('merges depTypes', () => { - const parentConfig = Object.assign({}, defaultConfig); + const parentConfig = { ...defaultConfig }; const childConfig = { dependencies: {}, devDependencies: { foo: 1 }, diff --git a/test/workers/branch/index.spec.js b/test/workers/branch/index.spec.js index 53c1fa7f35711495cf43ebb17600229749559731..f8fab47842e16c85cd7e6a8e07d8580a57991079 100644 --- a/test/workers/branch/index.spec.js +++ b/test/workers/branch/index.spec.js @@ -112,7 +112,7 @@ describe('workers/branch', () => { npm.maintainLockFile = jest.fn(); yarn.getLockFile = jest.fn(); yarn.maintainLockFile = jest.fn(); - config = Object.assign({}, defaultConfig); + config = { ...defaultConfig }; config.api = {}; config.api.getFileContent = jest.fn(); config.api.branchExists = jest.fn(); @@ -124,7 +124,7 @@ describe('workers/branch', () => { config.newVersion = '1.1.0'; config.newVersionMajor = 1; config.versions = {}; - config.upgrades = [Object.assign({}, config)]; + config.upgrades = [{ ...config }]; }); it('returns if new content matches old', async () => { branchWorker.getParentBranch.mockReturnValueOnce('dummy branch'); @@ -346,7 +346,7 @@ describe('workers/branch', () => { describe('processBranchUpgrades(upgrades)', () => { let config; beforeEach(() => { - config = Object.assign({}, defaultConfig); + config = { ...defaultConfig }; config.api = { checkForClosedPr: jest.fn(), }; diff --git a/test/workers/package-file/index.spec.js b/test/workers/package-file/index.spec.js index 859b0b8452f5a2912be7809d66d3ccf4998f77a1..7498da517a7a0177111a9d35762a30bc80371222 100644 --- a/test/workers/package-file/index.spec.js +++ b/test/workers/package-file/index.spec.js @@ -11,15 +11,18 @@ describe('packageFileWorker', () => { describe('renovatePackageFile(config)', () => { let config; beforeEach(() => { - config = Object.assign({}, defaultConfig, { - packageFile: 'package.json', - repoIsOnboarded: true, - api: { - getFileContent: jest.fn(), - getFileJson: jest.fn(), + config = { + ...defaultConfig, + ...{ + packageFile: 'package.json', + repoIsOnboarded: true, + api: { + getFileContent: jest.fn(), + getFileJson: jest.fn(), + }, + logger, }, - logger, - }); + }; }); it('handles renovate config warnings and errors', async () => { config.enabled = false; diff --git a/test/workers/pr/__snapshots__/index.spec.js.snap b/test/workers/pr/__snapshots__/index.spec.js.snap index 347b9e6eca80e6f4e2f2b38b9c3833259923b91e..a66b8350bd3f87fef3102e2b7244ff435c57480c 100644 --- a/test/workers/pr/__snapshots__/index.spec.js.snap +++ b/test/workers/pr/__snapshots__/index.spec.js.snap @@ -24,4 +24,22 @@ Array [ ] `; +exports[`workers/pr ensurePr(upgrades, logger) should return modified existing PR 1`] = ` +Object { + "body": "<p>This Pull Request updates dependency <a href=\\"https://github.com/renovateapp/dummy\\">dummy</a> from version <code>1.0.0</code> to <code>1.1.0</code></p> +<h3 id=\\"commits\\">Commits</h3> +<p><details><br /> +<summary>renovateapp/dummy</summary></p> +<h4 id=\\"110\\">1.1.0</h4> +<ul> +<li><a href=\\"https://github.com/renovateapp/dummy/commit/abcdefghijklmnopqrstuvwxyz\\"><code>abcdefg</code></a> foo <a href=\\"https://github.com/renovateapp/dummy/issues/3\\">#3</a></li> +</ul> +<p></details></p> +<hr /> +<p>This PR has been generated by <a href=\\"https://renovateapp.com\\">Renovate Bot</a>.</p>", + "displayNumber": "Existing PR", + "title": "Update dependency dummy to version 1.1.0", +} +`; + exports[`workers/pr ensurePr(upgrades, logger) should return unmodified existing PR 1`] = `Array []`; diff --git a/test/workers/pr/index.spec.js b/test/workers/pr/index.spec.js index cc21b7656c2a22c3a578847e58d34e04d42f3d33..6c63be31b1349fc67f9d4cd14a83ef66dce4211a 100644 --- a/test/workers/pr/index.spec.js +++ b/test/workers/pr/index.spec.js @@ -33,7 +33,7 @@ describe('workers/pr', () => { let config; let pr; beforeEach(() => { - config = Object.assign({}, defaultConfig); + config = { ...defaultConfig }; pr = { head: { ref: 'somebranch', @@ -80,7 +80,7 @@ describe('workers/pr', () => { let config; let existingPr; beforeEach(() => { - config = Object.assign({}, defaultConfig); + config = { ...defaultConfig }; config.api = { createPr: jest.fn(() => ({ displayNumber: 'New Pull Request' })), getBranchStatus: jest.fn(), @@ -221,11 +221,7 @@ describe('workers/pr', () => { config.api.getBranchPr = jest.fn(() => existingPr); config.api.updatePr = jest.fn(); const pr = await prWorker.ensurePr(config, logger); - const updatedPr = Object.assign(existingPr, { - body: - 'This Pull Request updates dependency dummy from version `1.0.0` to `1.2.0`\n\nNo changelog available', - }); - expect(pr).toMatchObject(updatedPr); + expect(pr).toMatchSnapshot(); }); it('should create PR if branch automerging failed', async () => { config.automergeEnabled = true; diff --git a/test/workers/repository/cleanup.spec.js b/test/workers/repository/cleanup.spec.js index a29d9660c41c3f8a8e81c1e813167dc835ac0023..ca38b2759b9cecf1eac61663b457035bc30dd72f 100644 --- a/test/workers/repository/cleanup.spec.js +++ b/test/workers/repository/cleanup.spec.js @@ -8,7 +8,7 @@ describe('workers/repository/cleanup', () => { let config; beforeEach(() => { branchNames = []; - config = Object.assign({}, defaultConfig); + config = { ...defaultConfig }; config.api = { getAllRenovateBranches: jest.fn(), getAllPrs: jest.fn(), diff --git a/test/workers/repository/index.spec.js b/test/workers/repository/index.spec.js index 1c5d73be5cc6b544c507b9c3d701a2a0ef21b941..b43f32c73c712fcc03b9ee39230dfb766db7f5a0 100644 --- a/test/workers/repository/index.spec.js +++ b/test/workers/repository/index.spec.js @@ -45,40 +45,46 @@ describe('workers/repository', () => { it('sets custom base branch', async () => { config.baseBranch = 'some-branch'; config.api.branchExists.mockReturnValueOnce(true); - apis.detectPackageFiles.mockImplementationOnce(input => - Object.assign(input, { packageFiles: [] }) - ); + apis.detectPackageFiles.mockImplementationOnce(input => ({ + ...input, + ...{ packageFiles: [] }, + })); await repositoryWorker.renovateRepository(config); expect(config.api.setBaseBranch.mock.calls).toHaveLength(1); }); it('errors when missing custom base branch', async () => { config.baseBranch = 'some-branch'; config.api.branchExists.mockReturnValueOnce(false); - apis.detectPackageFiles.mockImplementationOnce(input => - Object.assign(input, { packageFiles: [] }) - ); + apis.detectPackageFiles.mockImplementationOnce(input => ({ + ...input, + ...{ packageFiles: [] }, + })); await repositoryWorker.renovateRepository(config); expect(config.api.setBaseBranch.mock.calls).toHaveLength(0); }); it('skips repository if no package.json', async () => { - apis.detectPackageFiles.mockImplementationOnce(input => - Object.assign(input, { packageFiles: [] }) - ); + apis.detectPackageFiles.mockImplementationOnce(input => ({ + ...input, + ...{ packageFiles: [] }, + })); await repositoryWorker.renovateRepository(config); expect(onboarding.getOnboardingStatus.mock.calls.length).toBe(0); expect(config.logger.error.mock.calls.length).toBe(0); }); it('does not skip repository if package.json', async () => { - apis.detectPackageFiles.mockImplementationOnce(input => - Object.assign(input, { packageFiles: [] }) - ); + apis.detectPackageFiles.mockImplementationOnce(input => ({ + ...input, + ...{ packageFiles: [] }, + })); config.api.getFileJson = jest.fn(() => ({ a: 1 })); - apis.mergeRenovateJson.mockImplementationOnce(input => - Object.assign(input, { packageFiles: [] }) - ); - apis.mergeRenovateJson.mockImplementationOnce(input => - Object.assign(input, { packageFiles: [] }) - ); + apis.mergeRenovateJson.mockImplementationOnce(input => ({ + ...input, + ...{ packageFiles: [] }, + })); + apis.mergeRenovateJson.mockImplementationOnce(input => ({ + ...input, + ...{ packageFiles: [] }, + })); upgrades.branchifyUpgrades.mockReturnValueOnce({ upgrades: [{}, {}, {}], }); @@ -89,16 +95,19 @@ describe('workers/repository', () => { expect(config.logger.error.mock.calls.length).toBe(0); }); it('uses onboarding custom baseBranch', async () => { - apis.detectPackageFiles.mockImplementationOnce(input => - Object.assign(input, { packageFiles: [] }) - ); + apis.detectPackageFiles.mockImplementationOnce(input => ({ + ...input, + ...{ packageFiles: [] }, + })); config.api.getFileJson = jest.fn(() => ({ a: 1 })); - apis.mergeRenovateJson.mockImplementationOnce(input => - Object.assign(input, { packageFiles: [] }) - ); - apis.mergeRenovateJson.mockImplementationOnce(input => - Object.assign(input, { packageFiles: [], baseBranch: 'next' }) - ); + apis.mergeRenovateJson.mockImplementationOnce(input => ({ + ...input, + ...{ packageFiles: [] }, + })); + apis.mergeRenovateJson.mockImplementationOnce(input => ({ + ...input, + ...{ packageFiles: [], baseBranch: 'next' }, + })); config.api.branchExists.mockReturnValueOnce(true); upgrades.branchifyUpgrades.mockReturnValueOnce({ upgrades: [{}, {}, {}], @@ -110,16 +119,19 @@ describe('workers/repository', () => { expect(config.logger.error.mock.calls.length).toBe(0); }); it('errors onboarding custom baseBranch', async () => { - apis.detectPackageFiles.mockImplementationOnce(input => - Object.assign(input, { packageFiles: [] }) - ); + apis.detectPackageFiles.mockImplementationOnce(input => ({ + ...input, + ...{ packageFiles: [] }, + })); config.api.getFileJson = jest.fn(() => ({ a: 1 })); - apis.mergeRenovateJson.mockImplementationOnce(input => - Object.assign(input, { packageFiles: [] }) - ); - apis.mergeRenovateJson.mockImplementationOnce(input => - Object.assign(input, { packageFiles: [], baseBranch: 'next' }) - ); + apis.mergeRenovateJson.mockImplementationOnce(input => ({ + ...input, + ...{ packageFiles: [] }, + })); + apis.mergeRenovateJson.mockImplementationOnce(input => ({ + ...input, + ...{ packageFiles: [], baseBranch: 'next' }, + })); upgrades.branchifyUpgrades.mockReturnValueOnce({ upgrades: [{}, {}, {}], }); diff --git a/test/workers/repository/onboarding.spec.js b/test/workers/repository/onboarding.spec.js index 3e6cd815ecb0e1ee8ad6c22145ce9b52d22887f1..30361e06344fa8652c3f31d501d608b11a04271a 100644 --- a/test/workers/repository/onboarding.spec.js +++ b/test/workers/repository/onboarding.spec.js @@ -197,7 +197,7 @@ describe('lib/workers/repository/onboarding', () => { describe('getOnboardingStatus(config)', () => { let config; beforeEach(() => { - config = Object.assign({}, defaultConfig); + config = { ...defaultConfig }; jest.resetAllMocks(); config.api = { commitFilesToBranch: jest.fn(), diff --git a/yarn.lock b/yarn.lock index c72d244fa46ba55cff9fc2f086052c220dfb8830..a3dcf73146e3d9500ae799b2e987a93cb6fbcf83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -385,6 +385,10 @@ babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + babel-plugin-transform-async-to-generator@6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" @@ -393,6 +397,13 @@ babel-plugin-transform-async-to-generator@6.24.1: babel-plugin-syntax-async-functions "^6.8.0" babel-runtime "^6.22.0" +babel-plugin-transform-object-rest-spread@6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.22.0" + babel-polyfill@^6.16.0, babel-polyfill@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"