137 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| import {
 | |
|   isGid,
 | |
|   getIdFromGraphQLId,
 | |
|   convertToGraphQLId,
 | |
|   convertToGraphQLIds,
 | |
|   convertFromGraphQLIds,
 | |
|   convertNodeIdsFromGraphQLIds,
 | |
| } from '~/graphql_shared/utils';
 | |
| 
 | |
| const mockType = 'Group';
 | |
| const mockId = 12;
 | |
| const mockGid = `gid://gitlab/Group/12`;
 | |
| 
 | |
| describe('isGid', () => {
 | |
|   it('returns true if passed id is gid', () => {
 | |
|     expect(isGid(mockGid)).toBe(true);
 | |
|   });
 | |
| 
 | |
|   it('returns false if passed id is not gid', () => {
 | |
|     expect(isGid(mockId)).toBe(false);
 | |
|   });
 | |
| });
 | |
| 
 | |
| describe('getIdFromGraphQLId', () => {
 | |
|   [
 | |
|     {
 | |
|       input: '',
 | |
|       output: null,
 | |
|     },
 | |
|     {
 | |
|       input: null,
 | |
|       output: null,
 | |
|     },
 | |
|     {
 | |
|       input: 2,
 | |
|       output: 2,
 | |
|     },
 | |
|     {
 | |
|       input: 'gid://',
 | |
|       output: null,
 | |
|     },
 | |
|     {
 | |
|       input: 'gid://gitlab/',
 | |
|       output: null,
 | |
|     },
 | |
|     {
 | |
|       input: 'gid://gitlab/Environments',
 | |
|       output: null,
 | |
|     },
 | |
|     {
 | |
|       input: 'gid://gitlab/Environments/',
 | |
|       output: null,
 | |
|     },
 | |
|     {
 | |
|       input: 'gid://gitlab/Environments/0',
 | |
|       output: 0,
 | |
|     },
 | |
|     {
 | |
|       input: 'gid://gitlab/Environments/123',
 | |
|       output: 123,
 | |
|     },
 | |
|     {
 | |
|       input: 'gid://gitlab/DesignManagement::Version/2',
 | |
|       output: 2,
 | |
|     },
 | |
|   ].forEach(({ input, output }) => {
 | |
|     it(`getIdFromGraphQLId returns ${output} when passed ${input}`, () => {
 | |
|       expect(getIdFromGraphQLId(input)).toBe(output);
 | |
|     });
 | |
|   });
 | |
| });
 | |
| 
 | |
| describe('convertToGraphQLId', () => {
 | |
|   it('combines $type and $id into $result', () => {
 | |
|     expect(convertToGraphQLId(mockType, mockId)).toBe(mockGid);
 | |
|   });
 | |
| 
 | |
|   it.each`
 | |
|     type        | id        | message
 | |
|     ${mockType} | ${null}   | ${'id must be a number or string; got object'}
 | |
|     ${null}     | ${mockId} | ${'type must be a string; got object'}
 | |
|   `('throws TypeError with "$message" if a param is missing', ({ type, id, message }) => {
 | |
|     expect(() => convertToGraphQLId(type, id)).toThrow(new TypeError(message));
 | |
|   });
 | |
| 
 | |
|   it('returns id as is if it follows the gid format', () => {
 | |
|     expect(convertToGraphQLId(mockType, mockGid)).toStrictEqual(mockGid);
 | |
|   });
 | |
| });
 | |
| 
 | |
| describe('convertToGraphQLIds', () => {
 | |
|   it('combines $type and $id into $result', () => {
 | |
|     expect(convertToGraphQLIds(mockType, [mockId])).toStrictEqual([mockGid]);
 | |
|   });
 | |
| 
 | |
|   it.each`
 | |
|     type        | ids               | message
 | |
|     ${mockType} | ${null}           | ${"Cannot read property 'map' of null"}
 | |
|     ${mockType} | ${[mockId, null]} | ${'id must be a number or string; got object'}
 | |
|     ${null}     | ${[mockId]}       | ${'type must be a string; got object'}
 | |
|   `('throws TypeError with "$message" if a param is missing', ({ type, ids, message }) => {
 | |
|     expect(() => convertToGraphQLIds(type, ids)).toThrow(new TypeError(message));
 | |
|   });
 | |
| });
 | |
| 
 | |
| describe('convertFromGraphQLIds', () => {
 | |
|   it.each`
 | |
|     ids                        | expected
 | |
|     ${[mockGid]}               | ${[mockId]}
 | |
|     ${[mockGid, 'invalid id']} | ${[mockId, null]}
 | |
|   `('converts $ids from GraphQL Ids', ({ ids, expected }) => {
 | |
|     expect(convertFromGraphQLIds(ids)).toEqual(expected);
 | |
|   });
 | |
| 
 | |
|   it("throws TypeError if `ids` parameter isn't an array", () => {
 | |
|     expect(() => convertFromGraphQLIds('invalid')).toThrow(
 | |
|       new TypeError('ids must be an array; got string'),
 | |
|     );
 | |
|   });
 | |
| });
 | |
| 
 | |
| describe('convertNodeIdsFromGraphQLIds', () => {
 | |
|   it.each`
 | |
|     nodes                                                               | expected
 | |
|     ${[{ id: mockGid, name: 'foo bar' }, { id: mockGid, name: 'baz' }]} | ${[{ id: mockId, name: 'foo bar' }, { id: mockId, name: 'baz' }]}
 | |
|     ${[{ name: 'foo bar' }]}                                            | ${[{ name: 'foo bar' }]}
 | |
|   `('converts `id` properties in $nodes from GraphQL Id', ({ nodes, expected }) => {
 | |
|     expect(convertNodeIdsFromGraphQLIds(nodes)).toEqual(expected);
 | |
|   });
 | |
| 
 | |
|   it("throws TypeError if `nodes` parameter isn't an array", () => {
 | |
|     expect(() => convertNodeIdsFromGraphQLIds('invalid')).toThrow(
 | |
|       new TypeError('nodes must be an array; got string'),
 | |
|     );
 | |
|   });
 | |
| });
 |