mirror of
				https://github.com/docker/login-action.git
				synced 2025-10-31 01:40:11 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {expect, jest, test} from '@jest/globals';
 | |
| import * as path from 'path';
 | |
| 
 | |
| import {loginStandard, logout} from '../src/docker';
 | |
| 
 | |
| import {Docker} from '@docker/actions-toolkit/lib/docker/docker';
 | |
| 
 | |
| process.env['RUNNER_TEMP'] = path.join(__dirname, 'runner');
 | |
| 
 | |
| test('loginStandard calls exec', async () => {
 | |
|   // eslint-disable-next-line @typescript-eslint/ban-ts-comment
 | |
|   // @ts-ignore
 | |
|   const execSpy = jest.spyOn(Docker, 'getExecOutput').mockImplementation(async () => {
 | |
|     return {
 | |
|       exitCode: expect.any(Number),
 | |
|       stdout: expect.any(Function),
 | |
|       stderr: expect.any(Function)
 | |
|     };
 | |
|   });
 | |
| 
 | |
|   const username = 'dbowie';
 | |
|   const password = 'groundcontrol';
 | |
|   // Define const registry as multiline input
 | |
|   const registry = `https://ghcr.io
 | |
| https://docker.io`;
 | |
| 
 | |
|   const registryArray = registry.split('\n').map(r => r.trim());
 | |
| 
 | |
|   for (const reg of registryArray) {
 | |
|     await loginStandard(reg, username, password);
 | |
|   }
 | |
| 
 | |
|   expect(execSpy).toHaveBeenCalledTimes(2);
 | |
|   const firstcall = execSpy.mock.calls[0];
 | |
|   if (firstcall && firstcall[1]) {
 | |
|     // we don't want to check env opt
 | |
|     firstcall[1].env = undefined;
 | |
|   }
 | |
|   expect(execSpy).toHaveBeenCalledWith(['login', '--password-stdin', '--username', username, registryArray[0]], {
 | |
|     input: Buffer.from(password),
 | |
|     silent: true,
 | |
|     ignoreReturnCode: true
 | |
|   });
 | |
| 
 | |
|   const secondcall = execSpy.mock.calls[1];
 | |
|   if (secondcall && secondcall[1]) {
 | |
|     // we don't want to check env opt
 | |
|     secondcall[1].env = undefined;
 | |
|   }
 | |
|   expect(execSpy).toHaveBeenCalledWith(['login', '--password-stdin', '--username', username, registryArray[1]], {
 | |
|     input: Buffer.from(password),
 | |
|     silent: true,
 | |
|     ignoreReturnCode: true
 | |
|   });
 | |
| });
 | |
| 
 | |
| test('logout calls exec', async () => {
 | |
|   // eslint-disable-next-line @typescript-eslint/ban-ts-comment
 | |
|   // @ts-ignore
 | |
|   const execSpy = jest.spyOn(Docker, 'getExecOutput').mockImplementation(async () => {
 | |
|     return {
 | |
|       exitCode: expect.any(Number),
 | |
|       stdout: expect.any(Function),
 | |
|       stderr: expect.any(Function)
 | |
|     };
 | |
|   });
 | |
| 
 | |
|   const registry = `https://ghcr.io
 | |
| https://docker.io`;
 | |
| 
 | |
|   const registryArray = registry.split('\n').map(r => r.trim());
 | |
| 
 | |
|   for (const reg of registryArray) {
 | |
|     await logout(reg);
 | |
|   }
 | |
| 
 | |
|   expect(execSpy).toHaveBeenCalledTimes(2);
 | |
|   const firstcall = execSpy.mock.calls[0];
 | |
|   if (firstcall && firstcall[1]) {
 | |
|     // we don't want to check env opt
 | |
|     firstcall[1].env = undefined;
 | |
|   }
 | |
|   expect(execSpy).toHaveBeenCalledWith(['logout', registryArray[0]], {
 | |
|     ignoreReturnCode: true
 | |
|   });
 | |
| 
 | |
|   const secondcall = execSpy.mock.calls[1];
 | |
|   if (secondcall && secondcall[1]) {
 | |
|     // we don't want to check env opt
 | |
|     secondcall[1].env = undefined;
 | |
|   }
 | |
| 
 | |
|   expect(execSpy).toHaveBeenCalledWith(['logout', registryArray[1]], {
 | |
|     ignoreReturnCode: true
 | |
|   });
 | |
| });
 | 
