89 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			89 lines
		
	
	
		
			2.6 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 {PullApproveGroup} from './group'; | ||
|  | import {getGroupsFromYaml} from './parse-yaml'; | ||
|  | 
 | ||
|  | describe('group parsing', () => { | ||
|  |   it('gets group name', () => { | ||
|  |     const groupName = 'fw-migrations'; | ||
|  |     const groups = getGroupsFromYaml(`
 | ||
|  |       groups: | ||
|  |         ${groupName}: | ||
|  |           type: optional | ||
|  |       `);
 | ||
|  |     expect(groups[0].groupName).toBe(groupName); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('gets correct number of groups', () => { | ||
|  |     const groups = getGroupsFromYaml(`
 | ||
|  |       groups: | ||
|  |         fw-migrations: | ||
|  |           type: optional | ||
|  |         fw-core: | ||
|  |           type: optional | ||
|  |       `);
 | ||
|  |     expect(groups.length).toBe(2); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('gets preceding groups', () => { | ||
|  |     const groups = getGroupsFromYaml(`
 | ||
|  |       groups: | ||
|  |         fw-migrations: | ||
|  |           type: optional | ||
|  |         fw-core: | ||
|  |           type: optional | ||
|  |         dev-infra: | ||
|  |           type: optional | ||
|  |       `);
 | ||
|  |     const fwMigrations = getGroupByName(groups, 'fw-migrations')!; | ||
|  |     const fwCore = getGroupByName(groups, 'fw-core')!; | ||
|  |     const devInfra = getGroupByName(groups, 'dev-infra')!; | ||
|  |     expect(getGroupNames(fwMigrations.precedingGroups)).toEqual([]); | ||
|  |     expect(getGroupNames(fwCore.precedingGroups)).toEqual([fwMigrations.groupName]); | ||
|  |     expect(getGroupNames(devInfra.precedingGroups)).toEqual([ | ||
|  |       fwMigrations.groupName, fwCore.groupName | ||
|  |     ]); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('matches file conditions', () => { | ||
|  |     const groups = getGroupsFromYaml(`
 | ||
|  |       groups: | ||
|  |         fw-core: | ||
|  |           conditions: | ||
|  |             - contains_any_globs(files, ['packages/core/**']) | ||
|  |       `);
 | ||
|  |     const fwCore = getGroupByName(groups, 'fw-core')!; | ||
|  |     expect(fwCore.testFile('packages/core/test.ts')).toBe(true); | ||
|  |     expect(fwCore.testFile('some/other/location/test.ts')).toBe(false); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('allows conditions based on groups', () => { | ||
|  |     const groups = getGroupsFromYaml(`
 | ||
|  |       groups: | ||
|  |         fw-migrations: | ||
|  |           conditions: | ||
|  |             - len(groups) > 0 | ||
|  |         fw-core: | ||
|  |           conditions: | ||
|  |             - len(groups.active) > 0 | ||
|  |       `);
 | ||
|  |     const fwMigrations = getGroupByName(groups, 'fw-migrations')!; | ||
|  |     expect(() => fwMigrations.testFile('any')).not.toThrow(); | ||
|  |     const fwCore = getGroupByName(groups, 'fw-core')!; | ||
|  |     expect(() => fwCore.testFile('any')).not.toThrow(); | ||
|  |   }); | ||
|  | }); | ||
|  | 
 | ||
|  | function getGroupByName(groups: PullApproveGroup[], name: string): PullApproveGroup|undefined { | ||
|  |   return groups.find(g => g.groupName === name); | ||
|  | } | ||
|  | 
 | ||
|  | function getGroupNames(groups: PullApproveGroup[]) { | ||
|  |   return groups.map(g => g.groupName); | ||
|  | } |