mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-09 08:30:06 -04:00

This update contains the following fix: - Fix cookie language logic - Update channels - Add readme Signed-off-by: Toha <tohenk@yahoo.com>
132 lines
4.1 KiB
JavaScript
132 lines
4.1 KiB
JavaScript
const { parser, url, request } = require('./mncvision.id.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-11-19').startOf('d')
|
|
const channel = {
|
|
site_id: '154',
|
|
xmltv_id: 'AXN.id',
|
|
lang: 'id'
|
|
}
|
|
const indonesiaHeaders = {
|
|
'set-cookie': [
|
|
's1nd0vL=uo6gsashc1rmloqbb50m6b13qkglfvpl; expires=Sat, 18-Nov-2023 20:45:02 GMT; Max-Age=7200; path=/; HttpOnly'
|
|
]
|
|
}
|
|
const englishHeaders = {
|
|
'set-cookie': [
|
|
's1nd0vL=imtot2v1cs0pbemaohj9fee3hlbqo699; expires=Sat, 18-Nov-2023 20:38:31 GMT; Max-Age=7200; path=/; HttpOnly'
|
|
]
|
|
}
|
|
|
|
axios.get.mockImplementation((url, opts) => {
|
|
if (url === 'https://www.mncvision.id/language_switcher/setlang/indonesia/') {
|
|
return Promise.resolve({
|
|
headers: indonesiaHeaders
|
|
})
|
|
}
|
|
if (url === 'https://www.mncvision.id/language_switcher/setlang/english/') {
|
|
return Promise.resolve({
|
|
headers: englishHeaders
|
|
})
|
|
}
|
|
if (
|
|
url === 'https://www.mncvision.id/schedule/detail/20231119001500154/Blue-Bloods-S13-Ep-19/1'
|
|
) {
|
|
const getCookie = headers => {
|
|
if (Array.isArray(headers['set-cookie'])) {
|
|
return headers['set-cookie'][0].split('; ')[0]
|
|
}
|
|
}
|
|
if (opts.headers['Cookie'] === getCookie(indonesiaHeaders)) {
|
|
return Promise.resolve({
|
|
data: fs.readFileSync(path.resolve(__dirname, '__data__/program_id.html'))
|
|
})
|
|
}
|
|
if (opts.headers['Cookie'] === getCookie(englishHeaders)) {
|
|
return Promise.resolve({
|
|
data: fs.readFileSync(path.resolve(__dirname, '__data__/program_en.html'))
|
|
})
|
|
}
|
|
}
|
|
|
|
return Promise.resolve({ data: '' })
|
|
})
|
|
|
|
it('can generate valid url', () => {
|
|
expect(url).toBe('https://www.mncvision.id/schedule/table')
|
|
})
|
|
|
|
it('can generate valid request method', () => {
|
|
expect(request.method).toBe('POST')
|
|
})
|
|
|
|
it('can generate valid request headers', async () => {
|
|
expect(await request.headers({ channel })).toMatchObject({
|
|
'Content-Type': 'application/x-www-form-urlencoded'
|
|
})
|
|
})
|
|
|
|
it('can generate valid request data', () => {
|
|
const data = request.data({ channel, date })
|
|
expect(data.get('search_model')).toBe('channel')
|
|
expect(data.get('af0rmelement')).toBe('aformelement')
|
|
expect(data.get('fdate')).toBe('2023-11-19')
|
|
expect(data.get('fchannel')).toBe('154')
|
|
expect(data.get('submit')).toBe('Search')
|
|
})
|
|
|
|
it('can parse response', async () => {
|
|
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
|
|
const indonesiaResults = (
|
|
await parser({ date, content, channel, headers: indonesiaHeaders })
|
|
).map(p => {
|
|
p.start = p.start.toJSON()
|
|
p.stop = p.stop.toJSON()
|
|
return p
|
|
})
|
|
expect(indonesiaResults[0]).toMatchObject({
|
|
start: '2023-11-18T17:15:00.000Z',
|
|
stop: '2023-11-18T18:05:00.000Z',
|
|
title: 'Blue Bloods S13, Ep 19',
|
|
episode: 19,
|
|
description:
|
|
'Jamie bekerja sama dengan FDNY untuk menemukan pelaku pembakaran yang bertanggung jawab atas kebakaran hebat yang terjadi di fasilitas penyimpanan bukti milik NYPD.'
|
|
})
|
|
|
|
const englishResults = (
|
|
await parser({ date, content, channel: { ...channel, lang: 'en' }, headers: englishHeaders })
|
|
).map(p => {
|
|
p.start = p.start.toJSON()
|
|
p.stop = p.stop.toJSON()
|
|
return p
|
|
})
|
|
expect(englishResults[0]).toMatchObject({
|
|
start: '2023-11-18T17:15:00.000Z',
|
|
stop: '2023-11-18T18:05:00.000Z',
|
|
title: 'Blue Bloods S13, Ep 19',
|
|
episode: 19,
|
|
description:
|
|
'Jamie partners with the FDNY to find the arsonist responsible for a massive fire at an NYPD evidence storage facility.'
|
|
})
|
|
})
|
|
|
|
it('can handle empty guide', async () => {
|
|
const content = fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'))
|
|
const results = await parser({
|
|
date,
|
|
channel,
|
|
content,
|
|
headers: indonesiaHeaders
|
|
})
|
|
expect(results).toMatchObject([])
|
|
})
|