epg/sites/web.magentatv.de/web.magentatv.de.test.js
Toha 7cce6d737e
Update web.magentatv.de.
Test:

```sh
npm test --- web.magentatv.de

> test
> run-script-os web.magentatv.de

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand web.magentatv.de

 PASS  sites/web.magentatv.de/web.magentatv.de.test.js
  √ can generate valid url (2 ms)
  √ can generate valid request method (1 ms)
  √ can generate valid request headers (2 ms)
  √ can generate valid request data (3 ms)
  √ can parse response (3 ms)
  √ can handle empty guide

Test Suites: 1 passed, 1 total
Tests:       6 passed, 6 total
Snapshots:   0 total
Time:        0.599 s, estimated 1 s
Ran all test suites matching /web.magentatv.de/i.
```

Grab:

```sh
npm run grab --- --site=web.magentatv.de

> grab
> npx tsx scripts/commands/epg/grab.ts --site=web.magentatv.de

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: web.magentatv.de
loading channels...
  found 348 channel(s)
run #1:
  [1/696] web.magentatv.de (de) - 132 - Jan 11, 2025 (9 programs)
  [2/696] web.magentatv.de (de) - 132 - Jan 12, 2025 (11 programs)
  ...
  [695/696] web.magentatv.de (de) - SkyOne.de - Jan 12, 2025 (38 programs)
  [696/696] web.magentatv.de (de) - SkySport9.de - Jan 11, 2025 (2 programs)
  saving to "guide.xml"...
  done in 00h 04m 59s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2025-01-11 20:32:46 +07:00

138 lines
4.5 KiB
JavaScript

const { parser, url, request } = require('./web.magentatv.de.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-03-09', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: '255',
xmltv_id: '13thStreet.de'
}
axios.request.mockImplementation(req => {
const result = {}
if (req.url === 'https://api.prod.sngtv.magentatv.de/EPG/JSON/Authenticate') {
Object.assign(result, {
headers: {
'set-cookie': [
'JSESSIONID=2147EBA9C59BCDC33822CFD2764E5C0B; Path=/EPG; HttpOnly; SameSite=None; Secure',
'JSESSIONID=2147EBA9C59BCDC33822CFD2764E5C0B; Path=/EPG/; HttpOnly; SameSite=None; Secure',
'CSESSIONID=1CF187ABCA12ED1B01ADF84C691048ED; Path=/EPG/; Secure; HttpOnly; SameSite=None',
'CSRFSESSION=ea2329ba213271192bffd77c2fa276086a8e828c1a4ee379; Path=/EPG/; SameSite=None; Secure'
]
},
data: {
csrfToken: '6f678415702493d2c28813747c413aa05c87d8f87ecf05fe'
}
})
}
return Promise.resolve(result)
})
it('can generate valid url', () => {
expect(url).toBe('https://api.prod.sngtv.magentatv.de/EPG/JSON/PlayBillList')
})
it('can generate valid request method', () => {
expect(request.method).toBe('POST')
})
it('can generate valid request headers', async () => {
const headers = await request.headers()
expect(headers).toHaveProperty('Cookie')
expect(headers).toHaveProperty('X_CSRFTOKEN')
expect(headers.Cookie).toMatch(/JSESSIONID=[\dA-F]+;/i)
expect(headers.Cookie).toMatch(/CSESSIONID=[\dA-F]+;/i)
expect(headers.Cookie).toMatch(/CSRFSESSION=[\dA-F]+;/i)
expect(headers.X_CSRFTOKEN).toMatch(/[\dA-F]/i)
})
it('can generate valid request data', () => {
expect(request.data({ channel, date })).toMatchObject({
count: -1,
isFillProgram: 1,
offset: 0,
properties: [
{
include:
'endtime,genres,id,name,starttime,channelid,pictures,introduce,subName,seasonNum,subNum,cast,country,producedate,externalIds',
name: 'playbill'
}
],
type: 2,
begintime: '20220309000000',
channelid: '255',
endtime: '20220310000000'
})
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8')
const result = parser({ content }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(result).toMatchObject([
{
start: '2023-10-23T23:58:55.000Z',
stop: '2023-10-24T00:11:05.000Z',
title: 'Twenty Foot Plus',
description:
'Die besten Big-Wave-Surfer werden bei ihrer Suche nach der nächsten großen Welle begleitet.',
image:
'http://ngiss.t-online.de/cm1s/media/gracenote/2/4/p24832950_e_h9_aa_2023-06-22T10_12_01.jpg',
category: ['Sport']
},
{
start: '2024-11-05T15:37:03.000Z',
stop: '2024-11-05T16:03:48.000Z',
title: 'The Big Bang Theory',
sub_title: 'Tritte unter dem Tisch',
description:
'Amy arbeitet für eine Weile in Sheldons Universität, er freut sich darüber, doch sie warnt ihn, dass sie sich jetzt häufiger zu Gesicht bekommen. Als Leonard, Sheldon, Raj und Howard zusammen sitzen, diskutieren sie darüber. Sheldon lässt auf sich einreden und informiert Amy, dass er ein Problem mit ihr auf seiner Arbeit hat. Sie ist enttäuscht, während Bernadette mit Howard darüber spricht, warum er auf Sheldon eingeredet hat.',
season: '7',
episode: '5',
image:
'http://ngiss.t-online.de/cm1s/media/gracenote/1/0/p10262968_e_h9_ah_2021-10-20T07_16_16.jpg',
category: ['Sitcom'],
directors: ['Mark Cendrowski'],
producers: ['Chuck Lorre', 'Bill Prady', 'Steven Molaro'],
adapters: [
'Steven Molaro',
'Steve Holland',
'Maria Ferrari',
'Chuck Lorre',
'Eric Kaplan',
'Jim Reynolds'
],
country: 'US',
date: '2013-01-01',
urls: [
{
system: 'imdb',
value: 'https://www.imdb.com/title/tt0898266'
}
]
}
])
})
it('can handle empty guide', () => {
const result = parser({
content: '{"counttotal":"0"}'
})
expect(result).toMatchObject([])
})