identify-media
Version:
Analyse file path and content to make search criteria for media APIs
100 lines (93 loc) • 3.56 kB
text/typescript
import {
AnalysedMedia,
AnalysedMovie,
AnalysedTVShow,
isSameOmdbQuery,
mapOmdbQuery, mapOmdbResult,
OmdbSearchQuery, OmdbSearchResponse
} from "../../../src";
describe('Mapper for omdb', () => {
const analysedTVShow: AnalysedTVShow = {type: 'tv', name: 'test tv series', season: 1, episodes: [3, 2], year: undefined};
const analysedMovie: AnalysedMovie = {type: 'movie', name: 'movie name', year: 2020};
test.each([
['test', {s: 'test'}],
[analysedTVShow, {s: 'test tv series', type: 'tv'}],
[analysedMovie, {s: 'movie name', type: 'movie', y: '2020'}],
])('should map %s to %s', (input, result) => {
expect(mapOmdbQuery(input)).toEqual(result);
});
test('should throw on bad input', () => {
expect(() => {mapOmdbQuery(3 as any as AnalysedMedia)}).toThrow('media of unknown type: 3');
});
test.each([
[{s: 'query'} as OmdbSearchQuery, {s: 'query'} as OmdbSearchQuery, true],
[{s: 'query'} as OmdbSearchQuery, {s: 'query2'} as OmdbSearchQuery, false],
[{s: 'query', type: 'movie'} as OmdbSearchQuery, {s: 'query', type: 'movie'} as OmdbSearchQuery, true],
[{s: 'query', y: '2020'} as OmdbSearchQuery, {s: 'query'} as OmdbSearchQuery, false],
[{s: 'query', y: '2020'} as OmdbSearchQuery, {s: 'query', y: '2020'} as OmdbSearchQuery, true],
[{s: 'query', type: 'movie'} as OmdbSearchQuery, {s: 'query', type: 'tv'} as OmdbSearchQuery, false],
])('%s and %s is equal %s', (a, b, result) => {
expect(isSameOmdbQuery(a, b)).toBe(result);
})
test.each([
[{
Search: [{
Type: 'movie',
Title: 'Movie title',
imdbID: 'movieImdb',
Released: '01 Jan 2015',
Plot: 'plot',
Poster: 'poster',
}, {
Type: 'series',
Title: 'Series title',
imdbID: 'seriesImdb',
Released: '21 Jun 2020',
Plot: 'plot',
Poster: ''
}, {
Type: 'series',
Title: 'Other series title',
imdbID: 'otherSeriesImdb',
Plot: 'plot',
Poster: ''
}]
} as OmdbSearchResponse, [
{
imdbId: 'movieImdb',
title: 'Movie title',
type: 'movie',
release: '2015-01-01',
mediaInfo: {
plot: 'plot',
images: {'omdb-poster': 'poster'},
}
}, {
firstAirDate: '2020-06-21',
imdbId: 'seriesImdb',
name: 'Series title',
type: 'tv',
mediaInfo: {
plot: 'plot',
images: {},
}
}, {
imdbId: 'otherSeriesImdb',
name: 'Other series title',
type: 'tv',
mediaInfo: {
plot: 'plot',
images: {},
}
}
]]
])('Should map %s to %s', (input, result) => {
expect(mapOmdbResult(input)).toEqual(result);
});
test('Should throw on error', () => {
expect(() => mapOmdbResult({Error: 'This went badly'})).toThrowError('This went badly');
});
test('Should throw on empty', () => {
expect(() => mapOmdbResult({})).toThrowError('No search result');
})
});