login-action/__tests__/docker.test.ts
unknown 8d9860ef0e Feature: Enable Multi Registry login Authentication
Signed-off-by: unknown <arunkumarthiyagarajan95@gmail.com>
2025-08-04 11:25:13 +05:30

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
});
});