epg-grabber 0.25.3 → 0.25.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/utils.js +2 -2
- package/tests/utils.test.js +58 -24
package/package.json
CHANGED
package/src/utils.js
CHANGED
|
@@ -220,14 +220,14 @@ utils.convertToXMLTV = function ({ channels, programs }) {
|
|
|
220
220
|
output += '</tv>'
|
|
221
221
|
|
|
222
222
|
function createXMLTVNS(s, e) {
|
|
223
|
-
if (!
|
|
223
|
+
if (!e) return null
|
|
224
224
|
s = s || 1
|
|
225
225
|
|
|
226
226
|
return `${s - 1}.${e - 1}.0/1`
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
function createOnScreen(s, e) {
|
|
230
|
-
if (!
|
|
230
|
+
if (!e) return null
|
|
231
231
|
s = s || 1
|
|
232
232
|
|
|
233
233
|
s = padStart(s, 2, '0')
|
package/tests/utils.test.js
CHANGED
|
@@ -95,6 +95,28 @@ it('can convert object to xmltv string without season number', () => {
|
|
|
95
95
|
)
|
|
96
96
|
})
|
|
97
97
|
|
|
98
|
+
it('can convert object to xmltv string without episode number', () => {
|
|
99
|
+
const file = fs.readFileSync('./tests/input/example.com.channels.xml', { encoding: 'utf-8' })
|
|
100
|
+
const { channels } = utils.parseChannels(file)
|
|
101
|
+
const programs = [
|
|
102
|
+
{
|
|
103
|
+
title: 'Program 1',
|
|
104
|
+
description: 'Description for Program 1',
|
|
105
|
+
start: 1616133600,
|
|
106
|
+
stop: 1616135400,
|
|
107
|
+
category: 'Test',
|
|
108
|
+
season: 1,
|
|
109
|
+
icon: 'https://example.com/images/Program1.png?x=шеллы&sid=777',
|
|
110
|
+
channel: '1TV.com',
|
|
111
|
+
lang: 'it'
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
const output = utils.convertToXMLTV({ channels, programs })
|
|
115
|
+
expect(output).toBe(
|
|
116
|
+
'<?xml version="1.0" encoding="UTF-8" ?><tv>\r\n<channel id="1TV.com"><display-name>1 TV</display-name><icon src="https://example.com/logos/1TV.png"/><url>https://example.com</url></channel>\r\n<channel id="2TV.com"><display-name>2 TV</display-name><url>https://example.com</url></channel>\r\n<programme start="20210319060000 +0000" stop="20210319063000 +0000" channel="1TV.com"><title lang="it">Program 1</title><desc lang="it">Description for Program 1</desc><category lang="it">Test</category><icon src="https://example.com/images/Program1.png?x=шеллы&sid=777"/></programme>\r\n</tv>'
|
|
117
|
+
)
|
|
118
|
+
})
|
|
119
|
+
|
|
98
120
|
it('can convert object to xmltv string without categories', () => {
|
|
99
121
|
const channels = [
|
|
100
122
|
{
|
|
@@ -171,7 +193,7 @@ it('can fetch data', () => {
|
|
|
171
193
|
url: 'http://example.com/20210319/1tv.json',
|
|
172
194
|
withCredentials: true
|
|
173
195
|
}
|
|
174
|
-
utils.fetchData(
|
|
196
|
+
utils.fetchData(mockAxios, request).then(jest.fn).catch(jest.fn)
|
|
175
197
|
expect(mockAxios).toHaveBeenCalledWith(
|
|
176
198
|
expect.objectContaining({
|
|
177
199
|
data: { accountID: '123' },
|
|
@@ -192,37 +214,46 @@ it('can fetch data', () => {
|
|
|
192
214
|
|
|
193
215
|
it('can build request async', done => {
|
|
194
216
|
const config = utils.loadConfig(require(path.resolve('./tests/input/async.config.js')))
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
'
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
217
|
+
|
|
218
|
+
utils
|
|
219
|
+
.buildRequest({}, config)
|
|
220
|
+
.then(request => {
|
|
221
|
+
expect(request).toMatchObject({
|
|
222
|
+
data: { accountID: '123' },
|
|
223
|
+
headers: {
|
|
224
|
+
'Content-Type': 'application/json',
|
|
225
|
+
Cookie: 'abc=123',
|
|
226
|
+
'User-Agent':
|
|
227
|
+
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 Edg/79.0.309.71'
|
|
228
|
+
},
|
|
229
|
+
maxContentLength: 5242880,
|
|
230
|
+
method: 'POST',
|
|
231
|
+
responseType: 'arraybuffer',
|
|
232
|
+
timeout: 5000,
|
|
233
|
+
url: 'http://example.com/20210319/1tv.json',
|
|
234
|
+
withCredentials: true
|
|
235
|
+
})
|
|
236
|
+
done()
|
|
210
237
|
})
|
|
211
|
-
done
|
|
212
|
-
})
|
|
238
|
+
.catch(done)
|
|
213
239
|
})
|
|
214
240
|
|
|
215
241
|
it('can load logo async', done => {
|
|
216
242
|
const config = utils.loadConfig(require(path.resolve('./tests/input/async.config.js')))
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
243
|
+
|
|
244
|
+
utils
|
|
245
|
+
.loadLogo({}, config)
|
|
246
|
+
.then(logo => {
|
|
247
|
+
expect(logo).toBe('http://example.com/logos/1TV.png?x=шеллы&sid=777')
|
|
248
|
+
done()
|
|
249
|
+
})
|
|
250
|
+
.catch(done)
|
|
221
251
|
})
|
|
222
252
|
|
|
223
253
|
it('can parse programs', done => {
|
|
224
254
|
const config = utils.loadConfig(require(path.resolve('./tests/input/example.com.config.js')))
|
|
225
|
-
|
|
255
|
+
|
|
256
|
+
utils
|
|
226
257
|
.parsePrograms({ channel: { xmltv_id: '1tv', lang: 'en' } }, config)
|
|
227
258
|
.then(programs => {
|
|
228
259
|
expect(programs).toMatchObject([
|
|
@@ -240,14 +271,17 @@ it('can parse programs', done => {
|
|
|
240
271
|
])
|
|
241
272
|
done()
|
|
242
273
|
})
|
|
274
|
+
.catch(done)
|
|
243
275
|
})
|
|
244
276
|
|
|
245
277
|
it('can parse programs async', done => {
|
|
246
278
|
const config = utils.loadConfig(require(path.resolve('./tests/input/async.config.js')))
|
|
247
|
-
|
|
279
|
+
|
|
280
|
+
utils
|
|
248
281
|
.parsePrograms({ channel: { xmltv_id: '1tv', lang: 'en' } }, config)
|
|
249
282
|
.then(programs => {
|
|
250
283
|
expect(programs.length).toBe(0)
|
|
251
284
|
done()
|
|
252
285
|
})
|
|
286
|
+
.catch(done)
|
|
253
287
|
})
|