2025-12-22 13:36:29 +05:30
const { parser , url , channels } = require ( './airtelxstream.in.config.js' )
const fs = require ( 'fs' )
const path = require ( 'path' )
const dayjs = require ( 'dayjs' )
const utc = require ( 'dayjs/plugin/utc' )
const customParseFormat = require ( 'dayjs/plugin/customParseFormat' )
dayjs . extend ( customParseFormat )
dayjs . extend ( utc )
const axios = require ( 'axios' )
jest . mock ( 'axios' )
2026-01-08 14:17:41 +05:30
// Date used for URL generation test
const date = dayjs . utc ( '2025-12-28' , 'YYYY-MM-DD' ) . startOf ( 'd' )
const channel = { site _id : 'LIVETV_LIVETVCHANNEL_ZEE_CINEMA' }
2025-12-22 13:36:29 +05:30
it ( 'can generate valid url' , ( ) => {
const startTime = date . valueOf ( )
const endTime = date . add ( 1 , 'day' ) . valueOf ( )
expect ( url ( { channel , date } ) ) . toBe (
2026-01-08 14:17:41 +05:30
` https://epg.airtel.tv/app/v2/content/channel/epg?channelId=LIVETV_LIVETVCHANNEL_ZEE_CINEMA&startTime= ${ startTime } &endTime= ${ endTime } `
2025-12-22 13:36:29 +05:30
)
} )
it ( 'can parse response' , ( ) => {
const content = fs . readFileSync ( path . resolve ( _ _dirname , '__data__/content.json' ) , 'utf8' )
const results = parser ( { content } )
expect ( results . length ) . toBeGreaterThan ( 0 )
expect ( results [ 0 ] ) . toMatchObject ( {
2026-01-08 14:17:41 +05:30
title : 'Bengal Tiger' ,
description : "Starring: Ravi Teja,Tamannaah Bhatia. Simple man Akash loves politician Gajapathi's daughter, Meera. When Gajapathi discovers Akash's father's identity, suspicions arise about past vendettas." ,
start : dayjs ( 1766868120000 ) ,
stop : dayjs ( 1766875380000 ) ,
image : 'https://xstreamcp-assets-msp.streamready.in/assets/LIVETV/PROGRAM/LIVETV_PROGRAM_ZEE_CINEMA_1006193_28DEC021200_28DEC041300/images/LANDSCAPE_169_HD/ZEECINEMA_BengalTiger_1006193.jpg' ,
category : [ ]
2025-12-22 13:36:29 +05:30
} )
} )
it ( 'can handle empty guide' , ( ) => {
2026-01-08 14:17:41 +05:30
const results = parser ( { content : '{"programGuide": {}}' } )
2025-12-22 13:36:29 +05:30
expect ( results ) . toMatchObject ( [ ] )
} )
it ( 'can parse channel list' , async ( ) => {
axios . get . mockResolvedValue ( {
data : {
data : [
{
2026-01-08 14:17:41 +05:30
id : 'STREAM_ID_123' ,
epgChannelId : 'EPG_ID_ZEE' ,
title : 'Zee Cinema' ,
2025-12-22 13:36:29 +05:30
images : {
LOGO _HD : 'http://logo.png'
}
2026-01-08 14:17:41 +05:30
} ,
// Duplicate stream for same channel (should be removed by map)
{
id : 'STREAM_ID_456' ,
epgChannelId : 'EPG_ID_ZEE' ,
title : 'Zee Cinema Duplicate' ,
images : { }
2025-12-22 13:36:29 +05:30
}
]
}
} )
const results = await channels ( )
2026-01-08 14:17:41 +05:30
expect ( results . length ) . toBe ( 1 ) // Should deduplicate based on epgChannelId
2025-12-22 13:36:29 +05:30
expect ( results [ 0 ] ) . toMatchObject ( {
lang : 'en' ,
2026-01-08 14:17:41 +05:30
site _id : 'EPG_ID_ZEE' , // Should prefer epgChannelId over id
name : 'Zee Cinema'
//logo: 'http://logo.png' // Logo is commented out in your config, so we don't expect it here
2025-12-22 13:36:29 +05:30
} )
} )