UNPKG

@publichealthengland/uk-covid19

Version:

This is a JavaScript SDK for the COVID-19 API, as published by Public Health England on Coronavirus (COVID-19) in the UK dashboard.

191 lines (127 loc) 5.3 kB
import { describe, it } from "mocha"; import assert from "assert"; import Cov19API from "../lib"; import type { StructureType, FiltersType } from "../lib/UKCovid19"; const queryFilters: FiltersType = [ 'areaType=ltla', 'areaName=adur' ]; const queryStructure: StructureType = { "name": "areaName", "date": "date", "newCases": "newCasesBySpecimenDate" }; describe("Cov19API", () => { const api = new Cov19API({filters: queryFilters, structure: queryStructure}); describe('#apiParams', () => { it('apiParams integrity', () => { const apiParams = { "filters": queryFilters.join(";"), "structure": JSON.stringify(queryStructure), } assert.deepEqual(api.apiParams, apiParams); }); }); describe('#lastUpdate', () => { it('lastUpdate integrity', async () => { const timestamp = await api.lastUpdate(); assert.strictEqual(timestamp.indexOf("Z") > -1, true, timestamp) }); }); describe('#head', () => { it('head', async () => { const data = await api.head(); assert.strictEqual("content-location" in data, true); }); }); describe('#getJSON', () => { it('JSON integrity', async () => { const jsonData = await api.getJSON(); assert.strictEqual(typeof jsonData, "object"); assert.strictEqual("data" in jsonData, true); assert.strictEqual("lastUpdate" in jsonData, true); assert.strictEqual("length" in jsonData, true); assert.strictEqual("totalPages" in jsonData, true); const lastUpdate = await api.lastUpdate(); assert.strictEqual( jsonData.lastUpdate, lastUpdate, `${jsonData.lastUpdate} !== ${lastUpdate}` ); assert.equal(jsonData.totalPages, 1); assert.strictEqual(jsonData.data.length > 10, true); // Test keys for (const key in queryStructure) { if (!queryStructure.hasOwnProperty(key)) continue; assert.strictEqual( key in jsonData.data[0], true, `${key} not found.` ); } }); }); describe('#getCSV', async () => { it('CSV integrity', async () => { const csvData = await api.getCSV(); assert.strictEqual(typeof csvData, "string"); assert.strictEqual( csvData.split("\n").length > 10, true ); assert.strictEqual( csvData .split("\n")[0] .trim(), Object.keys(queryStructure) .join(","), ); }); }); describe('#latestBy', async () => { it('latestBy integrity', async () => { const apiLatestBy = new Cov19API({ filters: queryFilters, structure: queryStructure, latestBy: "newCasesBySpecimenDate" }); const jsonLatestData = await apiLatestBy.getJSON(); assert.strictEqual(typeof jsonLatestData, "object"); assert.strictEqual("data" in jsonLatestData, true); assert.strictEqual("lastUpdate" in jsonLatestData, true); assert.strictEqual("length" in jsonLatestData, true); assert.strictEqual("totalPages" in jsonLatestData, true); assert.strictEqual(jsonLatestData.lastUpdate, await api.lastUpdate()); assert.equal(jsonLatestData.totalPages, 1); assert.equal(jsonLatestData.data.length, 1); for (const key in queryStructure) { if (!queryStructure.hasOwnProperty(key)) continue; assert.strictEqual( key in jsonLatestData.data[0], true, `${key} not found.` ); } }); it('response lengths are equal', async () => { const csvData = await api.getCSV(); const jsonData = await api.getJSON(); const csvHeaderLength = 1; assert.equal( jsonData.data.length, csvData .trim() .split("\n") .slice(csvHeaderLength) .length ) }); }); describe('#options', async () => { it('options integrity', async () => { const options = await Cov19API.options(); assert.strictEqual("servers" in options, true); assert.strictEqual(options.servers[0].url, Cov19API.endpoint) }); }); });