This commit addresses comments from [my review][1] on PR #38656 (which was merged without comments addressed). The changes are mostly related to code style and typos. [1]: https://github.com/angular/angular/pull/38656#pullrequestreview-482129333 PR Close #39135
		
			
				
	
	
		
			111 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			4.5 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 {matchesVersion} from '../../../utils/testing/semver-matchers';
 | |
| import {fetchLongTermSupportBranchesFromNpm} from '../../versioning/long-term-support';
 | |
| import {ReleaseTrain} from '../../versioning/release-trains';
 | |
| import {CutLongTermSupportPatchAction} from '../actions/cut-lts-patch';
 | |
| 
 | |
| import {expectStagingAndPublishWithCherryPick, fakeNpmPackageQueryRequest, getTestingMocksForReleaseAction, parse, setupReleaseActionForTesting, testTmpDir} from './test-utils';
 | |
| 
 | |
| describe('cut an LTS patch action', () => {
 | |
|   it('should be active', async () => {
 | |
|     expect(await CutLongTermSupportPatchAction.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 if there is a feature-freeze train', async () => {
 | |
|     expect(await CutLongTermSupportPatchAction.isActive({
 | |
|       releaseCandidate: new ReleaseTrain('10.1.x', parse('10.1.0-next.3')),
 | |
|       next: new ReleaseTrain('master', parse('10.2.0-next.3')),
 | |
|       latest: new ReleaseTrain('10.0.x', parse('10.0.3')),
 | |
|     })).toBe(true);
 | |
|   });
 | |
| 
 | |
|   it('should be active if there is a release-candidate train', async () => {
 | |
|     expect(await CutLongTermSupportPatchAction.isActive({
 | |
|       releaseCandidate: new ReleaseTrain('10.1.x', parse('10.1.0-rc.0')),
 | |
|       next: new ReleaseTrain('master', parse('10.2.0-next.3')),
 | |
|       latest: new ReleaseTrain('10.0.x', parse('10.0.3')),
 | |
|     })).toBe(true);
 | |
|   });
 | |
| 
 | |
|   it('should compute proper new version and select correct branch', async () => {
 | |
|     const action = setupReleaseActionForTesting(CutLongTermSupportPatchAction, {
 | |
|       releaseCandidate: null,
 | |
|       next: new ReleaseTrain('master', parse('10.1.0-next.3')),
 | |
|       latest: new ReleaseTrain('10.0.x', parse('10.0.2')),
 | |
|     });
 | |
| 
 | |
|     spyOn<any>(action.instance, '_promptForTargetLtsBranch')
 | |
|         .and.resolveTo({name: '9.2.x', version: parse('9.2.4'), npmDistTag: 'v9-lts'});
 | |
| 
 | |
|     await expectStagingAndPublishWithCherryPick(action, '9.2.x', '9.2.5', 'v9-lts');
 | |
|   });
 | |
| 
 | |
|   it('should include number of active LTS branches in action description', async () => {
 | |
|     const {releaseConfig, gitClient} = getTestingMocksForReleaseAction();
 | |
|     const activeReleaseTrains = {
 | |
|       releaseCandidate: null,
 | |
|       next: new ReleaseTrain('master', parse('10.1.0-next.3')),
 | |
|       latest: new ReleaseTrain('10.0.x', parse('10.0.2')),
 | |
|     };
 | |
| 
 | |
|     fakeNpmPackageQueryRequest(releaseConfig.npmPackages[0], {
 | |
|       'dist-tags': {'v9-lts': '9.1.2', 'v8-lts': '8.2.2'},
 | |
|       'time': {
 | |
|         '9.0.0': new Date().toISOString(),
 | |
|         '8.0.0': new Date().toISOString(),
 | |
|       },
 | |
|     });
 | |
| 
 | |
|     const action = new CutLongTermSupportPatchAction(
 | |
|         activeReleaseTrains, gitClient, releaseConfig, testTmpDir);
 | |
| 
 | |
|     expect(await action.getDescription())
 | |
|         .toEqual(`Cut a new release for an active LTS branch (2 active).`);
 | |
|   });
 | |
| 
 | |
|   it('should properly determine active and inactive LTS branches', async () => {
 | |
|     const {releaseConfig} = getTestingMocksForReleaseAction();
 | |
|     fakeNpmPackageQueryRequest(releaseConfig.npmPackages[0], {
 | |
|       'dist-tags': {
 | |
|         'v9-lts': '9.2.3',
 | |
|         'v8-lts': '8.4.4',
 | |
|         'v7-lts': '7.0.1',
 | |
|         'v6-lts': '6.0.0',
 | |
|       },
 | |
|       time: {
 | |
|         '9.0.0': new Date().toISOString(),
 | |
|         '8.0.0': new Date().toISOString(),
 | |
|         // We pick dates for the v6 and v7 major versions that guarantee that the version
 | |
|         // is no longer considered as active LTS version.
 | |
|         '7.0.0': new Date(1912, 5, 23).toISOString(),
 | |
|         '6.0.0': new Date(1912, 5, 23).toISOString(),
 | |
|       },
 | |
|     });
 | |
| 
 | |
|     // Note: This accesses a private method, so we need to use an element access to satisfy
 | |
|     // TypeScript. It is acceptable to access the member for fine-grained unit testing due to
 | |
|     // complexity with inquirer we want to avoid. It is not easy to test prompts.
 | |
|     const {active, inactive} = await fetchLongTermSupportBranchesFromNpm(releaseConfig);
 | |
| 
 | |
|     expect(active).toEqual([
 | |
|       {name: '9.2.x', version: matchesVersion('9.2.3'), npmDistTag: 'v9-lts'},
 | |
|       {name: '8.4.x', version: matchesVersion('8.4.4'), npmDistTag: 'v8-lts'},
 | |
|     ]);
 | |
|     expect(inactive).toEqual([
 | |
|       {name: '7.0.x', version: matchesVersion('7.0.1'), npmDistTag: 'v7-lts'},
 | |
|       {name: '6.0.x', version: matchesVersion('6.0.0'), npmDistTag: 'v6-lts'},
 | |
|     ]);
 | |
|   });
 | |
| });
 |