2023-01-05 15:28:24 +03:00
// npm run channels:parse -- --config=./sites/plex.tv/plex.tv.config.js --output=./sites/plex.tv/plex.tv.channels.xml
// npx epg-grabber --config=sites/plex.tv/plex.tv.config.js --channels=sites/plex.tv/plex.tv.channels.xml --output=guide.xml --days=2
2022-11-16 12:32:19 +03:00
const { parser , url , request } = require ( './plex.tv.config.js' )
const fs = require ( 'fs' )
const path = require ( 'path' )
const axios = require ( 'axios' )
const dayjs = require ( 'dayjs' )
const utc = require ( 'dayjs/plugin/utc' )
const customParseFormat = require ( 'dayjs/plugin/customParseFormat' )
dayjs . extend ( customParseFormat )
dayjs . extend ( utc )
jest . mock ( 'axios' )
const date = dayjs . utc ( '2022-11-15' , 'YYYY-MM-DD' ) . startOf ( 'd' )
const channel = {
site _id : '5e20b730f2f8d5003d739db7-5fc705eb052f6f002ef46057' ,
xmltv _id : 'IFCFilmsPicks.us'
}
it ( 'can generate valid url' , ( ) => {
expect ( url ( { channel , date } ) ) . toBe (
'https://epg.provider.plex.tv/grid?channelGridKey=5fc705eb052f6f002ef46057&date=2022-11-15'
)
} )
it ( 'can generate valid request headers' , ( ) => {
expect ( request . headers ) . toMatchObject ( {
'x-plex-provider-version' : '5.1'
} )
} )
it ( 'can parse response' , ( ) => {
const content = fs . readFileSync ( path . resolve ( _ _dirname , '__data__/content.json' ) )
let results = parser ( { content } )
results = results . map ( p => {
p . start = p . start . toJSON ( )
p . stop = p . stop . toJSON ( )
return p
} )
2022-11-18 14:34:05 +03:00
expect ( results . length ) . toBe ( 14 )
2022-11-16 12:32:19 +03:00
expect ( results [ 0 ] ) . toMatchObject ( {
start : '2022-11-14T23:04:00.000Z' ,
stop : '2022-11-15T00:47:00.000Z' ,
title : 'Bound by Flesh' ,
description :
'Conjoined twins Daisy and Violet Hilton were born in 1908, then were sold to a carnival sideshow as babies. They became huge stars of Vaudeville but never earned a penny until they sued for freedom in 1936.' ,
icon : 'https://metadata-static.plex.tv/4/gracenote/40b523ad60464f8232f93f861c161384.jpg' ,
categories : [ 'Documentary' , 'Movies' ]
} )
2022-11-18 14:34:05 +03:00
expect ( results [ 10 ] ) . toMatchObject ( {
start : '2022-11-15T16:45:00.000Z' ,
stop : '2022-11-15T18:47:00.000Z' ,
title : 'Antiviral' ,
description :
"Syd has to unravel the mystery surrounding Hannah's death before a virus kills him." ,
icon : 'https://metadata-static.plex.tv/5/gracenote/5ca8432a2e8fb2e8f8157ae142164ef7.jpg' ,
categories : [ 'Horror' , 'Science fiction' , 'Thriller' , 'Movies' ]
} )
expect ( results [ 11 ] ) . toMatchObject ( {
start : '2022-11-15T18:47:00.000Z' ,
stop : '2022-11-15T20:36:00.000Z' ,
title : 'Cold Weather' ,
description :
'Armed with a few clues and an in-depth knowledge of Sherlock Holmes lore, an ice-factory worker (Cris Lankenau) leads his sister and a co-worker on a search for his missing former lover.' ,
icon : 'https://metadata-static.plex.tv/5/gracenote/5150185f3188dbefd10b5d388e8ba115.jpg' ,
categories : [ 'Comedy' , 'Mystery' , 'Movies' ]
} )
2022-11-16 12:32:19 +03:00
} )
it ( 'can handle empty guide' , ( ) => {
const content = fs . readFileSync ( path . resolve ( _ _dirname , '__data__/no_content.json' ) )
const results = parser ( { content } )
expect ( results ) . toMatchObject ( [ ] )
} )