test: add generic test suite implementation
This commit is contained in:
parent
002f28a02b
commit
801991213d
1 changed files with 67 additions and 24 deletions
|
|
@ -1,17 +1,21 @@
|
||||||
import { enableFetchMocks } from 'jest-fetch-mock';
|
import fetchMock, { enableFetchMocks } from 'jest-fetch-mock';
|
||||||
import fetchMock from 'jest-fetch-mock';
|
|
||||||
import { OMDbAPI } from '../api/apis/OMDbAPI';
|
|
||||||
import MediaDbPlugin from '../main';
|
|
||||||
import { MediaDbPluginSettings } from 'src/settings/Settings';
|
import { MediaDbPluginSettings } from 'src/settings/Settings';
|
||||||
import { MALAPI } from '../api/apis/MALAPI';
|
|
||||||
import { LocGovAPI } from '../api/apis/LocGovAPI';
|
import { LocGovAPI } from '../api/apis/LocGovAPI';
|
||||||
|
import { MALAPI } from '../api/apis/MALAPI';
|
||||||
import { MusicBrainzAPI } from '../api/apis/MusicBrainzAPI';
|
import { MusicBrainzAPI } from '../api/apis/MusicBrainzAPI';
|
||||||
|
import { OMDbAPI } from '../api/apis/OMDbAPI';
|
||||||
import { SteamAPI } from '../api/apis/SteamAPI';
|
import { SteamAPI } from '../api/apis/SteamAPI';
|
||||||
import { WikipediaAPI } from '../api/apis/WikipediaAPI';
|
import { WikipediaAPI } from '../api/apis/WikipediaAPI';
|
||||||
|
import MediaDbPlugin from '../main';
|
||||||
|
import { setMALResponseMock, setMusicBrainzResponseMock, setOMDbResponseMock, setSteamResponseMock, setWikipediaResponseMock } from "./mockHelpers";
|
||||||
|
import MALMockMovie from "./ResponseMocks/MALMockMovie.json";
|
||||||
|
import MusicBrainzResponseMock from "./ResponseMocks/MusicBrainzMockResponse.json";
|
||||||
|
import OMDBMockMovie from "./ResponseMocks/OMDBMockResponse.json";
|
||||||
|
import SteamAPIResponseMock from "./ResponseMocks/SteamAPIMockResponse.json";
|
||||||
|
import WikipediaMockResponse from "./ResponseMocks/WikipediaMockResponse.json";
|
||||||
|
|
||||||
enableFetchMocks()
|
enableFetchMocks();
|
||||||
let apiMock: OMDbAPI | MALAPI | LocGovAPI | MusicBrainzAPI | SteamAPI | WikipediaAPI;
|
export let apiMock: OMDbAPI | MALAPI | LocGovAPI | MusicBrainzAPI | SteamAPI | WikipediaAPI;
|
||||||
let api: typeof OMDbAPI | typeof MALAPI | typeof LocGovAPI | typeof MusicBrainzAPI | typeof SteamAPI | typeof WikipediaAPI;
|
|
||||||
|
|
||||||
describe.each(
|
describe.each(
|
||||||
[
|
[
|
||||||
|
|
@ -24,12 +28,10 @@ describe.each(
|
||||||
]
|
]
|
||||||
)('$name.name', ({ name: parameterizedApi }) => {
|
)('$name.name', ({ name: parameterizedApi }) => {
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
api = parameterizedApi;
|
let settingsMock: MediaDbPluginSettings = {} as MediaDbPluginSettings;
|
||||||
let settingsMock: MediaDbPluginSettings = {
|
|
||||||
} as MediaDbPluginSettings;
|
|
||||||
let pluginMock = {} as MediaDbPlugin;
|
let pluginMock = {} as MediaDbPlugin;
|
||||||
pluginMock.settings = settingsMock;
|
pluginMock.settings = settingsMock;
|
||||||
// TODO: add fake API key
|
// TODO: add fake API key?
|
||||||
apiMock = new parameterizedApi(pluginMock);
|
apiMock = new parameterizedApi(pluginMock);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -37,31 +39,72 @@ describe.each(
|
||||||
fetchMock.resetMocks();
|
fetchMock.resetMocks();
|
||||||
})
|
})
|
||||||
|
|
||||||
test("searchByTitle behavior when given garbage data", async () => {
|
test("searchByTitle behavior when API returns garbage data", async () => {
|
||||||
const garbageResponse = JSON.stringify({
|
const garbageResponse = JSON.stringify({
|
||||||
data: "string"
|
data: "string"
|
||||||
});
|
});
|
||||||
fetchMock.mockResponseOnce(garbageResponse)
|
fetchMock.mockResponseOnce(garbageResponse)
|
||||||
let res;
|
await expect(apiMock.searchByTitle("sample")).resolves.toEqual([]);
|
||||||
// LocGovAPI throws an error because not implemented
|
// }
|
||||||
if (parameterizedApi.name === "LocGovAPI") {
|
|
||||||
await expect(apiMock.searchByTitle("sample")).rejects.toThrow();
|
|
||||||
|
|
||||||
} else {
|
|
||||||
res = await apiMock.searchByTitle("sample");
|
|
||||||
expect(res).toEqual([]);
|
|
||||||
}
|
|
||||||
expect(fetch).toHaveBeenCalledTimes(1);
|
expect(fetch).toHaveBeenCalledTimes(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("searchByTitle when fetch returns 401", async () => {
|
test("searchByTitle behavior when requestUrl/fetch returns 401", async () => {
|
||||||
let sampleResponse = {
|
let sampleResponse = {
|
||||||
data: "string"
|
data: "string"
|
||||||
};
|
};
|
||||||
fetchMock.mockResponse(JSON.stringify(sampleResponse), { status: 401 });
|
fetchMock.mockResponse(JSON.stringify(sampleResponse), { status: 401 });
|
||||||
// TODO: Check API name and fix message
|
// TODO: Check API name and fix message
|
||||||
// TODO: Externalize string
|
// TODO: Externalize string
|
||||||
await expect(async () => await apiMock.searchByTitle("sample")).rejects.toThrow();
|
await expect(apiMock.searchByTitle("sample")).rejects.toThrow(`MDB | Received status code ${401} from an API.`);
|
||||||
|
expect(fetchMock).toHaveBeenCalledTimes(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("searchByTitle behavior when requestUrl/fetch returns 403", async () => {
|
||||||
|
let sampleResponse = {
|
||||||
|
data: "string"
|
||||||
|
};
|
||||||
|
fetchMock.mockResponse(JSON.stringify(sampleResponse), { status: 403 });
|
||||||
|
// TODO: Check API name and fix message
|
||||||
|
// TODO: Externalize string/import?
|
||||||
|
await expect(apiMock.searchByTitle("sample")).rejects.toThrow(`MDB | Received status code ${403} from an API.`);
|
||||||
|
expect(fetchMock).toHaveBeenCalledTimes(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("searchByTitle behavior when requestUrl/fetch returns 200", async () => {
|
||||||
|
let sampleResponse;
|
||||||
|
let ret;
|
||||||
|
switch (parameterizedApi) {
|
||||||
|
case OMDbAPI:
|
||||||
|
ret = setOMDbResponseMock();
|
||||||
|
sampleResponse = OMDBMockMovie;
|
||||||
|
break;
|
||||||
|
case WikipediaAPI:
|
||||||
|
ret = setWikipediaResponseMock();
|
||||||
|
sampleResponse = WikipediaMockResponse;
|
||||||
|
break;
|
||||||
|
case MALAPI:
|
||||||
|
// TODO: MAL needs more tests for different types of content
|
||||||
|
ret = setMALResponseMock();
|
||||||
|
sampleResponse = MALMockMovie;
|
||||||
|
case LocGovAPI:
|
||||||
|
// TODO: Add soon
|
||||||
|
break;
|
||||||
|
case SteamAPI:
|
||||||
|
sampleResponse = SteamAPIResponseMock;
|
||||||
|
ret = setSteamResponseMock();
|
||||||
|
break;
|
||||||
|
case MusicBrainzAPI:
|
||||||
|
sampleResponse = MusicBrainzResponseMock;
|
||||||
|
ret = setMusicBrainzResponseMock();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw Error();
|
||||||
|
}
|
||||||
|
fetchMock.mockResponse(JSON.stringify(sampleResponse), { status: 200 });
|
||||||
|
// TODO: Check API name and fix message
|
||||||
|
// TODO: Externalize string
|
||||||
|
await expect(apiMock.searchByTitle("Hooking Season Playtest")).resolves.toEqual(ret);
|
||||||
expect(fetchMock).toHaveBeenCalledTimes(1);
|
expect(fetchMock).toHaveBeenCalledTimes(1);
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
Loading…
Add table
Add a link
Reference in a new issue