Add language endpoint to developer APIs (#41)

* Added languages endpoint and its tests
This commit is contained in:
David
2021-08-30 21:35:22 +02:00
committed by GitHub
parent 1b6c324560
commit 870ec2db64
11 changed files with 360 additions and 74 deletions

View File

@@ -1,4 +1,5 @@
import { replaceBoth, retrieveFiltered, CheckType, LangType } from "@utils/language";
import faker from "faker";
import { replaceBoth, retrieveFromType, getName, CheckType, LangType } from "@utils/language";
import { languages, exceptions, mappings } from "@utils/languages.json";
describe("replaceBoth", () => {
@@ -34,14 +35,34 @@ describe("replaceBoth", () => {
});
});
describe("retrieveFiltered", () => {
const filteredEntries = (langType: LangType) => (
Object.entries(languages).filter(([code]) => !Object.keys(exceptions[langType]).includes(code))
describe("retrieveFromType", () => {
const checkExceptions = (langType: LangType) => (
retrieveFromType(langType).forEach(([code]) => !Object.keys(exceptions).includes(code))
);
it("filters by exceptions", () => {
const { sourceLangs, targetLangs } = retrieveFiltered();
expect(sourceLangs).toStrictEqual(filteredEntries("source"));
expect(targetLangs).toStrictEqual(filteredEntries("target"));
it("returns full list on empty type", () => {
expect(retrieveFromType()).toStrictEqual(Object.entries(languages));
});
it("filters source exceptions", () => {
checkExceptions("source");
});
it("filters target exceptions", () => {
checkExceptions("target");
});
});
describe("getName", () => {
it("returns name from valid code", () => {
const langEntries = Object.entries(languages);
const randomEntry = faker.random.arrayElement(langEntries);
const [code, name] = randomEntry;
expect(getName(code)).toEqual(name);
});
it("returns null on wrong code", () => {
const randomCode = faker.random.words();
expect(getName(randomCode)).toBeNull();
});
});

View File

@@ -24,14 +24,14 @@ describe("googleScrape", () => {
resolveFetchWith({ status });
const res = await googleScrape(source, target, query);
expect(res?.errorMsg).toMatch(/retrieving/);
expect("errorMsg" in res && res.errorMsg).toMatch(/retrieving/);
});
it("returns correct message on network error", async () => {
fetchMock.mockRejectOnce();
const res = await googleScrape(source, target, query);
expect(res?.errorMsg).toMatch(/retrieving/);
expect("errorMsg" in res && res.errorMsg).toMatch(/retrieving/);
});
it("returns correct message on parsing wrong class", async () => {
@@ -41,7 +41,7 @@ describe("googleScrape", () => {
resolveFetchWith(html);
const res = await googleScrape(source, target, query);
expect(res?.errorMsg).toMatch(/parsing/);
expect("errorMsg" in res && res.errorMsg).toMatch(/parsing/);
});
});