identify-media
Version:
Analyse file path and content to make search criteria for media APIs
211 lines (198 loc) • 8.62 kB
text/typescript
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);
});
});
});