mirror of
https://github.com/shivammathur/setup-php.git
synced 2025-07-23 23:29:07 +07:00
Refactor utils.fetch to a module and mock it with nock
Add redirect support in utils.fetch
This commit is contained in:
39
__tests__/fetch.test.ts
Normal file
39
__tests__/fetch.test.ts
Normal file
@ -0,0 +1,39 @@
|
||||
import * as fetch from '../src/fetch';
|
||||
import nock = require('nock');
|
||||
|
||||
it('checking fetch', async () => {
|
||||
const host_url = 'https://example.com';
|
||||
const manifest_url = host_url + '/manifest';
|
||||
const ping_url = host_url + '/ping';
|
||||
|
||||
nock(host_url)
|
||||
.get('/manifest')
|
||||
.reply(200, {latest: 'latest'})
|
||||
.get('/manifest', '', {
|
||||
reqheaders: {authorization: 'Bearer invalid_token'}
|
||||
})
|
||||
.reply(401, {error: '401: Unauthorized'})
|
||||
.get('/ping')
|
||||
.twice()
|
||||
.reply(301, undefined, {
|
||||
Location: host_url + '/pong'
|
||||
})
|
||||
.get('/pong')
|
||||
.reply(200, 'pong');
|
||||
|
||||
let response: Record<string, string> = await fetch.fetch(manifest_url);
|
||||
expect(response.error).toBe(undefined);
|
||||
expect(response.data).toContain('latest');
|
||||
|
||||
response = await fetch.fetch(ping_url, '', 1);
|
||||
expect(response.error).toBe(undefined);
|
||||
expect(response.data).toContain('pong');
|
||||
|
||||
response = await fetch.fetch(ping_url, '', 0);
|
||||
expect(response.error).toBe('301: Redirect error');
|
||||
expect(response.data).toBe(undefined);
|
||||
|
||||
response = await fetch.fetch(manifest_url, 'invalid_token');
|
||||
expect(response.error).not.toBe(undefined);
|
||||
expect(response.data).toBe(undefined);
|
||||
});
|
@ -33,6 +33,15 @@ jest.mock('../src/install', () => ({
|
||||
})
|
||||
}));
|
||||
|
||||
/**
|
||||
* Mock fetch.ts
|
||||
*/
|
||||
jest.mock('../src/fetch', () => ({
|
||||
fetch: jest.fn().mockImplementation(() => {
|
||||
return {data: '{ "latest": "8.1", "5.x": "5.6" }'};
|
||||
})
|
||||
}));
|
||||
|
||||
describe('Install', () => {
|
||||
it.each`
|
||||
version | os | extension_csv | ini_file | ini_values_csv | coverage_driver | tools | output
|
||||
|
@ -1,5 +1,4 @@
|
||||
import * as tools from '../src/tools';
|
||||
import * as utils from '../src/utils';
|
||||
|
||||
interface IData {
|
||||
tool: string;
|
||||
@ -38,29 +37,34 @@ function getData(data: IData): Record<string, string> {
|
||||
};
|
||||
}
|
||||
|
||||
jest
|
||||
.spyOn(utils, 'fetch')
|
||||
.mockImplementation(
|
||||
async (url: string, token?: string): Promise<Record<string, string>> => {
|
||||
if (url.includes('atom') && !url.includes('no-')) {
|
||||
return {
|
||||
data: '"releases/tag/1.2.3", "releases/tag/3.2.1", "releases/tag/2.3.1"'
|
||||
};
|
||||
} else if (url.includes('no-data')) {
|
||||
return {};
|
||||
} else if (url.includes('no-release')) {
|
||||
return {data: 'no-release'};
|
||||
} else if (!token || token === 'valid_token') {
|
||||
return {data: `[{"ref": "refs/tags/1.2.3", "url": "${url}"}]`};
|
||||
} else if (token === 'beta_token') {
|
||||
return {data: `[{"ref": "refs/tags/1.2.3-beta1", "url": "${url}"}]`};
|
||||
} else if (token === 'no_data') {
|
||||
return {data: '[]'};
|
||||
} else {
|
||||
return {error: 'Invalid token'};
|
||||
/**
|
||||
* Mock fetch.ts
|
||||
*/
|
||||
jest.mock('../src/fetch', () => ({
|
||||
fetch: jest
|
||||
.fn()
|
||||
.mockImplementation(
|
||||
async (url: string, token?: string): Promise<Record<string, string>> => {
|
||||
if (url.includes('atom') && !url.includes('no-')) {
|
||||
return {
|
||||
data: '"releases/tag/1.2.3", "releases/tag/3.2.1", "releases/tag/2.3.1"'
|
||||
};
|
||||
} else if (url.includes('no-data')) {
|
||||
return {};
|
||||
} else if (url.includes('no-release')) {
|
||||
return {data: 'no-release'};
|
||||
} else if (!token || token === 'valid_token') {
|
||||
return {data: `[{"ref": "refs/tags/1.2.3", "url": "${url}"}]`};
|
||||
} else if (token === 'beta_token') {
|
||||
return {data: `[{"ref": "refs/tags/1.2.3-beta1", "url": "${url}"}]`};
|
||||
} else if (token === 'no_data') {
|
||||
return {data: '[]'};
|
||||
} else {
|
||||
return {error: 'Invalid token'};
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
)
|
||||
}));
|
||||
|
||||
describe('Tools tests', () => {
|
||||
it.each`
|
||||
|
@ -1,12 +1,24 @@
|
||||
import * as path from 'path';
|
||||
import * as utils from '../src/utils';
|
||||
|
||||
/**
|
||||
* Mock @actions/core
|
||||
*/
|
||||
jest.mock('@actions/core', () => ({
|
||||
getInput: jest.fn().mockImplementation(key => {
|
||||
return ['setup-php'].indexOf(key) !== -1 ? key : '';
|
||||
})
|
||||
}));
|
||||
|
||||
/**
|
||||
* Mock fetch.ts
|
||||
*/
|
||||
jest.mock('../src/fetch', () => ({
|
||||
fetch: jest.fn().mockImplementation(() => {
|
||||
return {data: '{ "latest": "8.1", "5.x": "5.6" }'};
|
||||
})
|
||||
}));
|
||||
|
||||
describe('Utils tests', () => {
|
||||
it('checking readEnv', async () => {
|
||||
process.env['test'] = 'setup-php';
|
||||
@ -28,33 +40,11 @@ describe('Utils tests', () => {
|
||||
}).rejects.toThrow('Input required and not supplied: DoesNotExist');
|
||||
});
|
||||
|
||||
it('checking fetch', async () => {
|
||||
const manifest = await utils.getManifestURL();
|
||||
let response: Record<string, string> = await utils.fetch(manifest);
|
||||
expect(response.error).toBe(undefined);
|
||||
expect(response.data).toContain('latest');
|
||||
|
||||
response = await utils.fetch(manifest, 'invalid_token');
|
||||
expect(response.error).not.toBe(undefined);
|
||||
expect(response.data).toBe(undefined);
|
||||
});
|
||||
|
||||
it('checking getManifestURL', async () => {
|
||||
expect(await utils.getManifestURL()).toContain('php-versions.json');
|
||||
});
|
||||
|
||||
it('checking parseVersion', async () => {
|
||||
jest
|
||||
.spyOn(utils, 'fetch')
|
||||
.mockImplementation(
|
||||
async (url, token?): Promise<Record<string, string>> => {
|
||||
if (!token || token === 'valid_token') {
|
||||
return {data: `{ "latest": "8.0", "5.x": "5.6", "url": "${url}" }`};
|
||||
} else {
|
||||
return {error: 'Invalid token'};
|
||||
}
|
||||
}
|
||||
);
|
||||
expect(await utils.parseVersion('latest')).toBe('8.1');
|
||||
expect(await utils.parseVersion('7')).toBe('7.0');
|
||||
expect(await utils.parseVersion('7.4')).toBe('7.4');
|
||||
|
Reference in New Issue
Block a user