mirror of
https://github.com/iptv-org/epg
synced 2025-12-16 02:16:40 -05:00
247 lines
9.6 KiB
JavaScript
247 lines
9.6 KiB
JavaScript
const { parser, url } = require('./horizon.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('2023-02-07', 'YYYY-MM-DD').startOf('d')
|
|
const channel = {
|
|
site_id: '10024',
|
|
xmltv_id: 'AMCCzechRepublic.cz'
|
|
}
|
|
|
|
it('can generate valid url', () => {
|
|
expect(url({ date, channel })).toBe(
|
|
'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/1'
|
|
)
|
|
})
|
|
|
|
it('can parse response', done => {
|
|
const content = JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8'))
|
|
|
|
axios.get.mockImplementation(url => {
|
|
if (
|
|
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/2'
|
|
) {
|
|
return Promise.resolve({
|
|
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_1.json'), 'utf8'))
|
|
})
|
|
} else if (
|
|
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/3'
|
|
) {
|
|
return Promise.resolve({
|
|
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_2.json'), 'utf8'))
|
|
})
|
|
} else if (
|
|
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/4'
|
|
) {
|
|
return Promise.resolve({
|
|
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_3.json'), 'utf8'))
|
|
})
|
|
} else if (
|
|
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78'
|
|
) {
|
|
return Promise.resolve({
|
|
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_listings_1.json'), 'utf8'))
|
|
})
|
|
} else if (
|
|
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b'
|
|
) {
|
|
return Promise.resolve({
|
|
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_listings_2.json'), 'utf8'))
|
|
})
|
|
} else if (
|
|
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad'
|
|
) {
|
|
return Promise.resolve({
|
|
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_listings_3.json'), 'utf8'))
|
|
})
|
|
} else if (
|
|
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7'
|
|
) {
|
|
return Promise.resolve({
|
|
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_listings_4.json'), 'utf8'))
|
|
})
|
|
} else {
|
|
return Promise.resolve({ data: '' })
|
|
}
|
|
})
|
|
|
|
parser({ content, channel, date })
|
|
.then(result => {
|
|
result = result.map(p => {
|
|
p.start = p.start.toJSON()
|
|
p.stop = p.stop.toJSON()
|
|
return p
|
|
})
|
|
|
|
expect(result).toMatchObject([
|
|
{
|
|
start: '2023-02-06T21:35:00.000Z',
|
|
stop: '2023-02-06T23:05:00.000Z',
|
|
title: 'Avengement',
|
|
description:
|
|
'Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.',
|
|
category: ['Drama', 'Akcia'],
|
|
directors: ['Jesse V. Johnson'],
|
|
actors: [
|
|
'Scott Adkins',
|
|
'Craig Fairbrass',
|
|
'Thomas Turgoose',
|
|
'Nick Moran',
|
|
'Kierston Wareing',
|
|
'Leo Gregory',
|
|
'Mark Strange',
|
|
'Luke LaFontaine',
|
|
'Beau Fowler',
|
|
'Dan Styles',
|
|
'Christopher Sciueref',
|
|
'Matt Routledge',
|
|
'Jane Thorne',
|
|
'Louis Mandylor',
|
|
'Terence Maynard',
|
|
'Greg Burridge',
|
|
'Michael Higgs',
|
|
'Damian Gallagher',
|
|
'Daniel Adegboyega',
|
|
'John Ioannou',
|
|
'Sofie Golding-Spittle',
|
|
'Joe Egan',
|
|
'Darren Swain',
|
|
'Lee Charles',
|
|
'Dominic Kinnaird',
|
|
"Ross O'Hennessy",
|
|
'Teresa Mahoney',
|
|
'Andrew Dunkelberger',
|
|
'Sam Hardy',
|
|
'Ivan Moy',
|
|
'Mark Sears',
|
|
'Phillip Ray Tommy'
|
|
],
|
|
date: '2019'
|
|
},
|
|
{
|
|
start: '2023-02-07T04:35:00.000Z',
|
|
stop: '2023-02-07T05:00:00.000Z',
|
|
title: 'Zoom In',
|
|
description: 'Film/Kino',
|
|
category: ['Hudba a umenie', 'Film'],
|
|
date: '2010'
|
|
},
|
|
{
|
|
start: '2023-02-07T09:10:00.000Z',
|
|
stop: '2023-02-07T11:00:00.000Z',
|
|
title: 'Studentka',
|
|
description:
|
|
'Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?',
|
|
category: ['Film', 'Komédia'],
|
|
actors: [
|
|
'Sophie Marceauová',
|
|
'Vincent Lindon',
|
|
'Elisabeth Vitali',
|
|
'Elena Pompei',
|
|
'Jean-Claude Leguay',
|
|
'Brigitte Chamarande',
|
|
'Christian Pereira',
|
|
'Gérard Dacier',
|
|
'Roberto Attias',
|
|
'Beppe Chierici',
|
|
'Nathalie Mann',
|
|
'Anne Macina',
|
|
'Janine Souchon',
|
|
'Virginie Demians',
|
|
'Hugues Leforestier',
|
|
'Jacqueline Noëlle',
|
|
'Marc-André Brunet',
|
|
'Isabelle Caubère',
|
|
'André Chazel',
|
|
'Med Salah Cheurfi',
|
|
'Guillaume Corea',
|
|
'Eric Denize',
|
|
'Gilles Gaston-Dreyfuss',
|
|
'Benoît Gourley',
|
|
'Marc Innocenti',
|
|
'Najim Laouriga',
|
|
'Laurent Ledermann',
|
|
'Philippe Maygal',
|
|
'Dominique Pifarely',
|
|
'Ysé Tran'
|
|
],
|
|
directors: ['Francis De Gueltz', 'Dominique Talmon', 'Claude Pinoteau'],
|
|
date: '1988'
|
|
},
|
|
{
|
|
start: '2023-02-07T16:05:00.000Z',
|
|
stop: '2023-02-07T17:45:00.000Z',
|
|
title: 'Zilionáři',
|
|
description:
|
|
'David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným vzrušujícím momentem v jeho životě je flirtování s kolegyní Kelly (Kristen Wiig), která ho však brzy zatáhne do těžko uvěřitelného dobrodružství. Skupinka nepříliš inteligentních loserů, pod vedením Steva (Owen Wilson), plánuje vyloupit banku a David jim v tom má samozřejmě pomoci. Navzdory absolutně amatérskému plánu se ale stane nemožné a oni mají najednou v kapse 17 miliónů dolarů. A protože tato partička je opravdu bláznivá, začne je hned ve velkém roztáčet. Peníze létají vzduchem za luxusní a kolikrát i zbytečné věci, ale nedochází jim, že pro policii tak zanechávají jasné stopy...',
|
|
category: ['Drama', 'Akcia'],
|
|
actors: [
|
|
'Zach Galifianakis',
|
|
'Kristen Wiigová',
|
|
'Owen Wilson',
|
|
'Kate McKinnon',
|
|
'Leslie Jones',
|
|
'Jason Sudeikis',
|
|
'Ross Kimball',
|
|
'Devin Ratray',
|
|
'Mary Elizabeth Ellisová',
|
|
'Jon Daly',
|
|
'Ken Marino',
|
|
'Daniel Zacapa',
|
|
'Tom Werme',
|
|
'Njema Williams',
|
|
'Nils Cruz',
|
|
'Michael Fraguada',
|
|
'Christian Gonzalez',
|
|
'Candace Blanchard',
|
|
'Karsten Friske',
|
|
'Dallas Edwards',
|
|
'Barry Ratcliffe',
|
|
'Shelton Grant',
|
|
'Laura Palka',
|
|
'Reegus Flenory',
|
|
'Wynn Reichert',
|
|
'Jill Jane Clements',
|
|
'Joseph S. Wilson',
|
|
'Jee An',
|
|
'Rhoda Griffisová',
|
|
'Nicole Dupre Sobchack'
|
|
],
|
|
directors: [
|
|
'Scott August',
|
|
'Richard L. Fox',
|
|
'Michelle Malley-Campos',
|
|
'Sebastian Mazzola',
|
|
'Steven Ritzi',
|
|
'Pete Waterman',
|
|
'Jared Hess'
|
|
],
|
|
date: '2016'
|
|
}
|
|
])
|
|
done()
|
|
})
|
|
.catch(done)
|
|
})
|
|
|
|
it('can handle empty guide', done => {
|
|
parser({
|
|
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json')),
|
|
channel,
|
|
date
|
|
})
|
|
.then(result => {
|
|
expect(result).toMatchObject([])
|
|
done()
|
|
})
|
|
.catch(done)
|
|
})
|