122 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			4.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 * as console from '../../utils/console';
 | |
| import {GithubGraphqlClient} from '../../utils/git/github';
 | |
| import {buildVirtualGitClient, mockNgDevConfig, VirtualGitClient} from '../../utils/testing';
 | |
| 
 | |
| import {GithubQueriesModule} from './github';
 | |
| 
 | |
| describe('GithubQueriesModule', () => {
 | |
|   let githubApiSpy: jasmine.Spy;
 | |
|   let infoSpy: jasmine.Spy;
 | |
|   let infoGroupSpy: jasmine.Spy;
 | |
|   let virtualGitClient: VirtualGitClient;
 | |
| 
 | |
|   beforeEach(() => {
 | |
|     githubApiSpy = spyOn(GithubGraphqlClient.prototype, 'query')
 | |
|                        .and.throwError(
 | |
|                            'The graphql query response must always be manually defined in a test.');
 | |
|     virtualGitClient = buildVirtualGitClient();
 | |
|     infoGroupSpy = spyOn(console.info, 'group');
 | |
|     infoSpy = spyOn(console, 'info');
 | |
|   });
 | |
| 
 | |
|   describe('gathering stats', () => {
 | |
|     it('unless githubQueries are `undefined`', async () => {
 | |
|       const module = new GithubQueriesModule(
 | |
|           virtualGitClient, {...mockNgDevConfig, caretaker: {githubQueries: undefined}});
 | |
| 
 | |
|       expect(await module.data).toBe(undefined);
 | |
|     });
 | |
| 
 | |
|     it('unless githubQueries are an empty array', async () => {
 | |
|       const module = new GithubQueriesModule(
 | |
|           virtualGitClient, {...mockNgDevConfig, caretaker: {githubQueries: []}});
 | |
| 
 | |
|       expect(await module.data).toBe(undefined);
 | |
|     });
 | |
| 
 | |
|     it('for the requestd Github queries', async () => {
 | |
|       githubApiSpy.and.returnValue({
 | |
|         'keynamewithspaces': {issueCount: 1, nodes: [{url: 'http://gituhb.com/owner/name/issue/1'}]}
 | |
|       });
 | |
|       const module = new GithubQueriesModule(virtualGitClient, {
 | |
|         ...mockNgDevConfig,
 | |
|         caretaker: {githubQueries: [{name: 'key name with spaces', query: 'issue: yes'}]}
 | |
|       });
 | |
| 
 | |
|       expect(await module.data).toEqual([{
 | |
|         queryName: 'key name with spaces',
 | |
|         count: 1,
 | |
|         queryUrl: 'https://github.com/owner/name/issues?q=issue:%20yes',
 | |
|         matchedUrls: ['http://gituhb.com/owner/name/issue/1'],
 | |
|       }]);
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('printing the data retrieved', () => {
 | |
|     it('if there are no matches of the query', async () => {
 | |
|       const fakeData = Promise.resolve([
 | |
|         {
 | |
|           queryName: 'query1',
 | |
|           count: 0,
 | |
|           queryUrl: 'https://github.com/owner/name/issues?q=issue:%20no',
 | |
|           matchedUrls: [],
 | |
|         },
 | |
|         {
 | |
|           queryName: 'query2',
 | |
|           count: 0,
 | |
|           queryUrl: 'https://github.com/owner/name/issues?q=something',
 | |
|           matchedUrls: [],
 | |
|         },
 | |
|       ]);
 | |
| 
 | |
| 
 | |
|       const module = new GithubQueriesModule(virtualGitClient, {caretaker: {}, ...mockNgDevConfig});
 | |
|       Object.defineProperty(module, 'data', {value: fakeData});
 | |
| 
 | |
|       await module.printToTerminal();
 | |
| 
 | |
| 
 | |
|       expect(infoGroupSpy).toHaveBeenCalledWith('Github Tasks');
 | |
|       expect(infoSpy).toHaveBeenCalledWith('query1  0');
 | |
|       expect(infoSpy).toHaveBeenCalledWith('query2  0');
 | |
|     });
 | |
| 
 | |
|     it('if there are maches of the query', async () => {
 | |
|       const fakeData = Promise.resolve([
 | |
|         {
 | |
|           queryName: 'query1',
 | |
|           count: 1,
 | |
|           queryUrl: 'https://github.com/owner/name/issues?q=issue:%20yes',
 | |
|           matchedUrls: ['http://gituhb.com/owner/name/issue/1'],
 | |
|         },
 | |
|         {
 | |
|           queryName: 'query2',
 | |
|           count: 0,
 | |
|           queryUrl: 'https://github.com/owner/name/issues?q=something',
 | |
|           matchedUrls: [],
 | |
|         },
 | |
|       ]);
 | |
| 
 | |
|       const module = new GithubQueriesModule(virtualGitClient, {caretaker: {}, ...mockNgDevConfig});
 | |
|       Object.defineProperty(module, 'data', {value: fakeData});
 | |
| 
 | |
|       await module.printToTerminal();
 | |
| 
 | |
|       expect(infoGroupSpy).toHaveBeenCalledWith('Github Tasks');
 | |
|       expect(infoSpy).toHaveBeenCalledWith('query1  1');
 | |
|       expect(infoGroupSpy)
 | |
|           .toHaveBeenCalledWith('https://github.com/owner/name/issues?q=issue:%20yes');
 | |
|       expect(infoSpy).toHaveBeenCalledWith('- http://gituhb.com/owner/name/issue/1');
 | |
|       expect(infoSpy).toHaveBeenCalledWith('query2  0');
 | |
|     });
 | |
|   });
 | |
| });
 |