278 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			278 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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'
 | |
|   );
 | |
| });
 |