2022-10-05 16:58:49 +03:00
// npx epg-grabber --config=sites/mncvision.id/mncvision.id.config.js --channels=sites/mncvision.id/mncvision.id_id-id.channels.xml --output=guide.xml --timeout=30000 --days=2
// npx epg-grabber --config=sites/mncvision.id/mncvision.id.config.js --channels=sites/mncvision.id/mncvision.id_id-en.channels.xml --output=guide.xml --timeout=30000 --days=2
2021-11-13 15:52:35 +03:00
// node ./scripts/channels.js --config=./sites/mncvision.id/mncvision.id.config.js --output=./sites/mncvision.id/mncvision.id_id.channels.xml
2021-11-12 18:59:46 +03:00
2022-02-01 05:17:09 +03:00
const { parser , url , request } = require ( './mncvision.id.config.js' )
2022-10-05 16:58:49 +03:00
const fs = require ( 'fs' )
const path = require ( 'path' )
2021-11-12 18:59:46 +03:00
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' )
2022-10-05 16:58:49 +03:00
const date = dayjs . utc ( '2022-10-05' , 'YYYY-MM-DD' ) . startOf ( 'd' )
const channel = {
site _id : '38' ,
xmltv _id : 'MiaoMi.hk' ,
2022-03-10 01:42:02 +03:00
lang : 'id'
}
2022-10-05 16:58:49 +03:00
const headers = {
'set-cookie' : [
's1nd0vL=05e9pr6gi112tdmutsn7big93o75r0b0; expires=Wed, 05-Oct-2022 14:18:22 GMT; Max-Age=7200; path=/; HttpOnly'
]
2021-11-12 18:59:46 +03:00
}
it ( 'can generate valid url' , ( ) => {
expect ( url ) . toBe ( 'https://mncvision.id/schedule/table' )
} )
2022-10-05 16:58:49 +03:00
it ( 'can generate valid request method' , ( ) => {
expect ( request . method ) . toBe ( 'POST' )
} )
2021-11-12 18:59:46 +03:00
it ( 'can generate valid request headers' , ( ) => {
expect ( request . headers ) . toMatchObject ( {
2022-10-05 16:58:49 +03:00
'Content-Type' : 'application/x-www-form-urlencoded'
2021-11-12 18:59:46 +03:00
} )
} )
it ( 'can generate valid request data' , ( ) => {
2022-10-05 16:58:49 +03:00
const data = request . data ( { channel , date } )
expect ( data . get ( 'search_model' ) ) . toBe ( 'channel' )
expect ( data . get ( 'af0rmelement' ) ) . toBe ( 'aformelement' )
expect ( data . get ( 'fdate' ) ) . toBe ( '2022-10-05' )
expect ( data . get ( 'fchannel' ) ) . toBe ( '38' )
expect ( data . get ( 'submit' ) ) . toBe ( 'Search' )
2021-11-12 18:59:46 +03:00
} )
2022-10-05 16:58:49 +03:00
it ( 'can parse response' , async ( ) => {
const content = fs . readFileSync ( path . resolve ( _ _dirname , '__data__/content.html' ) )
const indonesiaHeaders = {
'set-cookie' : [
's1nd0vL=e3vjb0oaf9vijiqsg7cml4i7fdkq16db; expires=Wed, 05-Oct-2022 14:54:16 GMT; Max-Age=7200; path=/; HttpOnly'
]
}
const englishHeaders = {
'set-cookie' : [
's1nd0vL=hfd6hpnpr6gvgart0d8rf7ef6t4gi7nr; expires=Wed, 05-Oct-2022 15:08:55 GMT; Max-Age=7200; path=/; HttpOnly'
]
}
axios . get . mockImplementation ( ( url , opts ) => {
2022-03-10 01:42:02 +03:00
if (
2022-03-11 15:35:36 +03:00
url === 'https://www.mncvision.id/schedule/table/startno/50' &&
2022-10-05 16:58:49 +03:00
opts . headers [ 'Cookie' ] === headers [ 'set-cookie' ] [ 0 ]
2022-03-10 01:42:02 +03:00
) {
2022-03-05 16:51:40 +03:00
return Promise . resolve ( {
2022-10-05 16:58:49 +03:00
data : fs . readFileSync ( path . resolve ( _ _dirname , '__data__/content_p2.html' ) )
2022-03-11 15:35:36 +03:00
} )
} else if ( url === 'https://www.mncvision.id/language_switcher/setlang/indonesia/' ) {
return Promise . resolve ( {
2022-10-05 16:58:49 +03:00
headers : indonesiaHeaders
2022-03-05 16:51:40 +03:00
} )
2022-10-05 16:58:49 +03:00
} else if ( url === 'https://www.mncvision.id/language_switcher/setlang/english/' ) {
2022-03-05 16:51:40 +03:00
return Promise . resolve ( {
2022-10-05 16:58:49 +03:00
headers : englishHeaders
2022-03-05 16:51:40 +03:00
} )
2022-10-05 16:58:49 +03:00
} else if (
url ===
'https://mncvision.id/schedule/detail/2022100500000038/Adventures-With-Miao-Mi-Ep-1/1' &&
opts . headers [ 'Cookie' ] === indonesiaHeaders [ 'set-cookie' ] [ 0 ]
2022-03-10 01:42:02 +03:00
) {
return Promise . resolve ( {
2022-10-05 16:58:49 +03:00
data : fs . readFileSync ( path . resolve ( _ _dirname , '__data__/program_id.html' ) )
2022-03-10 01:42:02 +03:00
} )
} else if (
2022-10-05 16:58:49 +03:00
url ===
'https://mncvision.id/schedule/detail/2022100500000038/Adventures-With-Miao-Mi-Ep-1/1' &&
opts . headers [ 'Cookie' ] === englishHeaders [ 'set-cookie' ] [ 0 ]
2022-03-10 01:42:02 +03:00
) {
return Promise . resolve ( {
2022-10-05 16:58:49 +03:00
data : fs . readFileSync ( path . resolve ( _ _dirname , '__data__/program_en.html' ) )
2022-03-10 01:42:02 +03:00
} )
}
return Promise . resolve ( { data : '' } )
} )
2022-10-05 16:58:49 +03:00
let indonesiaResults = await parser ( { date , content , channel , headers } )
indonesiaResults = indonesiaResults . map ( p => {
p . start = p . start . toJSON ( )
p . stop = p . stop . toJSON ( )
return p
} )
expect ( indonesiaResults [ 0 ] ) . toMatchObject ( {
start : '2022-10-04T17:00:00.000Z' ,
stop : '2022-10-04T17:06:00.000Z' ,
title : 'Adventures With Miao Mi, Ep 1' ,
episode : 1 ,
description :
'Ketika anak-anak mulai menghilang, sekelompok anak kecil harus menghadapi ketakutan terbesar mereka ketika mereka melawan sesosok badut pembunuh yang jahat.'
} )
expect ( indonesiaResults [ 4 ] ) . toMatchObject ( {
start : '2022-10-04T17:33:00.000Z' ,
stop : '2022-10-04T17:46:00.000Z' ,
title : 'Leo Wildlife Ranger S2, Ep 27' ,
season : 2 ,
episode : 27
} )
let englishResults = await parser ( { date , content , channel : { ... channel , lang : 'en' } , headers } )
englishResults = englishResults . map ( p => {
p . start = p . start . toJSON ( )
p . stop = p . stop . toJSON ( )
return p
} )
2022-03-10 01:42:02 +03:00
2022-10-05 16:58:49 +03:00
expect ( englishResults [ 0 ] ) . toMatchObject ( {
start : '2022-10-04T17:00:00.000Z' ,
stop : '2022-10-04T17:06:00.000Z' ,
title : 'Adventures With Miao Mi, Ep 1' ,
episode : 1 ,
description :
'When children begin to disappear, a group of young kids have to face their biggest fears when they square off against a murderous, evil clown.'
} )
2022-03-10 01:42:02 +03:00
} )
2022-10-05 16:58:49 +03:00
it ( 'can handle empty guide' , async ( ) => {
const content = fs . readFileSync ( path . resolve ( _ _dirname , '__data__/no_content.html' ) )
let results = await parser ( {
2021-11-12 18:59:46 +03:00
date ,
2022-10-05 16:58:49 +03:00
channel ,
content ,
headers
2021-11-12 18:59:46 +03:00
} )
2022-10-05 16:58:49 +03:00
expect ( results ) . toMatchObject ( [ ] )
2021-11-12 18:59:46 +03:00
} )