Files
setup-php/__tests__/fetch.test.ts
T

58 lines
1.6 KiB
TypeScript

import * as fetch from '../src/fetch.js';
import nock from 'nock';
beforeAll(() => nock.disableNetConnect());
afterEach(() => {
const pending = nock.pendingMocks();
nock.cleanAll();
expect(pending).toEqual([]);
});
afterAll(() => {
nock.enableNetConnect();
nock.restore();
});
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')
.matchHeader('authorization', 'Bearer invalid_token')
.reply(401, {error: '401: Unauthorized'})
.get('/ping')
.twice()
.reply(301, undefined, {
Location: host_url + '/pong'
})
.get('/pong')
.reply(200, 'pong')
.get('/error')
.replyWithError('Network failure');
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).toBe('401: Unauthorized');
expect(response.data).toBe(undefined);
response = await fetch.fetch(host_url + '/error');
expect(response.error).toContain('Fetch error:');
expect(response.data).toBe(undefined);
});