diff --git a/scripts/templates/_config.js b/scripts/templates/_config.js new file mode 100644 index 00000000..2e40921d --- /dev/null +++ b/scripts/templates/_config.js @@ -0,0 +1,16 @@ +module.exports = { + site: '', + url({ channel, date }) { + return `https://example.com/api/${channel.site_id}/${date.format('YYYY-MM-DD')}` + }, + parser({ content }) { + try { + return JSON.parse(content) + } catch { + return [] + } + }, + channels() { + return [] + } +} diff --git a/scripts/templates/_readme.md b/scripts/templates/_readme.md new file mode 100644 index 00000000..3260ab62 --- /dev/null +++ b/scripts/templates/_readme.md @@ -0,0 +1,21 @@ +# + +https://example.com + +### Download the guide + +```sh +npm run grab --- --site= +``` + +### Update channel list + +```sh +npm run channels:parse --- --config=./sites//.config.js --output=./sites//.channels.xml +``` + +### Test + +```sh +npm test --- +``` diff --git a/scripts/templates/_test.js b/scripts/templates/_test.js new file mode 100644 index 00000000..2bb4cebb --- /dev/null +++ b/scripts/templates/_test.js @@ -0,0 +1,42 @@ +const { parser, url } = require('./.config.js') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +const date = dayjs.utc('2025-01-12', 'YYYY-MM-DD').startOf('d') +const channel = { site_id: 'bbc1', xmltv_id: 'BBCOne.uk' } + +it('can generate valid url', () => { + expect(url({ channel, date })).toBe('https://example.com/api/bbc1/2025-01-12') +}) + +it('can parse response', () => { + const content = + '[{"title":"Program 1","start":"2025-01-12T00:00:00.000Z","stop":"2025-01-12T00:30:00.000Z"},{"title":"Program 2","start":"2025-01-12T00:30:00.000Z","stop":"2025-01-12T01:00:00.000Z"}]' + + const results = parser({ content }) + + expect(results.length).toBe(2) + expect(results[0]).toMatchObject({ + title: 'Program 1', + start: '2025-01-12T00:00:00.000Z', + stop: '2025-01-12T00:30:00.000Z' + }) + expect(results[1]).toMatchObject({ + title: 'Program 2', + start: '2025-01-12T00:30:00.000Z', + stop: '2025-01-12T01:00:00.000Z' + }) +}) + +it('can handle empty guide', () => { + const result = parser({ + date, + channel, + content: '' + }) + + expect(result).toMatchObject([]) +})