mirror of
https://github.com/cypress-io/cypress.git
synced 2026-01-03 04:59:48 -06:00
184 lines
5.2 KiB
JavaScript
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)
|
|
})
|
|
})
|
|
})
|