import {describe, expect, it, jest, test} from '@jest/globals'; import * as path from 'path'; import * as githubstatus from '../src/githubstatus'; import {Page, Status} from '../src/status'; import {Summary} from '../src/summary'; import fs from 'fs'; describe('githubstatus', () => { it('returns GitHub Status (status)', async () => { const status = await githubstatus.status(); expect(status?.indicator).not.toEqual(''); }); it('returns GitHub Status (summary)', async () => { const summary = await githubstatus.summary(); expect(summary?.status.indicator).not.toEqual(''); expect(summary?.components?.length).toBeGreaterThan(0); }); }); describe('status', () => { test.each([ [ 'data-status.json', { description: 'Minor Service Outage', indicator: 'minor' } as Status, { id: 'kctbh9vrtdwd', name: 'GitHub', url: 'https://www.githubstatus.com', time_zone: 'Etc/UTC', updated_at: '2020-05-22T20:50:20.457Z' } as Page ], [ 'data-status-2.json', { description: 'Service Under Maintenance', indicator: 'maintenance' } as Status, { id: 'kctbh9vrtdwd', name: 'GitHub', url: 'https://www.githubstatus.com', time_zone: 'Etc/UTC', updated_at: '2020-12-17T00:54:37.709Z' } as Page ] ])('given %p', async (file, expStatus, expPage) => { jest.spyOn(githubstatus, 'status').mockImplementation((): Promise<Status> => { return <Promise<Status>>(JSON.parse( fs.readFileSync(path.join(__dirname, 'fixtures', file), { encoding: 'utf8', flag: 'r' }) ) as unknown); }); const status = await githubstatus.status(); expect(status?.status).toEqual(expStatus); expect(status?.page).toEqual(expPage); }); }); describe('summary', () => { test.each([['data-summary.json'], ['data-summary-2.json']])('given %p', async file => { jest.spyOn(githubstatus, 'summary').mockImplementation((): Promise<Summary> => { return <Promise<Summary>>(JSON.parse( fs.readFileSync(path.join(__dirname, 'fixtures', file), { encoding: 'utf8', flag: 'r' }) ) as unknown); }); const summary = await githubstatus.summary(); expect(summary?.status.indicator).not.toEqual(''); expect(summary?.components?.length).toBeGreaterThan(0); }); });