Skip to content

Commit

Permalink
Tests: do not mock getInput with an incompatible implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
akx committed Nov 10, 2023
1 parent 448593e commit aae1567
Showing 1 changed file with 23 additions and 29 deletions.
52 changes: 23 additions & 29 deletions __tests__/cache-save.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ describe('run', () => {
let debugSpy: jest.SpyInstance;
let saveStateSpy: jest.SpyInstance;
let getStateSpy: jest.SpyInstance;
let getInputSpy: jest.SpyInstance;
let setFailedSpy: jest.SpyInstance;

// cache spy
Expand All @@ -29,10 +28,17 @@ describe('run', () => {
// exec spy
let getExecOutputSpy: jest.SpyInstance;

let inputs = {} as any;
function setInput(name: string, value: string): void {
process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] = value;
}

beforeEach(() => {
process.env['RUNNER_OS'] = process.env['RUNNER_OS'] ?? 'linux';
for(const key in process.env) {
if(key.startsWith('INPUT_')) {
delete process.env[key];
}
}

infoSpy = jest.spyOn(core, 'info');
infoSpy.mockImplementation(input => undefined);
Expand All @@ -56,9 +62,6 @@ describe('run', () => {

setFailedSpy = jest.spyOn(core, 'setFailed');

getInputSpy = jest.spyOn(core, 'getInput');
getInputSpy.mockImplementation(input => inputs[input]);

getExecOutputSpy = jest.spyOn(exec, 'getExecOutput');
getExecOutputSpy.mockImplementation((input: string) => {
if (input.includes('pip')) {
Expand All @@ -74,10 +77,9 @@ describe('run', () => {

describe('Package manager validation', () => {
it('Package manager is not provided, skip caching', async () => {
inputs['cache'] = '';
setInput('cache', '');
await run();

expect(getInputSpy).toHaveBeenCalled();
expect(infoSpy).not.toHaveBeenCalled();
expect(saveCacheSpy).not.toHaveBeenCalled();
expect(setFailedSpy).not.toHaveBeenCalled();
Expand All @@ -86,12 +88,11 @@ describe('run', () => {

describe('Validate unchanged cache is not saved', () => {
it('should not save cache for pip', async () => {
inputs['cache'] = 'pip';
inputs['python-version'] = '3.10.0';
setInput('cache', 'pip');
setInput('python-version', '3.10.0');

await run();

expect(getInputSpy).toHaveBeenCalled();
expect(debugSpy).toHaveBeenCalledWith(
`paths for caching are ${__dirname}`
);
Expand All @@ -103,12 +104,11 @@ describe('run', () => {
});

it('should not save cache for pipenv', async () => {
inputs['cache'] = 'pipenv';
inputs['python-version'] = '3.10.0';
setInput('cache', 'pipenv');
setInput('python-version', '3.10.0');

await run();

expect(getInputSpy).toHaveBeenCalled();
expect(debugSpy).toHaveBeenCalledWith(
`paths for caching are ${__dirname}`
);
Expand All @@ -122,8 +122,8 @@ describe('run', () => {

describe('action saves the cache', () => {
it('saves cache from pip', async () => {
inputs['cache'] = 'pip';
inputs['python-version'] = '3.10.0';
setInput('cache', 'pip');
setInput('python-version', '3.10.0');
getStateSpy.mockImplementation((name: string) => {
if (name === State.CACHE_MATCHED_KEY) {
return requirementsHash;
Expand All @@ -136,7 +136,6 @@ describe('run', () => {

await run();

expect(getInputSpy).toHaveBeenCalled();
expect(getStateSpy).toHaveBeenCalledTimes(3);
expect(infoSpy).not.toHaveBeenCalledWith(
`Cache hit occurred on the primary key ${requirementsHash}, not saving cache.`
Expand All @@ -149,8 +148,8 @@ describe('run', () => {
});

it('saves cache from pipenv', async () => {
inputs['cache'] = 'pipenv';
inputs['python-version'] = '3.10.0';
setInput('cache', 'pipenv');
setInput('python-version', '3.10.0');
getStateSpy.mockImplementation((name: string) => {
if (name === State.CACHE_MATCHED_KEY) {
return pipFileLockHash;
Expand All @@ -163,7 +162,6 @@ describe('run', () => {

await run();

expect(getInputSpy).toHaveBeenCalled();
expect(getStateSpy).toHaveBeenCalledTimes(3);
expect(infoSpy).not.toHaveBeenCalledWith(
`Cache hit occurred on the primary key ${pipFileLockHash}, not saving cache.`
Expand All @@ -176,8 +174,8 @@ describe('run', () => {
});

it('saves cache from poetry', async () => {
inputs['cache'] = 'poetry';
inputs['python-version'] = '3.10.0';
setInput('cache', 'poetry');
setInput('python-version', '3.10.0');
getStateSpy.mockImplementation((name: string) => {
if (name === State.CACHE_MATCHED_KEY) {
return poetryLockHash;
Expand All @@ -190,7 +188,6 @@ describe('run', () => {

await run();

expect(getInputSpy).toHaveBeenCalled();
expect(getStateSpy).toHaveBeenCalledTimes(3);
expect(infoSpy).not.toHaveBeenCalledWith(
`Cache hit occurred on the primary key ${poetryLockHash}, not saving cache.`
Expand All @@ -203,8 +200,8 @@ describe('run', () => {
});

it('saves with -1 cacheId , should not fail workflow', async () => {
inputs['cache'] = 'poetry';
inputs['python-version'] = '3.10.0';
setInput('cache', 'poetry');
setInput('python-version', '3.10.0');
getStateSpy.mockImplementation((name: string) => {
if (name === State.STATE_CACHE_PRIMARY_KEY) {
return poetryLockHash;
Expand All @@ -221,7 +218,6 @@ describe('run', () => {

await run();

expect(getInputSpy).toHaveBeenCalled();
expect(getStateSpy).toHaveBeenCalledTimes(3);
expect(infoSpy).not.toHaveBeenCalled();
expect(saveCacheSpy).toHaveBeenCalled();
Expand All @@ -232,8 +228,8 @@ describe('run', () => {
});

it('saves with error from toolkit, should not fail the workflow', async () => {
inputs['cache'] = 'npm';
inputs['python-version'] = '3.10.0';
setInput('cache', 'npm');
setInput('python-version', '3.10.0');
getStateSpy.mockImplementation((name: string) => {
if (name === State.STATE_CACHE_PRIMARY_KEY) {
return poetryLockHash;
Expand All @@ -250,7 +246,6 @@ describe('run', () => {

await run();

expect(getInputSpy).toHaveBeenCalled();
expect(getStateSpy).toHaveBeenCalledTimes(3);
expect(infoSpy).not.toHaveBeenCalledWith();
expect(saveCacheSpy).toHaveBeenCalled();
Expand All @@ -261,6 +256,5 @@ describe('run', () => {
afterEach(() => {
jest.resetAllMocks();
jest.clearAllMocks();
inputs = {};
});
});

0 comments on commit aae1567

Please sign in to comment.