refactored installer.test.ts

This commit is contained in:
Hargun Kaur 2021-10-04 23:00:00 +00:00 committed by GitHub
parent 16506004ff
commit 2fb803baf3
3 changed files with 101 additions and 13 deletions

View file

@ -9,6 +9,9 @@ import * as main from '../src/main';
import * as auth from '../src/authutil'; import * as auth from '../src/authutil';
let nodeTestManifest = require('./data/versions-manifest.json'); let nodeTestManifest = require('./data/versions-manifest.json');
let nodeTestDist = require('./data/node-dist-index.json'); let nodeTestDist = require('./data/node-dist-index.json');
import * as nv from '../src/installer';
describe('setup-node', () => { describe('setup-node', () => {
let inputs = {} as any; let inputs = {} as any;
@ -58,7 +61,7 @@ describe('setup-node', () => {
cacheSpy = jest.spyOn(tc, 'cacheDir'); cacheSpy = jest.spyOn(tc, 'cacheDir');
getManifestSpy = jest.spyOn(tc, 'getManifestFromRepo'); getManifestSpy = jest.spyOn(tc, 'getManifestFromRepo');
getDistSpy = jest.spyOn(nv, 'getVersionsFromDist'); getDistSpy = jest.spyOn(nv, 'getVersionsFromDist');
parseNodeVersionSpy = jest.spyOn(nvf, 'parseNodeVersionFile'); parseNodeVersionSpy = jest.spyOn(nv, 'parseNodeVersionFile');
// io // io
whichSpy = jest.spyOn(io, 'which'); whichSpy = jest.spyOn(io, 'which');
@ -814,4 +817,89 @@ describe('setup-node', () => {
}); });
}); });
}); });
describe('node-version-file', () => {
let getVersionsFromDist: jest.SpyInstance;
beforeEach(() => {
// @actions/core
console.log('::stop-commands::stoptoken'); // Disable executing of runner commands when running tests in actions
getVersionsFromDist = jest.spyOn(nv, 'getVersionsFromDist');
// gets
getVersionsFromDist.mockImplementation(() => <nv.INodeVersion>nodeTestDist);
});
afterEach(() => {
jest.resetAllMocks();
jest.clearAllMocks();
//jest.restoreAllMocks();
});
afterAll(async () => {
console.log('::stoptoken::'); // Re-enable executing of runner commands when running tests in actions
}, 100000);
//--------------------------------------------------
// Manifest find tests
//--------------------------------------------------
describe('parseNodeVersionFile', () => {
it('without `v` prefix', async () => {
// Arrange
const versionSpec = '12';
// Act
const result = await nv.parseNodeVersionFile(versionSpec);
// Assert
expect(result).toBe(versionSpec);
});
it('lts/*', async () => {
// Arrange
const versionSpec = 'lts/*';
// Act
const result = await nv.parseNodeVersionFile(versionSpec);
// Assert
expect(result).toMatch(/^\d+\.\d+\.\d+$/);
});
it('lts/erbium', async () => {
// Arrange
const versionSpec = 'lts/*';
// Act
const result = await nv.parseNodeVersionFile(versionSpec);
// Assert
expect(result).toMatch(/\d\.\d\.\d/);
});
it('partial syntax like 12', async () => {
// Arrange
const versionSpec = '12';
// Act
const result = await nv.parseNodeVersionFile(versionSpec);
// Assert
expect(result).toBe(versionSpec);
});
it('partial syntax like 12.16', async () => {
// Arrange
const versionSpec = '12.16';
// Act
const result = await nv.parseNodeVersionFile(versionSpec);
// Assert
expect(result).toBe(versionSpec);
});
});
});
}); });

View file

@ -1,5 +1,5 @@
import * as nv from '../src/node-version'; import * as nv from '../src/installer';
import * as nvf from '../src/node-version-file';
let nodeTestDist = require('./data/node-dist-index.json'); let nodeTestDist = require('./data/node-dist-index.json');
@ -35,7 +35,7 @@ describe('node-version-file', () => {
const versionSpec = '12'; const versionSpec = '12';
// Act // Act
const result = await nvf.parseNodeVersionFile(versionSpec); const result = await nv.parseNodeVersionFile(versionSpec);
// Assert // Assert
expect(result).toBe(versionSpec); expect(result).toBe(versionSpec);
@ -46,7 +46,7 @@ describe('node-version-file', () => {
const versionSpec = 'lts/*'; const versionSpec = 'lts/*';
// Act // Act
const result = await nvf.parseNodeVersionFile(versionSpec); const result = await nv.parseNodeVersionFile(versionSpec);
// Assert // Assert
expect(result).toMatch(/^\d+\.\d+\.\d+$/); expect(result).toMatch(/^\d+\.\d+\.\d+$/);
@ -57,7 +57,7 @@ describe('node-version-file', () => {
const versionSpec = 'lts/*'; const versionSpec = 'lts/*';
// Act // Act
const result = await nvf.parseNodeVersionFile(versionSpec); const result = await nv.parseNodeVersionFile(versionSpec);
// Assert // Assert
expect(result).toMatch(/\d\.\d\.\d/); expect(result).toMatch(/\d\.\d\.\d/);
@ -68,7 +68,7 @@ describe('node-version-file', () => {
const versionSpec = '12'; const versionSpec = '12';
// Act // Act
const result = await nvf.parseNodeVersionFile(versionSpec); const result = await nv.parseNodeVersionFile(versionSpec);
// Assert // Assert
expect(result).toBe(versionSpec); expect(result).toBe(versionSpec);
@ -79,7 +79,7 @@ describe('node-version-file', () => {
const versionSpec = '12.16'; const versionSpec = '12.16';
// Act // Act
const result = await nvf.parseNodeVersionFile(versionSpec); const result = await nv.parseNodeVersionFile(versionSpec);
// Assert // Assert
expect(result).toBe(versionSpec); expect(result).toBe(versionSpec);

View file

@ -10,7 +10,7 @@ import fs = require('fs');
interface INodeVersion { export interface INodeVersion {
version: string; version: string;
files: string[]; files: string[];
} }
@ -97,7 +97,7 @@ export async function getNode(
'Not found in manifest. Falling back to download directly from Node' 'Not found in manifest. Falling back to download directly from Node'
); );
} }
} catch (err) { } catch (err : any) {
// Rate limit? // Rate limit?
if ( if (
err instanceof tc.HTTPError && err instanceof tc.HTTPError &&
@ -107,7 +107,7 @@ export async function getNode(
`Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded` `Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded`
); );
} else { } else {
core.info(err.message); core.info((err).message);
} }
core.debug(err.stack); core.debug(err.stack);
core.info('Falling back to download directly from Node'); core.info('Falling back to download directly from Node');
@ -311,7 +311,7 @@ async function resolveVersionFromManifest(
manifest manifest
); );
return info?.resolvedVersion; return info?.resolvedVersion;
} catch (err) { } catch (err : any) {
core.info('Unable to resolve version from manifest...'); core.info('Unable to resolve version from manifest...');
core.debug(err.message); core.debug(err.message);
} }
@ -383,7 +383,7 @@ async function queryDistForMatch(
return version; return version;
} }
async function getVersionsFromDist(): Promise<INodeVersion[]> { export async function getVersionsFromDist(): Promise<INodeVersion[]> {
let dataUrl = 'https://nodejs.org/dist/index.json'; let dataUrl = 'https://nodejs.org/dist/index.json';
let httpClient = new hc.HttpClient('setup-node', [], { let httpClient = new hc.HttpClient('setup-node', [], {
allowRetries: true, allowRetries: true,