Skip to content

Commit

Permalink
refactor(scripts): extracted merge logic to a lifter module
Browse files Browse the repository at this point in the history
  • Loading branch information
travi committed Jun 10, 2022
1 parent 0891bb7 commit 93917bf
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 7 deletions.
24 changes: 18 additions & 6 deletions src/package/lifter-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,24 @@ import sinon from 'sinon';
import {assert} from 'chai';
import any from '@travi/any';

import * as scriptsLifter from './scripts/lifter';
import * as configFile from './config-file';
import liftPackage from './lifter';

suite('package.json lifter', () => {
let sandbox;
const projectRoot = any.string();
const pathToPackageJson = `${projectRoot}/package.json`;
const packageJsonContents = any.simpleObject();
const packageJsonContents = {...any.simpleObject(), scripts: any.simpleObject()};
const updatedScripts = any.simpleObject();

setup(() => {
sandbox = sinon.createSandbox();

sandbox.stub(jsCore, 'installDependencies');
sandbox.stub(configFile, 'write');
sandbox.stub(fs, 'readFile');
sandbox.stub(configFile, 'write');
sandbox.stub(scriptsLifter, 'default');
});

teardown(() => sandbox.restore());
Expand All @@ -31,12 +34,13 @@ suite('package.json lifter', () => {
fs.readFile
.withArgs(pathToPackageJson, 'utf8')
.resolves(JSON.stringify({...packageJsonContents, scripts: originalScripts}));
scriptsLifter.default.withArgs({existingScripts: originalScripts, scripts}).returns(updatedScripts);

await liftPackage({projectRoot, scripts});

assert.calledWith(
configFile.write,
{projectRoot, config: {...packageJsonContents, scripts: {...originalScripts, ...scripts}}}
{projectRoot, config: {...packageJsonContents, scripts: updatedScripts}}
);
});
});
Expand All @@ -47,12 +51,15 @@ suite('package.json lifter', () => {
fs.readFile
.withArgs(pathToPackageJson, 'utf8')
.resolves(JSON.stringify(packageJsonContents));
scriptsLifter.default
.withArgs({existingScripts: packageJsonContents.scripts, scripts: undefined})
.returns(updatedScripts);

await liftPackage({projectRoot, tags});

assert.calledWith(
configFile.write,
{projectRoot, config: {...packageJsonContents, scripts: {}, keywords: tags}}
{projectRoot, config: {...packageJsonContents, scripts: updatedScripts, keywords: tags}}
);
});

Expand All @@ -62,12 +69,16 @@ suite('package.json lifter', () => {
fs.readFile
.withArgs(pathToPackageJson, 'utf8')
.resolves(JSON.stringify({...packageJsonContents, scripts: {}, keywords: existingKeywords}));
scriptsLifter.default.withArgs({existingScripts: {}, scripts: undefined}).returns(updatedScripts);

await liftPackage({projectRoot, tags});

assert.calledWith(
configFile.write,
{projectRoot, config: {...packageJsonContents, scripts: {}, keywords: [...existingKeywords, ...tags]}}
{
projectRoot,
config: {...packageJsonContents, scripts: updatedScripts, keywords: [...existingKeywords, ...tags]}
}
);
});

Expand All @@ -76,12 +87,13 @@ suite('package.json lifter', () => {
fs.readFile
.withArgs(pathToPackageJson, 'utf8')
.resolves(JSON.stringify({...packageJsonContents, scripts: {}, keywords: existingKeywords}));
scriptsLifter.default.withArgs({existingScripts: {}, scripts: {}}).returns(updatedScripts);

await liftPackage({projectRoot, scripts: {}});

assert.calledWith(
configFile.write,
{projectRoot, config: {...packageJsonContents, scripts: {}, keywords: existingKeywords}}
{projectRoot, config: {...packageJsonContents, scripts: updatedScripts, keywords: existingKeywords}}
);
});
});
Expand Down
3 changes: 2 additions & 1 deletion src/package/lifter.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {promises as fs} from 'fs';
import {error, info} from '@travi/cli-messages';
import {DEV_DEPENDENCY_TYPE, installDependencies, PROD_DEPENDENCY_TYPE} from '@form8ion/javascript-core';

import {lift as liftScripts} from './scripts';
import {write} from './config-file';

export default async function ({
Expand All @@ -23,7 +24,7 @@ export default async function ({
projectRoot,
config: {
...existingPackageJsonContents,
scripts: {...existingPackageJsonContents.scripts, ...scripts},
scripts: liftScripts({existingScripts: existingPackageJsonContents.scripts, scripts}),
...tags && {
keywords: existingPackageJsonContents.keywords ? [...existingPackageJsonContents.keywords, ...tags] : tags
}
Expand Down
2 changes: 2 additions & 0 deletions src/package/scripts/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export {default as scaffold} from './scaffolder';
export {default as lift} from './lifter';
15 changes: 15 additions & 0 deletions src/package/scripts/lifter-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import any from '@travi/any';
import {assert} from 'chai';

import liftScripts from './lifter';

suite('package.json lifter', () => {
test('that the provided scripts are merged with the existing scripts', async () => {
const existingScripts = any.simpleObject();
const scripts = any.simpleObject();

const updatedScripts = liftScripts({existingScripts, scripts});

assert.deepEqual(updatedScripts, {...existingScripts, ...scripts});
});
});
3 changes: 3 additions & 0 deletions src/package/scripts/lifter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default function ({existingScripts, scripts}) {
return {...existingScripts, ...scripts};
}
9 changes: 9 additions & 0 deletions src/package/scripts/scaffolder-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import {assert} from 'chai';

import scaffold from './scaffolder';

suite('package.json scripts scaffolder', () => {
test('that the scripts block is defined', async () => {
assert.deepEqual(scaffold(), {});
});
});
3 changes: 3 additions & 0 deletions src/package/scripts/scaffolder.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default function () {
return {};
}

0 comments on commit 93917bf

Please sign in to comment.