@tinymce/beehive-flow
Version:
A CLI tool implementing the beehive flow git branching process
155 lines (143 loc) • 4.67 kB
text/typescript
import { describe, it } from 'mocha';
import { assert } from 'chai';
import * as E from 'fp-ts/Either';
import * as PackageJson from '../../../main/ts/core/PackageJson';
describe('PackageJson', () => {
describe('decodeE', () => {
it('decodes package with name', () => {
const actual = PackageJson.decodeE({
name: 'blah'
});
assert.deepEqual(actual, E.right({
name: 'blah'
}));
});
it('decodes package with name and version', () => {
const actual = PackageJson.decodeE({
name: 'blah',
version: '1.2.3-rc'
});
assert.deepEqual(actual, E.right({
name: 'blah',
version: { major: 1, minor: 2, patch: 3, preRelease: 'rc', buildMetaData: undefined }
}));
});
it('decodes package with name, version and workspaces', () => {
const actual = PackageJson.decodeE({
name: 'blah',
version: '1.2.3-rc',
workspaces: [ 'cat', 'dog*' ]
});
assert.deepEqual(actual, E.right({
name: 'blah',
version: { major: 1, minor: 2, patch: 3, preRelease: 'rc', buildMetaData: undefined },
workspaces: [ 'cat', 'dog*' ]
}));
});
it('allows extraneous properties', () => {
const actual = PackageJson.decodeE({
name: 'blah',
version: '1.2.3-rc',
workspaces: [ 'cat', 'dog*' ],
fridge: 'donkey'
});
assert.deepEqual(actual, E.right({
name: 'blah',
version: { major: 1, minor: 2, patch: 3, preRelease: 'rc', buildMetaData: undefined },
workspaces: [ 'cat', 'dog*' ],
fridge: 'donkey'
}));
});
it('decodes beehive-flow custom properties', () => {
const actual = PackageJson.decodeE({
name: 'blah',
version: '1.2.3-rc',
beehiveFlow: {
primaryWorkspace: 'blah'
}
});
assert.deepEqual(actual, E.right({
name: 'blah',
version: { major: 1, minor: 2, patch: 3, preRelease: 'rc', buildMetaData: undefined },
beehiveFlow: {
primaryWorkspace: 'blah'
}
}));
});
it('decodes dependencies', () => {
const actual = PackageJson.decodeE({
name: 'blah',
version: '1.2.3-rc',
devDependencies: {
'@tinymce/beehive-flow': 'latest'
},
dependencies: {
dep1: '>=5.0.0'
}
});
assert.deepEqual(actual, E.right({
name: 'blah',
version: { major: 1, minor: 2, patch: 3, preRelease: 'rc', buildMetaData: undefined },
devDependencies: {
'@tinymce/beehive-flow': 'latest'
},
dependencies: {
dep1: '>=5.0.0'
}
}));
});
});
describe('round-trip', () => {
it('round-trips extraneous properties', async () => {
const input = {
name: 'blah',
version: '1.2.3-rc',
workspaces: [ 'cat', 'dog*' ],
fridge: 'donkey'
};
const parsed = await PackageJson.decode(input);
const output = PackageJson.toJson(parsed);
assert.deepEqual(output, input);
});
});
describe('check pre-release dependencies', () => {
it('should fail when a dependency is a pre-release version', async () => {
const pj = {
name: 'blah',
dependencies: {
dep1: '^5.0.0-rc',
dep2: '^5.0.0-feature.20210525.sha123456',
dep3: '^5.0.0-alpha.20210525.shaabcdef',
dep4: '^5.0.0-spike.20210525.sha456def',
dep5: '^5.0.0-hotfix.20210525.sha123abc',
beehive: '^0.16.0'
}
};
const result = PackageJson.shouldNotHavePreReleasePackages(pj);
await assert.isRejected(result, 'Pre-release versions were found for: dep1, dep2, dep3, dep4, dep5');
});
it('should fail when the beehive dev dependency is a pre-release version', async () => {
const pj = {
name: 'blah',
devDependencies: {
'@tinymce/beehive-flow': '^0.16.0-rc'
}
};
const result = PackageJson.shouldNotHavePreReleasePackages(pj);
await assert.isRejected(result, 'Pre-release versions were found for: @tinymce/beehive-flow');
});
it('should ignore RC dev dependencies', async () => {
const pj = {
name: 'blah',
devDependencies: {
dep1: '^5.0.0-rc',
dep2: '^5.0.0-feature.20210525.sha123456',
dep3: '^5.0.0-alpha.20210525.shaabcdef',
dep4: '^5.0.0-hotfix.20210525.sha123abc'
}
};
const result = PackageJson.shouldNotHavePreReleasePackages(pj);
await assert.isFulfilled(result);
});
});
});