mirror of
http://43.153.184.91:8080/https://github.com/actions/setup-go.git
synced 2026-01-27 03:02:46 +08:00
* Update module cache to use go.mod as key * Fix typo * Revise breaking changes in README for V6 Updated breaking changes section with enhanced formatting and clarified toolchain management details.
103 lines
3.1 KiB
TypeScript
103 lines
3.1 KiB
TypeScript
import * as cache from '@actions/cache';
|
|
import * as core from '@actions/core';
|
|
import * as glob from '@actions/glob';
|
|
import fs from 'fs';
|
|
|
|
import * as cacheRestore from '../src/cache-restore';
|
|
import * as cacheUtils from '../src/cache-utils';
|
|
import {PackageManagerInfo} from '../src/package-managers';
|
|
|
|
describe('restoreCache', () => {
|
|
let hashFilesSpy: jest.SpyInstance;
|
|
let getCacheDirectoryPathSpy: jest.SpyInstance;
|
|
let restoreCacheSpy: jest.SpyInstance;
|
|
let infoSpy: jest.SpyInstance;
|
|
let setOutputSpy: jest.SpyInstance;
|
|
|
|
const versionSpec = '1.13.1';
|
|
const packageManager = 'default';
|
|
const cacheDependencyPath = 'path';
|
|
|
|
let originalWorkspace: string | undefined;
|
|
|
|
beforeEach(() => {
|
|
originalWorkspace = process.env.GITHUB_WORKSPACE;
|
|
process.env.GITHUB_WORKSPACE = '/test/workspace';
|
|
//Arrange
|
|
hashFilesSpy = jest.spyOn(glob, 'hashFiles');
|
|
getCacheDirectoryPathSpy = jest.spyOn(cacheUtils, 'getCacheDirectoryPath');
|
|
restoreCacheSpy = jest.spyOn(cache, 'restoreCache');
|
|
infoSpy = jest.spyOn(core, 'info');
|
|
setOutputSpy = jest.spyOn(core, 'setOutput');
|
|
|
|
getCacheDirectoryPathSpy.mockImplementation(
|
|
(PackageManager: PackageManagerInfo) => {
|
|
return Promise.resolve([
|
|
'cache_directory_path',
|
|
'cache_directory_path'
|
|
]);
|
|
}
|
|
);
|
|
});
|
|
|
|
afterEach(() => {
|
|
process.env.GITHUB_WORKSPACE = originalWorkspace;
|
|
jest.restoreAllMocks();
|
|
});
|
|
|
|
it('should throw if dependency file path is not valid', async () => {
|
|
// Arrange
|
|
hashFilesSpy.mockImplementation(() => Promise.resolve(''));
|
|
// Act + Assert
|
|
await expect(
|
|
cacheRestore.restoreCache(
|
|
versionSpec,
|
|
packageManager,
|
|
cacheDependencyPath
|
|
)
|
|
).rejects.toThrow(
|
|
'Some specified paths were not resolved, unable to cache dependencies.'
|
|
);
|
|
});
|
|
|
|
it('should inform if cache hit is not occurred', async () => {
|
|
// Arrange
|
|
hashFilesSpy.mockImplementation(() => Promise.resolve('file_hash'));
|
|
restoreCacheSpy.mockImplementation(() => Promise.resolve(''));
|
|
// Act + Assert
|
|
await cacheRestore.restoreCache(
|
|
versionSpec,
|
|
packageManager,
|
|
cacheDependencyPath
|
|
);
|
|
expect(infoSpy).toHaveBeenCalledWith('Cache is not found');
|
|
});
|
|
|
|
it('should set output if cache hit is occurred', async () => {
|
|
// Arrange
|
|
hashFilesSpy.mockImplementation(() => Promise.resolve('file_hash'));
|
|
restoreCacheSpy.mockImplementation(() => Promise.resolve('cache_key'));
|
|
// Act + Assert
|
|
await cacheRestore.restoreCache(
|
|
versionSpec,
|
|
packageManager,
|
|
cacheDependencyPath
|
|
);
|
|
expect(setOutputSpy).toHaveBeenCalledWith('cache-hit', true);
|
|
});
|
|
|
|
it('should throw if dependency file is not found in workspace', async () => {
|
|
jest.spyOn(fs, 'readdirSync').mockReturnValue(['main.go'] as any);
|
|
|
|
await expect(
|
|
cacheRestore.restoreCache(
|
|
versionSpec,
|
|
packageManager
|
|
// No cacheDependencyPath
|
|
)
|
|
).rejects.toThrow(
|
|
'Dependencies file is not found in /test/workspace. Supported file pattern: go.mod'
|
|
);
|
|
});
|
|
});
|