Files
cypress/scripts/unit/get-next-version-spec.js
2023-01-27 15:50:21 -06:00

184 lines
5.2 KiB
JavaScript

const { expect, use } = require('chai')
const proxyquire = require('proxyquire').noCallThru()
const sinon = require('sinon')
use(require('sinon-chai'))
describe('get-next-version', () => {
const releasedVersion = '12.2.0'
let getNextVersionForPath
let getNextVersionForBinary
let bumpStub
let getCurrentReleaseDataStub
afterEach(() => {
delete process.env.NEXT_VERSION
})
beforeEach(() => {
sinon.restore()
bumpStub = sinon.stub()
getCurrentReleaseDataStub = sinon.stub()
getCurrentReleaseDataStub.resolves({
version: releasedVersion,
})
const npmRelease = proxyquire('../get-next-version', {
'conventional-recommended-bump': bumpStub,
'./semantic-commits/get-current-release-data': {
getCurrentReleaseData: getCurrentReleaseDataStub,
},
'../package.json': sinon.stub({ version: releasedVersion }),
})
getNextVersionForPath = npmRelease.getNextVersionForPath
getNextVersionForBinary = npmRelease.getNextVersionForBinary
})
context('#getNextVersionForPath', () => {
it('determines next version is patch', async () => {
const semanticCommits = [
{ type: 'fix' },
]
bumpStub.callsFake(async ({ whatBump, _path }, cb) => {
const { level } = whatBump(semanticCommits)
expect(level, 'semantic bump level').to.eq(2)
return cb(undefined, { releaseType: 'patch' })
})
const { nextVersion, commits } = await getNextVersionForPath('packages')
expect(nextVersion).to.eq('12.2.1')
expect(commits).to.contain.members(semanticCommits)
})
it('determines next version is minor', async () => {
const semanticCommits = [
{ type: 'fix' },
{ type: 'feat' },
]
bumpStub.callsFake(async ({ whatBump, _path }, cb) => {
const { level } = whatBump(semanticCommits)
expect(level, 'semantic bump level').to.eq(1)
return cb(undefined, { releaseType: 'minor' })
})
const { nextVersion, commits } = await getNextVersionForPath('packages')
expect(nextVersion).to.eq('12.3.0')
expect(commits).to.contain.members(semanticCommits)
})
it('determines next version is major', async () => {
const semanticCommits = [
{ type: 'fix' },
{ type: 'feat' },
{ type: 'breaking' },
]
bumpStub.callsFake(async ({ whatBump, _path }, cb) => {
const { level } = whatBump(semanticCommits)
expect(level, 'semantic bump level').to.eq(0)
return cb(undefined, { releaseType: 'major' })
})
const { nextVersion, commits } = await getNextVersionForPath('packages')
expect(nextVersion).to.eq('13.0.0')
expect(commits).to.contain.members(semanticCommits)
})
it('honors package.json version when its been bumped', async () => {
const semanticCommits = [
{ type: 'fix' },
]
bumpStub.callsFake(async ({ whatBump, _path }, cb) => {
const { level } = whatBump(semanticCommits)
expect(level, 'semantic bump level').to.eq(2)
return cb(undefined, { releaseType: 'patch' })
})
getCurrentReleaseDataStub.resolves({
// package version !== release version assumed check in version is correct
version: '12.2.2',
})
const { nextVersion, commits } = await getNextVersionForPath('packages')
expect(nextVersion).to.eq('12.2.0')
expect(commits).to.contain.members(semanticCommits)
})
it('honors NEXT_VERSION env', async () => {
process.env.NEXT_VERSION = '15.0.0'
const semanticCommits = [
{ type: 'fix' },
]
bumpStub.callsFake(async ({ whatBump, _path }, cb) => {
const { level } = whatBump(semanticCommits)
expect(level, 'semantic bump level').to.eq(2)
return cb(undefined, { releaseType: 'patch' })
})
const { nextVersion, commits } = await getNextVersionForPath('packages', '12.2.2')
expect(nextVersion).to.eq('15.0.0')
expect(commits).to.contain.members(semanticCommits)
})
})
context('#getNextVersionForBinary', () => {
it('determines next version for all cli & packages changes', async () => {
let calls = 0
const cliSemanticCommits = [
{ type: 'fix', title: 'fix: cli' },
{ type: 'fix', title: 'fix: typescript' },
{ type: 'dependency', title: 'dependency: security update' },
]
const packagesSemanticCommits = [
{ type: 'feat', title: 'feat: add new command' },
]
bumpStub.callsFake(async ({ whatBump, _path }, cb) => {
if (calls === 0) {
const { level } = whatBump(packagesSemanticCommits)
expect(level, 'semantic bump level').to.eq(1)
calls++
return cb(undefined, { releaseType: 'minor' })
}
const { level } = whatBump(cliSemanticCommits)
expect(level, 'semantic bump level').to.eq(2)
return cb(undefined, { releaseType: 'patch' })
})
const { nextVersion, commits } = await getNextVersionForBinary('packages', releasedVersion)
expect(nextVersion).to.eq('12.3.0')
expect(commits).to.contain.members(packagesSemanticCommits)
expect(commits).to.contain.members(cliSemanticCommits)
})
})
})