1- import { enableFetchMocks } from 'jest-fetch-mock' ;
2- import fetchMock from 'jest-fetch-mock' ;
3- import { OMDbAPI } from '../api/apis/OMDbAPI' ;
4- import MediaDbPlugin from '../main' ;
1+ import fetchMock , { enableFetchMocks } from 'jest-fetch-mock' ;
52import { MediaDbPluginSettings } from 'src/settings/Settings' ;
6- import { MALAPI } from '../api/apis/MALAPI' ;
73import { LocGovAPI } from '../api/apis/LocGovAPI' ;
4+ import { MALAPI } from '../api/apis/MALAPI' ;
85import { MusicBrainzAPI } from '../api/apis/MusicBrainzAPI' ;
6+ import { OMDbAPI } from '../api/apis/OMDbAPI' ;
97import { SteamAPI } from '../api/apis/SteamAPI' ;
108import { WikipediaAPI } from '../api/apis/WikipediaAPI' ;
9+ import MediaDbPlugin from '../main' ;
10+ import { setMALResponseMock , setMusicBrainzResponseMock , setOMDbResponseMock , setSteamResponseMock , setWikipediaResponseMock } from "./mockHelpers" ;
11+ import MALMockMovie from "./ResponseMocks/MALMockMovie.json" ;
12+ import MusicBrainzResponseMock from "./ResponseMocks/MusicBrainzMockResponse.json" ;
13+ import OMDBMockMovie from "./ResponseMocks/OMDBMockResponse.json" ;
14+ import SteamAPIResponseMock from "./ResponseMocks/SteamAPIMockResponse.json" ;
15+ import WikipediaMockResponse from "./ResponseMocks/WikipediaMockResponse.json" ;
1116
12- enableFetchMocks ( )
13- let apiMock : OMDbAPI | MALAPI | LocGovAPI | MusicBrainzAPI | SteamAPI | WikipediaAPI ;
14- let api : typeof OMDbAPI | typeof MALAPI | typeof LocGovAPI | typeof MusicBrainzAPI | typeof SteamAPI | typeof WikipediaAPI ;
17+ enableFetchMocks ( ) ;
18+ export let apiMock : OMDbAPI | MALAPI | LocGovAPI | MusicBrainzAPI | SteamAPI | WikipediaAPI ;
1519
1620describe . each (
1721 [
@@ -24,44 +28,83 @@ describe.each(
2428 ]
2529) ( '$name.name' , ( { name : parameterizedApi } ) => {
2630 beforeAll ( ( ) => {
27- api = parameterizedApi ;
28- let settingsMock : MediaDbPluginSettings = {
29- } as MediaDbPluginSettings ;
31+ let settingsMock : MediaDbPluginSettings = { } as MediaDbPluginSettings ;
3032 let pluginMock = { } as MediaDbPlugin ;
3133 pluginMock . settings = settingsMock ;
32- // TODO: add fake API key
34+ // TODO: add fake API key?
3335 apiMock = new parameterizedApi ( pluginMock ) ;
3436 } )
3537
3638 beforeEach ( ( ) => {
3739 fetchMock . resetMocks ( ) ;
3840 } )
3941
40- test ( "searchByTitle behavior when given garbage data" , async ( ) => {
42+ test ( "searchByTitle behavior when API returns garbage data" , async ( ) => {
4143 const garbageResponse = JSON . stringify ( {
4244 data : "string"
4345 } ) ;
4446 fetchMock . mockResponseOnce ( garbageResponse )
45- let res ;
46- // LocGovAPI throws an error because not implemented
47- if ( parameterizedApi . name === "LocGovAPI" ) {
48- await expect ( apiMock . searchByTitle ( "sample" ) ) . rejects . toThrow ( ) ;
49-
50- } else {
51- res = await apiMock . searchByTitle ( "sample" ) ;
52- expect ( res ) . toEqual ( [ ] ) ;
53- }
47+ await expect ( apiMock . searchByTitle ( "sample" ) ) . resolves . toEqual ( [ ] ) ;
48+ // }
5449 expect ( fetch ) . toHaveBeenCalledTimes ( 1 ) ;
5550 } ) ;
5651
57- test ( "searchByTitle when fetch returns 401" , async ( ) => {
52+ test ( "searchByTitle behavior when requestUrl/ fetch returns 401" , async ( ) => {
5853 let sampleResponse = {
5954 data : "string"
6055 } ;
6156 fetchMock . mockResponse ( JSON . stringify ( sampleResponse ) , { status : 401 } ) ;
6257 // TODO: Check API name and fix message
6358 // TODO: Externalize string
64- await expect ( async ( ) => await apiMock . searchByTitle ( "sample" ) ) . rejects . toThrow ( ) ;
59+ await expect ( apiMock . searchByTitle ( "sample" ) ) . rejects . toThrow ( `MDB | Received status code ${ 401 } from an API.` ) ;
60+ expect ( fetchMock ) . toHaveBeenCalledTimes ( 1 ) ;
61+ } ) ;
62+
63+ test ( "searchByTitle behavior when requestUrl/fetch returns 403" , async ( ) => {
64+ let sampleResponse = {
65+ data : "string"
66+ } ;
67+ fetchMock . mockResponse ( JSON . stringify ( sampleResponse ) , { status : 403 } ) ;
68+ // TODO: Check API name and fix message
69+ // TODO: Externalize string/import?
70+ await expect ( apiMock . searchByTitle ( "sample" ) ) . rejects . toThrow ( `MDB | Received status code ${ 403 } from an API.` ) ;
71+ expect ( fetchMock ) . toHaveBeenCalledTimes ( 1 ) ;
72+ } ) ;
73+
74+ test ( "searchByTitle behavior when requestUrl/fetch returns 200" , async ( ) => {
75+ let sampleResponse ;
76+ let ret ;
77+ switch ( parameterizedApi ) {
78+ case OMDbAPI :
79+ ret = setOMDbResponseMock ( ) ;
80+ sampleResponse = OMDBMockMovie ;
81+ break ;
82+ case WikipediaAPI :
83+ ret = setWikipediaResponseMock ( ) ;
84+ sampleResponse = WikipediaMockResponse ;
85+ break ;
86+ case MALAPI :
87+ // TODO: MAL needs more tests for different types of content
88+ ret = setMALResponseMock ( ) ;
89+ sampleResponse = MALMockMovie ;
90+ case LocGovAPI :
91+ // TODO: Add soon
92+ break ;
93+ case SteamAPI :
94+ sampleResponse = SteamAPIResponseMock ;
95+ ret = setSteamResponseMock ( ) ;
96+ break ;
97+ case MusicBrainzAPI :
98+ sampleResponse = MusicBrainzResponseMock ;
99+ ret = setMusicBrainzResponseMock ( ) ;
100+ break ;
101+ default :
102+ throw Error ( ) ;
103+ }
104+ fetchMock . mockResponse ( JSON . stringify ( sampleResponse ) , { status : 200 } ) ;
105+ // TODO: Check API name and fix message
106+ // TODO: Externalize string
107+ await expect ( apiMock . searchByTitle ( "Hooking Season Playtest" ) ) . resolves . toEqual ( ret ) ;
65108 expect ( fetchMock ) . toHaveBeenCalledTimes ( 1 ) ;
66109 } ) ;
67110} )
0 commit comments