80 lines
3.1 KiB
TypeScript
80 lines
3.1 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import {getBranchPushMatcher} from '../../../utils/testing';
|
|
import {ReleaseTrain} from '../../versioning/release-trains';
|
|
import {ConfigureNextAsMajorAction} from '../actions/configure-next-as-major';
|
|
|
|
import {parse, setupReleaseActionForTesting} from './test-utils';
|
|
|
|
describe('configure next as major action', () => {
|
|
it('should be active if the next branch is for a minor', async () => {
|
|
expect(await ConfigureNextAsMajorAction.isActive({
|
|
releaseCandidate: null,
|
|
next: new ReleaseTrain('master', parse('10.1.0-next.3')),
|
|
latest: new ReleaseTrain('10.0.x', parse('10.0.3')),
|
|
})).toBe(true);
|
|
});
|
|
|
|
it('should be active regardless of a feature-freeze/release-candidate train', async () => {
|
|
expect(await ConfigureNextAsMajorAction.isActive({
|
|
releaseCandidate: new ReleaseTrain('10.1.x', parse('10.1.0-rc.1')),
|
|
next: new ReleaseTrain('master', parse('10.2.0-next.3')),
|
|
latest: new ReleaseTrain('10.0.x', parse('10.0.3')),
|
|
})).toBe(true);
|
|
});
|
|
|
|
it('should not be active if the next branch is for a major', async () => {
|
|
expect(await ConfigureNextAsMajorAction.isActive({
|
|
releaseCandidate: null,
|
|
next: new ReleaseTrain('master', parse('11.0.0-next.0')),
|
|
latest: new ReleaseTrain('10.0.x', parse('10.0.3')),
|
|
})).toBe(false);
|
|
});
|
|
|
|
it('should compute proper version and create staging pull request', async () => {
|
|
const action = setupReleaseActionForTesting(ConfigureNextAsMajorAction, {
|
|
releaseCandidate: null,
|
|
next: new ReleaseTrain('master', parse('10.1.0-next.3')),
|
|
latest: new ReleaseTrain('10.0.x', parse('10.0.2')),
|
|
});
|
|
|
|
const {repo, fork, gitClient} = action;
|
|
const expectedVersion = `11.0.0-next.0`;
|
|
const expectedForkBranch = `switch-next-to-major-${expectedVersion}`;
|
|
|
|
// We first mock the commit status check for the next branch, then expect two pull
|
|
// requests from a fork that are targeting next and the new feature-freeze branch.
|
|
repo.expectBranchRequest('master', 'MASTER_COMMIT_SHA')
|
|
.expectCommitStatusCheck('MASTER_COMMIT_SHA', 'success')
|
|
.expectFindForkRequest(fork)
|
|
.expectPullRequestToBeCreated('master', fork, expectedForkBranch, 200);
|
|
|
|
// In the fork, we make the staging branch appear as non-existent,
|
|
// so that the PR can be created properly without collisions.
|
|
fork.expectBranchRequest(expectedForkBranch, null);
|
|
|
|
await action.instance.perform();
|
|
|
|
expect(gitClient.pushed.length).toBe(1);
|
|
expect(gitClient.pushed[0])
|
|
.toEqual(
|
|
getBranchPushMatcher({
|
|
baseBranch: 'master',
|
|
baseRepo: repo,
|
|
targetBranch: expectedForkBranch,
|
|
targetRepo: fork,
|
|
expectedCommits: [{
|
|
message: `release: switch the next branch to v${expectedVersion}`,
|
|
files: ['package.json'],
|
|
}],
|
|
}),
|
|
'Expected the update branch to be created in fork for a pull request.');
|
|
});
|
|
});
|