import * as cache from '@actions/cache'; import * as core from '@actions/core'; import { parsePythonVersionFile, validateVersion, validatePythonVersionFormatForPyPy, isCacheFeatureAvailable } from '../src/utils'; jest.mock('@actions/cache'); jest.mock('@actions/core'); describe('parsePythonVersionFile', () => { it('handle the content of a .python-version file', () => { expect(parsePythonVersionFile('3.6')).toEqual('3.6'); }); it('trims extra spaces at the end of the content', () => { expect(parsePythonVersionFile('3.7 ')).toEqual('3.7'); }); it('parses correctly the content of .tool-version files', () => { expect(parsePythonVersionFile('python 3.7')).toEqual('3.7'); }); it('parses correctly pypy version content of the .tool-version files', () => { expect(parsePythonVersionFile('python pypy3.9-7.3.10')).toEqual( 'pypy3.9-7.3.10' ); }); }); describe('validatePythonVersionFormatForPyPy', () => { it.each([ ['3.6', true], ['3.7', true], ['3.6.x', false], ['3.7.x', false], ['3.x', false], ['3', false] ])('%s -> %s', (input, expected) => { expect(validatePythonVersionFormatForPyPy(input)).toEqual(expected); }); }); describe('validateVersion', () => { it.each([ ['v7.3.3', true], ['v7.3.x', true], ['v7.x', true], ['x', true], ['v7.3.3-rc.1', true], ['nightly', true], ['v7.3.b', false], ['3.6', true], ['3.b', false], ['3', true] ])('%s -> %s', (input, expected) => { expect(validateVersion(input)).toEqual(expected); }); }); describe('isCacheFeatureAvailable', () => { it('isCacheFeatureAvailable disabled on GHES', () => { jest.spyOn(cache, 'isFeatureAvailable').mockImplementation(() => false); const infoMock = jest.spyOn(core, 'warning'); const message = 'Caching is only supported on GHES version >= 3.5. If you are on a version >= 3.5, please check with your GHES admin if the Actions cache service is enabled or not.'; try { process.env['GITHUB_SERVER_URL'] = 'http://example.com'; expect(isCacheFeatureAvailable()).toBeFalsy(); expect(infoMock).toHaveBeenCalledWith(message); } finally { delete process.env['GITHUB_SERVER_URL']; } }); it('isCacheFeatureAvailable disabled on dotcom', () => { jest.spyOn(cache, 'isFeatureAvailable').mockImplementation(() => false); const infoMock = jest.spyOn(core, 'warning'); const message = 'The runner was not able to contact the cache service. Caching will be skipped'; try { process.env['GITHUB_SERVER_URL'] = 'http://github.com'; expect(isCacheFeatureAvailable()).toBe(false); expect(infoMock).toHaveBeenCalledWith(message); } finally { delete process.env['GITHUB_SERVER_URL']; } }); it('isCacheFeatureAvailable is enabled', () => { jest.spyOn(cache, 'isFeatureAvailable').mockImplementation(() => true); expect(isCacheFeatureAvailable()).toBe(true); }); });