UNPKG

identify-media

Version:

Analyse file path and content to make search criteria for media APIs

211 lines (198 loc) 8.62 kB
import { AnalysedMovie, AnalysedTVShow, analyseFilePath, isAnalysedMovie, isAnalysedTVShow, isExtras, isSameRelease, isSample } from "../../src"; describe('Analyse file path', () => { describe('should identify types', () => { test('should identify movie', () => { expect(isAnalysedMovie({type: 'movie', name: '', year: 0})).toBeTruthy(); }); test('should not identify string as movie', () => { expect(isAnalysedMovie('test')).toBeFalsy(); }); test('should not identify tv show as movie', () => { expect(isAnalysedMovie({type: 'tv', name: ''})).toBeFalsy(); }); test('should identify tv show', () => { expect(isAnalysedTVShow({type: 'tv', name: ''})).toBeTruthy(); }) test('should not identify string as tv show', () => { expect(isAnalysedTVShow('test')).toBeFalsy(); }); test('should not identify movie as tv show', () => { expect(isAnalysedTVShow({type: 'movie', year: 0, name: ''})).toBeFalsy(); }); }); describe('Path to Media', () => { test.each([ ['', ''], ['series x/season 3/file.mpg', {type: 'tv', name: 'series x', season: 3}], ['series x (2020)/season 3/file.mpg', {type: 'tv', name: 'series x', season: 3, year: 2020}], ['series x (2020)/season 3/e3 the episode.mpg', { type: 'tv', name: 'series x', season: 3, episodes: [3], year: 2020 }], ['series x (2020)/season 3/e3+e4 the double episode.mpg', { type: 'tv', name: 'series x', season: 3, episodes: [3, 4], year: 2020 }], ['series x/season 3 (2020)/file.mpg', {type: 'tv', name: 'series x', season: 3, year: 2020}], ['series x/season 3/e23 (2020).mpg', {type: 'tv', name: 'series x', season: 3, episodes: [23], year: 2020}], ['series x season 3 (2020)/e123.mpg', {type: 'tv', name: 'series x', season: 3, episodes: [123], year: 2020}], ['filename (2020)', {type: 'movie', name: 'filename', year: 2020}], ['nothing.mp4', 'nothing'], ['(noir) title (some film from the {real} world).mpg', 'title'], ['E3.mpg', {type: 'tv', name: 'E3', episodes: [3]}], ['trip (2020) E13.mpg', {type: 'tv', name: 'trip', episodes: [13], year: 2020}], ['movie (2020)/file.mp4', {type: 'movie', name: 'movie', year: 2020}], ['2020/file.mp4', {type: 'movie', name: 'file', year: 2020}], ['series/2020/E13.mp4', {type: 'tv', name: 'series', year: 2020, episodes: [13]}], ['series (2020)/E13.mp4', {type: 'tv', name: 'series', year: 2020, episodes: [13]}], ['series/E12.mov', {type: 'tv', name: 'series', episodes: [12]}], ['star trek/star trek S07E21 world.mpg', {type: 'tv', name: 'star trek', season: 7, episodes: [21]}], ['star trek/star trek (1982) S07E21 world.mpg', { type: 'tv', name: 'star trek', season: 7, episodes: [21], year: 1982 }], ['test-series S02E03+E04 - double episode.mpg', { type: 'tv', name: 'test series', season: 2, episodes: [3, 4] }], ['Perry Mason/season 1/E13.mpg', {type: 'tv', name: 'Perry Mason', season: 1, episodes: [13]}], ['Perry Mason (2020) complete season 2/E7.mp3', { type: 'tv', name: 'Perry Mason', season: 2, episodes: [7], year: 2020 }], ['/Downloads/Westworld.S02.Complete.720p.WEB-DL.x264.[MP4].[5.3GB].[Season.2.Full]/[TorrentCouch.com].Westworld.S02E01.720p.WEB-DL.x264.mp4', { episodes: [1], name: 'Westworld', season: 2, type: 'tv' }], ['/Downloads/Magnum.P.I.2018.S01.COMPLETE.720p.AMZN.WEBRip.x264-GalaxyTV[TGx]/Magnum.P.I.2018.S01E18.720p.AMZN.WEBRip.x264-GalaxyTV.mkv', { type: 'tv', name: 'Magnum P I', season: 1, episodes: [18], year: 2018 }], ['/Downloads/Alfred Hitchcock Presents Season 4/S04E02 Don\'t Interrupt.avi', { episodes: [2], name: 'Alfred Hitchcock Presents', season: 4, type: 'tv' }], ['/Downloads/Lucifer - Season 5 (2020) [1080p]/Lucifer - S05E05 - Detective Amenadiel.mkv', { type: 'tv', name: 'Lucifer', episodes: [5], season: 5, year: 2020 }], ['/Downloads/MACGYVER - Complete Season 3 S03 (2018-2019) - 720p AMZN Web-DL x264/MACGYVER - S03 E04 - Guts, Fuel, Hope (720p - AMZN Web-DL).mp4', { type: 'tv', name: 'MACGYVER', season: 3, episodes: [4], year: 2018 }], ['/Downloads/Monk S01-S08 (2011-)/Monk S01 (360p re-webrip)/Monk S01E11 Mr. Monk and the Earthquake.mp4', { type: 'tv', name: 'Monk', season: 1, episodes: [11], year: 2011 }], ['/Downloads/Perry Mason/Season 1/Perry.Mason.106.The.Case.of.The.Silent.Partner.(DVDRip).avi', { type: 'tv', name: 'Perry Mason', season: 1, episodes: [6] }], ['/Unsorted movies/Dragnet.(1967).Complete-Z0DiAC99/Season 1/Dragnet-S01E01-The.LSD.Story.avi', { type: 'tv', name: 'Dragnet', season: 1, episodes: [1], year: 1967 }], ])('should parse %s to %s', (path, result) => { expect(analyseFilePath(path)).toEqual(result); }); }); describe('Is Extras', () => { test.each([ ['/', false], ['/Movie name/Movie Extras/test.mkv', true], ['/Movie name/Featurettes/test.mkv', true], ['/Movie name/Bonus/test.mkv', true], ['/Movie name/Movie name - Trailer.mkv', true], ])('%s is extra? %s', (input, result) => { expect(isExtras(input)).toBe(result); }); }); describe('Is sample', () => { test.each([ ['/', false], ['/movie with samples/movie.mpg', false], ['/movie with samples/samples/movie.mpg', true], ['/movie with samples/movie.sample.mpg', true], ['/some movie/!sample.mpg', true], ['/some movie/sample.mpg', true], ])('%s is sample? %s', (input, result) => { expect(isSample(input)).toBe(result); }); }); describe('Is same release', () => { const testTVShow: AnalysedTVShow = { type: 'tv', name: 'test' } const testMovie: AnalysedMovie = { type: 'movie', name: 'test', year: 2020 } test.each([ ['test', 'test', true], ['test', testTVShow, false], ['test', testMovie, false], [testTVShow, 'test', false], [testMovie, 'test', false], [testMovie, testTVShow, false], [testTVShow, testMovie, false], [{...testTVShow, season: 3, episode: 1}, {...testTVShow, season: 1, episode: 3}, true], [testTVShow, {...testTVShow, name: testTVShow.name.toUpperCase()}, true], [{...testTVShow, season: 3, episode: 1, year: 1956}, { ...testTVShow, season: 1, episode: 3, year: 2020 }, false], [{...testTVShow, season: 3, episode: 1, year: 1956}, {...testTVShow, season: 1, episode: 3}, false], [{...testTVShow, season: 3, episode: 1}, {...testTVShow, season: 1, episode: 3, year: 1956}, false], [testMovie, testMovie, true], [testMovie, {...testMovie, name: testMovie.name.toUpperCase()}, true], [testMovie, {...testMovie, year: 2022}, false], ])('%s equals %s ? %s', (a, b, result) => { expect(isSameRelease(a, b)).toBe(result); }); }); });