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.');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 |