const test = require('ava'); const {stub} = require('sinon'); const getNextVersion = require('../lib/get-next-version'); test.beforeEach((t) => { // Stub the logger functions t.context.log = stub(); t.context.logger = {log: t.context.log}; }); test('Increase version for patch release', (t) => { t.is( getNextVersion({ branch: {name: 'master', type: 'release', tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}]}, nextRelease: {type: 'patch'}, lastRelease: {version: '1.0.0', channels: [null]}, logger: t.context.logger, }), '1.0.1' ); }); test('Increase version for minor release', (t) => { t.is( getNextVersion({ branch: {name: 'master', type: 'release', tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}]}, nextRelease: {type: 'minor'}, lastRelease: {version: '1.0.0', channels: [null]}, logger: t.context.logger, }), '1.1.0' ); }); test('Increase version for major release', (t) => { t.is( getNextVersion({ branch: {name: 'master', type: 'release', tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}]}, nextRelease: {type: 'major'}, lastRelease: {version: '1.0.0', channels: [null]}, logger: t.context.logger, }), '2.0.0' ); }); test('Return 1.0.0 if there is no previous release', (t) => { t.is( getNextVersion({ branch: {name: 'master', type: 'release', tags: []}, nextRelease: {type: 'minor'}, lastRelease: {}, logger: t.context.logger, }), '1.0.0' ); }); test('Increase version for patch release on prerelease branch', (t) => { t.is( getNextVersion({ branch: { name: 'beta', type: 'prerelease', prerelease: 'beta', tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}], }, nextRelease: {type: 'patch', channel: 'beta'}, lastRelease: {version: '1.0.0', channels: [null]}, logger: t.context.logger, }), '1.0.1-beta.1' ); t.is( getNextVersion({ branch: { name: 'beta', type: 'prerelease', prerelease: 'beta', tags: [ {gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}, {gitTag: 'v1.0.1-beta.1', version: '1.0.1-beta.1', channels: ['beta']}, ], }, nextRelease: {type: 'patch', channel: 'beta'}, lastRelease: {version: '1.0.1-beta.1', channels: ['beta']}, logger: t.context.logger, }), '1.0.1-beta.2' ); t.is( getNextVersion({ branch: { name: 'alpha', type: 'prerelease', prerelease: 'alpha', tags: [{gitTag: 'v1.0.1-beta.1', version: '1.0.1-beta.1', channels: ['beta']}], }, nextRelease: {type: 'patch', channel: 'alpha'}, lastRelease: {version: '1.0.1-beta.1', channels: ['beta']}, logger: t.context.logger, }), '1.0.2-alpha.1' ); }); test('Increase version for minor release on prerelease branch', (t) => { t.is( getNextVersion({ branch: { name: 'beta', type: 'prerelease', prerelease: 'beta', tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}], }, nextRelease: {type: 'minor', channel: 'beta'}, lastRelease: {version: '1.0.0', channels: [null]}, logger: t.context.logger, }), '1.1.0-beta.1' ); t.is( getNextVersion({ branch: { name: 'beta', type: 'prerelease', prerelease: 'beta', tags: [ {gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}, {gitTag: 'v1.1.0-beta.1', version: '1.1.0-beta.1', channels: ['beta']}, ], }, nextRelease: {type: 'minor', channel: 'beta'}, lastRelease: {version: '1.1.0-beta.1', channels: ['beta']}, logger: t.context.logger, }), '1.1.0-beta.2' ); t.is( getNextVersion({ branch: { name: 'alpha', type: 'prerelease', prerelease: 'alpha', tags: [{gitTag: 'v1.1.0-beta.1', version: '1.1.0-beta.1', channels: ['beta']}], }, nextRelease: {type: 'minor', channel: 'alpha'}, lastRelease: {version: '1.1.0-beta.1', channels: ['beta']}, logger: t.context.logger, }), '1.2.0-alpha.1' ); }); test('Increase version for major release on prerelease branch', (t) => { t.is( getNextVersion({ branch: { name: 'beta', type: 'prerelease', prerelease: 'beta', tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}], }, nextRelease: {type: 'major', channel: 'beta'}, lastRelease: {version: '1.0.0', channels: [null]}, logger: t.context.logger, }), '2.0.0-beta.1' ); t.is( getNextVersion({ branch: { name: 'beta', type: 'prerelease', prerelease: 'beta', tags: [ {gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}, {gitTag: 'v2.0.0-beta.1', version: '2.0.0-beta.1', channels: ['beta']}, ], }, nextRelease: {type: 'major', channel: 'beta'}, lastRelease: {version: '2.0.0-beta.1', channels: ['beta']}, logger: t.context.logger, }), '2.0.0-beta.2' ); t.is( getNextVersion({ branch: { name: 'alpha', type: 'prerelease', prerelease: 'alpha', tags: [{gitTag: 'v2.0.0-beta.1', version: '2.0.0-beta.1', channels: ['beta']}], }, nextRelease: {type: 'major', channel: 'alpha'}, lastRelease: {version: '2.0.0-beta.1', channels: ['beta']}, logger: t.context.logger, }), '3.0.0-alpha.1' ); }); test('Return 1.0.0 if there is no previous release on prerelease branch', (t) => { t.is( getNextVersion({ branch: {name: 'beta', type: 'prerelease', prerelease: 'beta', tags: []}, nextRelease: {type: 'minor'}, lastRelease: {}, logger: t.context.logger, }), '1.0.0-beta.1' ); }); test('Increase version for release on prerelease branch after previous commits were merged to release branch', (t) => { t.is( getNextVersion({ branch: { name: 'beta', type: 'prerelease', prerelease: 'beta', tags: [ {gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}, {gitTag: 'v1.1.0', version: '1.1.0', channels: [null]}, // Version v1.1.0 released on default branch after beta was merged into master {gitTag: 'v1.1.0-beta.1', version: '1.1.0-beta.1', channels: [null, 'beta']}, ], }, nextRelease: {type: 'minor'}, lastRelease: {version: '1.1.0', channels: [null]}, logger: t.context.logger, }), '1.2.0-beta.1' ); }); test('Increase version for release on prerelease branch based on highest commit type since last regular release', (t) => { t.is( getNextVersion({ branch: { name: 'beta', type: 'prerelease', prerelease: 'beta', tags: [ {gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}, {gitTag: 'v1.1.0-beta.1', version: '1.1.0-beta.1', channels: [null, 'beta']}, ], }, nextRelease: {type: 'major'}, lastRelease: {version: 'v1.1.0-beta.1', channels: [null]}, logger: t.context.logger, }), '2.0.0-beta.1' ); }); test('Increase version for release on prerelease branch when there is no regular releases on other branches', (t) => { t.is( getNextVersion({ branch: { name: 'beta', type: 'prerelease', prerelease: 'beta', tags: [{gitTag: 'v1.0.0-beta.1', version: '1.0.0-beta.1', channels: ['beta']}], }, nextRelease: {type: 'minor', channel: 'beta'}, lastRelease: {version: 'v1.0.0-beta.1', channels: ['beta']}, logger: t.context.logger, }), '1.0.0-beta.2' ); });