From b1a0bcf4b9b6c07f328824744fb0381d8b148a80 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Sat, 26 Feb 2022 23:21:44 +0300 Subject: [PATCH] Move scripts to subfolders --- .github/workflows/_check.yml | 6 +- .github/workflows/_load.yml | 8 +- .github/workflows/_update-api.yml | 2 +- package-lock.json | 74 +++++++++++++++++++ package.json | 14 +++- .../commands/{update-api.js => api/update.js} | 2 +- scripts/commands/{ => channels}/lint.js | 0 .../{parse-channels.js => channels/parse.js} | 0 scripts/commands/{ => channels}/validate.js | 0 .../{load-cluster.js => cluster/load.js} | 4 +- scripts/commands/create-matrix.js | 16 ---- .../{update-guides.js => guides/update.js} | 4 +- .../{save-results.js => programs/save.js} | 4 +- .../{create-queue.js => queue/create.js} | 2 +- .../{update-readme.js => readme/update.js} | 2 +- tests/__data__/database/queue.db | 0 .../expected/{readme.md => _readme.md} | 8 +- .../load}/cluster_1.log | 0 .../expected/logs/errors/ca/example.com.log | 1 - .../expected/logs/errors/ge/magticom.ge.log | 1 - .../expected/logs/errors/ru/yandex.ru.log | 1 - .../expected/logs/errors/us/directv.com.log | 1 - .../logs/{guides.log => guides/update.log} | 0 .../load}/cluster_1.log | 0 tests/__data__/input/logs/errors.log | 1 - .../logs/{guides.log => guides/update.log} | 0 .../input/{_readme.json => readme.json} | 0 .../update.test.js} | 16 ++-- tests/commands/cluster/load.test.js | 32 ++++++++ tests/commands/create-matrix.test.js | 25 ------- tests/commands/guides/update.test.js | 38 ++++++++++ tests/commands/load-cluster.test.js | 40 ---------- .../save.test.js} | 25 +++---- .../create.test.js} | 16 +--- .../update.test.js} | 16 ++-- tests/commands/update-guides.test.js | 67 ----------------- 36 files changed, 204 insertions(+), 222 deletions(-) rename scripts/commands/{update-api.js => api/update.js} (95%) rename scripts/commands/{ => channels}/lint.js (100%) rename scripts/commands/{parse-channels.js => channels/parse.js} (100%) rename scripts/commands/{ => channels}/validate.js (100%) rename scripts/commands/{load-cluster.js => cluster/load.js} (93%) delete mode 100644 scripts/commands/create-matrix.js rename scripts/commands/{update-guides.js => guides/update.js} (97%) rename scripts/commands/{save-results.js => programs/save.js} (90%) rename scripts/commands/{create-queue.js => queue/create.js} (98%) rename scripts/commands/{update-readme.js => readme/update.js} (99%) create mode 100644 tests/__data__/database/queue.db rename tests/__data__/expected/{readme.md => _readme.md} (85%) rename tests/__data__/expected/logs/{load-cluster => cluster/load}/cluster_1.log (100%) delete mode 100644 tests/__data__/expected/logs/errors/ca/example.com.log delete mode 100644 tests/__data__/expected/logs/errors/ge/magticom.ge.log delete mode 100644 tests/__data__/expected/logs/errors/ru/yandex.ru.log delete mode 100644 tests/__data__/expected/logs/errors/us/directv.com.log rename tests/__data__/expected/logs/{guides.log => guides/update.log} (100%) rename tests/__data__/input/logs/{load-cluster => cluster/load}/cluster_1.log (100%) delete mode 100644 tests/__data__/input/logs/errors.log rename tests/__data__/input/logs/{guides.log => guides/update.log} (100%) rename tests/__data__/input/{_readme.json => readme.json} (100%) rename tests/commands/{update-api.test.js => api/update.test.js} (52%) create mode 100644 tests/commands/cluster/load.test.js delete mode 100644 tests/commands/create-matrix.test.js create mode 100644 tests/commands/guides/update.test.js delete mode 100644 tests/commands/load-cluster.test.js rename tests/commands/{save-results.test.js => programs/save.test.js} (51%) rename tests/commands/{create-queue.test.js => queue/create.test.js} (69%) rename tests/commands/{update-readme.test.js => readme/update.test.js} (50%) delete mode 100644 tests/commands/update-guides.test.js diff --git a/.github/workflows/_check.yml b/.github/workflows/_check.yml index 341e0f8d..603bd294 100644 --- a/.github/workflows/_check.yml +++ b/.github/workflows/_check.yml @@ -8,12 +8,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Download channels from API + - name: Download data from API run: | mkdir -p scripts/data curl -L -o scripts/data/channels.json https://iptv-org.github.io/api/channels.json - id: files uses: jitterbit/get-changed-files@v1 - run: npm install - - run: npm run lint -- ${{ steps.files.outputs.added_modified }} - - run: npm run validate -- ${{ steps.files.outputs.added_modified }} + - run: npm run channels:lint -- ${{ steps.files.outputs.added_modified }} + - run: npm run channels:validate -- ${{ steps.files.outputs.added_modified }} diff --git a/.github/workflows/_load.yml b/.github/workflows/_load.yml index b1203259..14bae4d6 100644 --- a/.github/workflows/_load.yml +++ b/.github/workflows/_load.yml @@ -22,10 +22,10 @@ jobs: curl -L -o scripts/data/channels.json https://iptv-org.github.io/api/channels.json - uses: FedericoCarboni/setup-ffmpeg@v1 - run: npm install - - run: CHANNELS_PATH=sites/${{inputs.site}}/*.channels.xml node scripts/commands/create-queue.js --max-clusters=1 --days=2 - - run: NODE_OPTIONS=--insecure-http-parser node scripts/commands/load-cluster.js --timeout=30000 --cluster-id=1 - - run: node scripts/commands/save-results.js - - run: node scripts/commands/update-guides.js + - run: CHANNELS_PATH=sites/${{inputs.site}}/*.channels.xml npm run queue:create -- --max-clusters=1 --days=2 + - run: NODE_OPTIONS=--insecure-http-parser npm run cluster:load -- --timeout=30000 --cluster-id=1 + - run: npm run results:save + - run: npm run guides:update - uses: tibdex/github-app-token@v1 if: ${{ !env.ACT }} id: create-app-token diff --git a/.github/workflows/_update-api.yml b/.github/workflows/_update-api.yml index 38433931..369ed721 100644 --- a/.github/workflows/_update-api.yml +++ b/.github/workflows/_update-api.yml @@ -9,7 +9,7 @@ jobs: steps: - uses: actions/checkout@v2 - run: npm install - - run: node scripts/commands/update-api.js + - run: npm run api:update - uses: tibdex/github-app-token@v1 if: ${{ !env.ACT }} id: create-app-token diff --git a/package-lock.json b/package-lock.json index 3de27d75..74bb3b14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "epg-grabber": "^0.20.0", "epg-parser": "^0.1.6", "form-data": "^4.0.0", + "fs-extra": "^10.0.1", "glob": "^7.2.0", "iconv-lite": "^0.4.24", "jest": "^27.3.1", @@ -2377,6 +2378,27 @@ "node": ">= 6" } }, + "node_modules/fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/fs-minipass": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", @@ -3614,6 +3636,25 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/keyv": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", @@ -7382,6 +7423,23 @@ "mime-types": "^2.1.12" } }, + "fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, "fs-minipass": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", @@ -8308,6 +8366,22 @@ "minimist": "^1.2.5" } }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, "keyv": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", diff --git a/package.json b/package.json index 856e4900..404bc68f 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,18 @@ { "name": "epg", "scripts": { - "lint": "node scripts/commands/lint.js", - "validate": "node scripts/commands/validate.js", + "channels:validate": "node scripts/commands/channels/validate.js", + "channels:lint": "node scripts/commands/channels/lint.js", + "queue:create": "node scripts/commands/queue/create.js", + "cluster:load": "node scripts/commands/cluster/load.js", + "programs:save": "node scripts/commands/programs/save.js", + "guides:update": "node scripts/commands/guides/update.js", + "api:update": "node scripts/commands/api/update.js", + "readme:update": "node scripts/commands/readme/update.js", "test": "npx jest --runInBand", "test:commands": "npx jest --runInBand -- commands", "test:sites": "npx jest --runInBand -- sites", - "act": "act workflow_dispatch", - "update-readme": "node scripts/commands/update-readme.js" + "act": "act workflow_dispatch" }, "private": true, "author": "Arhey", @@ -25,6 +30,7 @@ "epg-grabber": "^0.20.0", "epg-parser": "^0.1.6", "form-data": "^4.0.0", + "fs-extra": "^10.0.1", "glob": "^7.2.0", "iconv-lite": "^0.4.24", "jest": "^27.3.1", diff --git a/scripts/commands/update-api.js b/scripts/commands/api/update.js similarity index 95% rename from scripts/commands/update-api.js rename to scripts/commands/api/update.js index 67e454ec..9ac94b0a 100644 --- a/scripts/commands/update-api.js +++ b/scripts/commands/api/update.js @@ -1,4 +1,4 @@ -const { file, parser, logger } = require('../core') +const { file, parser, logger } = require('../../core') const { program } = require('commander') const _ = require('lodash') diff --git a/scripts/commands/lint.js b/scripts/commands/channels/lint.js similarity index 100% rename from scripts/commands/lint.js rename to scripts/commands/channels/lint.js diff --git a/scripts/commands/parse-channels.js b/scripts/commands/channels/parse.js similarity index 100% rename from scripts/commands/parse-channels.js rename to scripts/commands/channels/parse.js diff --git a/scripts/commands/validate.js b/scripts/commands/channels/validate.js similarity index 100% rename from scripts/commands/validate.js rename to scripts/commands/channels/validate.js diff --git a/scripts/commands/load-cluster.js b/scripts/commands/cluster/load.js similarity index 93% rename from scripts/commands/load-cluster.js rename to scripts/commands/cluster/load.js index ddfe5848..ce478689 100644 --- a/scripts/commands/load-cluster.js +++ b/scripts/commands/cluster/load.js @@ -1,7 +1,7 @@ const _ = require('lodash') const grabber = require('epg-grabber') const { program } = require('commander') -const { db, logger, timer, file, parser } = require('../core') +const { db, logger, timer, file, parser } = require('../../core') const options = program .requiredOption('-c, --cluster-id ', 'The ID of cluster to load', parser.parseNumber) @@ -16,7 +16,7 @@ const options = program .opts() const LOGS_DIR = process.env.LOGS_DIR || 'scripts/logs' -const CLUSTER_PATH = `${LOGS_DIR}/load-cluster/cluster_${options.clusterId}.log` +const CLUSTER_PATH = `${LOGS_DIR}/cluster/load/cluster_${options.clusterId}.log` async function main() { logger.info('Starting...') diff --git a/scripts/commands/create-matrix.js b/scripts/commands/create-matrix.js deleted file mode 100644 index 98780ada..00000000 --- a/scripts/commands/create-matrix.js +++ /dev/null @@ -1,16 +0,0 @@ -const { logger, db } = require('../core') - -async function main() { - await db.queue.load() - const docs = await db.queue.find({}).sort({ cluster_id: 1 }) - const cluster_id = docs.reduce((acc, curr) => { - if (!acc.includes(curr.cluster_id)) acc.push(curr.cluster_id) - return acc - }, []) - - const matrix = { cluster_id } - const output = `::set-output name=matrix::${JSON.stringify(matrix)}` - logger.info(output) -} - -main() diff --git a/scripts/commands/update-guides.js b/scripts/commands/guides/update.js similarity index 97% rename from scripts/commands/update-guides.js rename to scripts/commands/guides/update.js index 831548ab..d7af0924 100644 --- a/scripts/commands/update-guides.js +++ b/scripts/commands/guides/update.js @@ -1,10 +1,10 @@ -const { db, logger, file, api } = require('../core') +const { db, logger, file, api } = require('../../core') const grabber = require('epg-grabber') const _ = require('lodash') const LOGS_DIR = process.env.LOGS_DIR || 'scripts/logs' const PUBLIC_DIR = process.env.PUBLIC_DIR || '.gh-pages' -const GUIDES_PATH = `${LOGS_DIR}/guides.log` +const GUIDES_PATH = `${LOGS_DIR}/guides/update.log` async function main() { await setUp() diff --git a/scripts/commands/save-results.js b/scripts/commands/programs/save.js similarity index 90% rename from scripts/commands/save-results.js rename to scripts/commands/programs/save.js index 26a4bb55..f2ff7161 100644 --- a/scripts/commands/save-results.js +++ b/scripts/commands/programs/save.js @@ -1,4 +1,4 @@ -const { db, logger, file, parser } = require('../core') +const { db, logger, file, parser } = require('../../core') const _ = require('lodash') const LOGS_DIR = process.env.LOGS_DIR || 'scripts/logs' @@ -7,7 +7,7 @@ async function main() { await db.queue.load() await db.programs.load() await db.programs.reset() - const files = await file.list(`${LOGS_DIR}/load-cluster/cluster_*.log`) + const files = await file.list(`${LOGS_DIR}/cluster/load/cluster_*.log`) for (const filepath of files) { logger.info(`Parsing "${filepath}"...`) const results = await parser.parseLogs(filepath) diff --git a/scripts/commands/create-queue.js b/scripts/commands/queue/create.js similarity index 98% rename from scripts/commands/create-queue.js rename to scripts/commands/queue/create.js index e63d0778..262ff6eb 100644 --- a/scripts/commands/create-queue.js +++ b/scripts/commands/queue/create.js @@ -1,4 +1,4 @@ -const { db, file, parser, logger, date, api } = require('../core') +const { db, file, parser, logger, date, api } = require('../../core') const { program } = require('commander') const _ = require('lodash') diff --git a/scripts/commands/update-readme.js b/scripts/commands/readme/update.js similarity index 99% rename from scripts/commands/update-readme.js rename to scripts/commands/readme/update.js index e6ab084f..56735016 100644 --- a/scripts/commands/update-readme.js +++ b/scripts/commands/readme/update.js @@ -1,4 +1,4 @@ -const { file, markdown, parser, logger, api, table } = require('../core') +const { file, markdown, parser, logger, api, table } = require('../../core') const { program } = require('commander') const _ = require('lodash') diff --git a/tests/__data__/database/queue.db b/tests/__data__/database/queue.db new file mode 100644 index 00000000..e69de29b diff --git a/tests/__data__/expected/readme.md b/tests/__data__/expected/_readme.md similarity index 85% rename from tests/__data__/expected/readme.md rename to tests/__data__/expected/_readme.md index ad67cdb3..fac19160 100644 --- a/tests/__data__/expected/readme.md +++ b/tests/__data__/expected/_readme.md @@ -16,9 +16,13 @@ To load a program guide, all you need to do is copy the link to one or more of t -## EPG Codes +## API -📋  [iptv-org.github.io](https://iptv-org.github.io/) +The API documentation can be found in the [iptv-org/api](https://github.com/iptv-org/api) repository. + +## Resources + +Links to other useful IPTV-related resources can be found in the [iptv-org/awesome-iptv](https://github.com/iptv-org/awesome-iptv) repository. ## API diff --git a/tests/__data__/expected/logs/load-cluster/cluster_1.log b/tests/__data__/expected/logs/cluster/load/cluster_1.log similarity index 100% rename from tests/__data__/expected/logs/load-cluster/cluster_1.log rename to tests/__data__/expected/logs/cluster/load/cluster_1.log diff --git a/tests/__data__/expected/logs/errors/ca/example.com.log b/tests/__data__/expected/logs/errors/ca/example.com.log deleted file mode 100644 index eb0f2aac..00000000 --- a/tests/__data__/expected/logs/errors/ca/example.com.log +++ /dev/null @@ -1 +0,0 @@ -{"xmltv_id":"CNNInternationalEurope2.us","site":"example.com","site_id":"141","lang":"en","error":"The channel has the wrong xmltv_id"} diff --git a/tests/__data__/expected/logs/errors/ge/magticom.ge.log b/tests/__data__/expected/logs/errors/ge/magticom.ge.log deleted file mode 100644 index 4d8a3977..00000000 --- a/tests/__data__/expected/logs/errors/ge/magticom.ge.log +++ /dev/null @@ -1 +0,0 @@ -{"xmltv_id":"CNNInternationalEurope.us","site":"magticom.ge","site_id":"140","lang":"ru","date":"2022-01-21T00:00:00Z","error":"Programs not found"} diff --git a/tests/__data__/expected/logs/errors/ru/yandex.ru.log b/tests/__data__/expected/logs/errors/ru/yandex.ru.log deleted file mode 100644 index 4fd847ed..00000000 --- a/tests/__data__/expected/logs/errors/ru/yandex.ru.log +++ /dev/null @@ -1 +0,0 @@ -{"xmltv_id":"Perviykanal.ru","site":"yandex.ru","site_id":"1","lang":"ru","date":"2022-01-21T00:00:00Z","error":"Some error"} diff --git a/tests/__data__/expected/logs/errors/us/directv.com.log b/tests/__data__/expected/logs/errors/us/directv.com.log deleted file mode 100644 index 9fb73a9e..00000000 --- a/tests/__data__/expected/logs/errors/us/directv.com.log +++ /dev/null @@ -1 +0,0 @@ -{"xmltv_id":"BravoEast.us","site":"directv.com","site_id":"237","lang":"en","date":"2022-01-21T00:00:00Z","error":"Invalid header value char"} diff --git a/tests/__data__/expected/logs/guides.log b/tests/__data__/expected/logs/guides/update.log similarity index 100% rename from tests/__data__/expected/logs/guides.log rename to tests/__data__/expected/logs/guides/update.log diff --git a/tests/__data__/input/logs/load-cluster/cluster_1.log b/tests/__data__/input/logs/cluster/load/cluster_1.log similarity index 100% rename from tests/__data__/input/logs/load-cluster/cluster_1.log rename to tests/__data__/input/logs/cluster/load/cluster_1.log diff --git a/tests/__data__/input/logs/errors.log b/tests/__data__/input/logs/errors.log deleted file mode 100644 index 097e0e87..00000000 --- a/tests/__data__/input/logs/errors.log +++ /dev/null @@ -1 +0,0 @@ -{"lang":"en","xmltv_id":"BravoEast.us","site_id":"237","site":"directv.com","configPath":"sites/directv.com/directv.com.config.js","groups":["us/directv.com"],"cluster_id":84,"_id":"00AluKCrCnfgrl8W","date":"2022-01-21T00:00:00Z","error":"Invalid header value char"} diff --git a/tests/__data__/input/logs/guides.log b/tests/__data__/input/logs/guides/update.log similarity index 100% rename from tests/__data__/input/logs/guides.log rename to tests/__data__/input/logs/guides/update.log diff --git a/tests/__data__/input/_readme.json b/tests/__data__/input/readme.json similarity index 100% rename from tests/__data__/input/_readme.json rename to tests/__data__/input/readme.json diff --git a/tests/commands/update-api.test.js b/tests/commands/api/update.test.js similarity index 52% rename from tests/commands/update-api.test.js rename to tests/commands/api/update.test.js index db5eae3e..7c4d2355 100644 --- a/tests/commands/update-api.test.js +++ b/tests/commands/api/update.test.js @@ -1,22 +1,20 @@ -const fs = require('fs') -const path = require('path') const { execSync } = require('child_process') +const fs = require('fs-extra') +const path = require('path') beforeEach(() => { - fs.rmdirSync('tests/__data__/output', { recursive: true }) - fs.mkdirSync('tests/__data__/output') + fs.emptyDirSync('tests/__data__/output') const stdout = execSync( - 'CHANNELS_PATH=tests/__data__/input/sites/**.channels.xml OUTPUT_DIR=tests/__data__/output/api node scripts/commands/update-api.js', + 'CHANNELS_PATH=tests/__data__/input/sites/**.channels.xml OUTPUT_DIR=tests/__data__/output/api npm run api:update', { encoding: 'utf8' } ) }) it('can generate guides.json', () => { - const output = content('tests/__data__/output/api/guides.json') - const expected = content('tests/__data__/expected/api/guides.json') - - expect(output).toBe(expected) + expect(content('tests/__data__/output/api/guides.json')).toBe( + content('tests/__data__/expected/api/guides.json') + ) }) function content(filepath) { diff --git a/tests/commands/cluster/load.test.js b/tests/commands/cluster/load.test.js new file mode 100644 index 00000000..6b8af69a --- /dev/null +++ b/tests/commands/cluster/load.test.js @@ -0,0 +1,32 @@ +const { execSync } = require('child_process') +const fs = require('fs-extra') +const path = require('path') + +beforeEach(() => { + fs.emptyDirSync('tests/__data__/output') + fs.copyFileSync('tests/__data__/input/database/queue.db', 'tests/__data__/output/queue.db') + + execSync( + 'DB_DIR=tests/__data__/output LOGS_DIR=tests/__data__/output/logs npm run cluster:load -- --cluster-id=1 --timeout=10000', + { encoding: 'utf8' } + ) +}) + +it('can load cluster', () => { + expect(content('tests/__data__/output/logs/cluster/load/cluster_1.log')).toEqual( + content('tests/__data__/expected/logs/cluster/load/cluster_1.log') + ) +}) + +function content(filepath) { + const data = fs.readFileSync(path.resolve(filepath), { + encoding: 'utf8' + }) + + return data + .split('\n') + .filter(l => l) + .map(l => { + return JSON.parse(l) + }) +} diff --git a/tests/commands/create-matrix.test.js b/tests/commands/create-matrix.test.js deleted file mode 100644 index f06ae06d..00000000 --- a/tests/commands/create-matrix.test.js +++ /dev/null @@ -1,25 +0,0 @@ -const fs = require('fs') -const path = require('path') -const { execSync } = require('child_process') - -beforeEach(() => { - fs.rmdirSync('tests/__data__/output', { recursive: true }) - fs.mkdirSync('tests/__data__/output') - fs.mkdirSync('tests/__data__/temp/database', { recursive: true }) - fs.copyFileSync('tests/__data__/input/database/queue.db', 'tests/__data__/temp/database/queue.db') -}) - -afterEach(() => { - fs.rmdirSync('tests/__data__/temp', { recursive: true }) -}) - -it('can create valid matrix', () => { - const result = execSync( - 'DB_DIR=tests/__data__/temp/database node scripts/commands/create-matrix.js', - { - encoding: 'utf8' - } - ) - - expect(result).toBe('::set-output name=matrix::{"cluster_id":[1,4,84,120]}\n') -}) diff --git a/tests/commands/guides/update.test.js b/tests/commands/guides/update.test.js new file mode 100644 index 00000000..bf326424 --- /dev/null +++ b/tests/commands/guides/update.test.js @@ -0,0 +1,38 @@ +const { execSync } = require('child_process') +const fs = require('fs-extra') +const path = require('path') + +beforeEach(() => { + fs.emptyDirSync('tests/__data__/output') + fs.copyFileSync('tests/__data__/input/database/queue.db', 'tests/__data__/output/queue.db') + fs.copyFileSync('tests/__data__/input/database/programs.db', 'tests/__data__/output/programs.db') + + const stdout = execSync( + 'DB_DIR=tests/__data__/output DATA_DIR=tests/__data__/input/data PUBLIC_DIR=tests/__data__/output LOGS_DIR=tests/__data__/output/logs npm run guides:update', + { encoding: 'utf8' } + ) +}) + +it('can generate /guides', () => { + expect(content('tests/__data__/output/guides/fr/chaines-tv.orange.fr.epg.xml')).toBe( + content('tests/__data__/expected/guides/fr/chaines-tv.orange.fr.epg.xml') + ) + + expect(content('tests/__data__/output/guides/zw/dstv.com.epg.xml')).toBe( + content('tests/__data__/expected/guides/zw/dstv.com.epg.xml') + ) +}) + +it('can create guides.log', () => { + expect(content('tests/__data__/output/logs/guides/update.log')).toBe( + content('tests/__data__/expected/logs/guides/update.log') + ) +}) + +function content(filepath) { + const data = fs.readFileSync(path.resolve(filepath), { + encoding: 'utf8' + }) + + return JSON.stringify(data) +} diff --git a/tests/commands/load-cluster.test.js b/tests/commands/load-cluster.test.js deleted file mode 100644 index 41347eb2..00000000 --- a/tests/commands/load-cluster.test.js +++ /dev/null @@ -1,40 +0,0 @@ -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const { execSync } = require('child_process') - -dayjs.extend(utc) - -beforeEach(() => { - fs.rmdirSync('tests/__data__/temp', { recursive: true }) - fs.rmdirSync('tests/__data__/output', { recursive: true }) - fs.mkdirSync('tests/__data__/output') - fs.mkdirSync('tests/__data__/temp/database', { recursive: true }) - fs.copyFileSync('tests/__data__/input/database/queue.db', 'tests/__data__/temp/database/queue.db') - - execSync( - 'DB_DIR=tests/__data__/temp/database LOGS_DIR=tests/__data__/output/logs node scripts/commands/load-cluster.js --cluster-id=1 --timeout=10000', - { encoding: 'utf8' } - ) -}) - -it('can load cluster', () => { - let output = content('tests/__data__/output/logs/load-cluster/cluster_1.log') - let expected = content('tests/__data__/expected/logs/load-cluster/cluster_1.log') - - expect(output).toEqual(expected) -}) - -function content(filepath) { - const data = fs.readFileSync(path.resolve(filepath), { - encoding: 'utf8' - }) - - return data - .split('\n') - .filter(l => l) - .map(l => { - return JSON.parse(l) - }) -} diff --git a/tests/commands/save-results.test.js b/tests/commands/programs/save.test.js similarity index 51% rename from tests/commands/save-results.test.js rename to tests/commands/programs/save.test.js index ff9a5db0..dad307c8 100644 --- a/tests/commands/save-results.test.js +++ b/tests/commands/programs/save.test.js @@ -1,25 +1,19 @@ -const fs = require('fs') -const path = require('path') const { execSync } = require('child_process') +const fs = require('fs-extra') +const path = require('path') beforeEach(() => { - fs.rmdirSync('tests/__data__/output', { recursive: true }) - fs.mkdirSync('tests/__data__/output') - fs.mkdirSync('tests/__data__/output/database', { recursive: true }) - - fs.copyFileSync( - 'tests/__data__/input/database/queue.db', - 'tests/__data__/output/database/queue.db' - ) + fs.emptyDirSync('tests/__data__/output') + fs.copyFileSync('tests/__data__/input/database/queue.db', 'tests/__data__/output/queue.db') const stdout = execSync( - 'DB_DIR=tests/__data__/output/database LOGS_DIR=tests/__data__/input/logs node scripts/commands/save-results.js', + 'DB_DIR=tests/__data__/output LOGS_DIR=tests/__data__/input/logs npm run programs:save', { encoding: 'utf8' } ) }) it('can save programs to database', () => { - let output = content('tests/__data__/output/database/programs.db') + let output = content('tests/__data__/output/programs.db') let expected = content('tests/__data__/expected/database/programs.db') output = output.map(i => { @@ -35,10 +29,9 @@ it('can save programs to database', () => { }) it('can update queue', () => { - const output = content('tests/__data__/output/database/queue.db') - const expected = content('tests/__data__/expected/database/queue-with-errors.db') - - expect(output).toEqual(expected) + expect(content('tests/__data__/output/queue.db')).toEqual( + content('tests/__data__/expected/database/queue-with-errors.db') + ) }) function content(filepath) { diff --git a/tests/commands/create-queue.test.js b/tests/commands/queue/create.test.js similarity index 69% rename from tests/commands/create-queue.test.js rename to tests/commands/queue/create.test.js index 80ed0508..32eb8d0d 100644 --- a/tests/commands/create-queue.test.js +++ b/tests/commands/queue/create.test.js @@ -1,13 +1,12 @@ -const fs = require('fs') -const path = require('path') const { execSync } = require('child_process') +const fs = require('fs-extra') +const path = require('path') beforeEach(() => { - fs.rmdirSync('tests/__data__/output', { recursive: true }) - fs.mkdirSync('tests/__data__/output') + fs.emptyDirSync('tests/__data__/output') const stdout = execSync( - 'DB_DIR=tests/__data__/output/database LOGS_DIR=tests/__data__/output/logs CHANNELS_PATH=tests/__data__/input/sites/*.channels.xml node scripts/commands/create-queue.js --max-clusters=1 --days=2', + 'DB_DIR=tests/__data__/output/database LOGS_DIR=tests/__data__/output/logs CHANNELS_PATH=tests/__data__/input/sites/*.channels.xml npm run queue:create -- --max-clusters=1 --days=2', { encoding: 'utf8' } ) }) @@ -35,13 +34,6 @@ it('can create queue', () => { ) }) -it('can log errors', () => { - let output = content('tests/__data__/output/logs/errors/ca/example.com.log') - let expected = content('tests/__data__/expected/logs/errors/ca/example.com.log') - - expect(output).toEqual(expected) -}) - function content(filepath) { const data = fs.readFileSync(path.resolve(filepath), { encoding: 'utf8' diff --git a/tests/commands/update-readme.test.js b/tests/commands/readme/update.test.js similarity index 50% rename from tests/commands/update-readme.test.js rename to tests/commands/readme/update.test.js index 108517c5..0faf804b 100644 --- a/tests/commands/update-readme.test.js +++ b/tests/commands/readme/update.test.js @@ -1,22 +1,20 @@ -const fs = require('fs') -const path = require('path') const { execSync } = require('child_process') +const fs = require('fs-extra') +const path = require('path') beforeEach(() => { - fs.rmdirSync('tests/__data__/output', { recursive: true }) - fs.mkdirSync('tests/__data__/output') + fs.emptyDirSync('tests/__data__/output') const stdout = execSync( - 'CHANNELS_PATH=tests/__data__/input/sites/*.channels.xml DATA_DIR=tests/__data__/input/data node scripts/commands/update-readme.js --config=tests/__data__/input/_readme.json', + 'CHANNELS_PATH=tests/__data__/input/sites/*.channels.xml DATA_DIR=tests/__data__/input/data npm run readme:update -- --config=tests/__data__/input/readme.json', { encoding: 'utf8' } ) }) it('can update readme.md', () => { - const output = content('tests/__data__/output/readme.md') - const expected = content('tests/__data__/expected/readme.md') - - expect(output).toBe(expected) + expect(content('tests/__data__/output/readme.md')).toBe( + content('tests/__data__/expected/_readme.md') + ) }) function content(filepath) { diff --git a/tests/commands/update-guides.test.js b/tests/commands/update-guides.test.js deleted file mode 100644 index 6d65f631..00000000 --- a/tests/commands/update-guides.test.js +++ /dev/null @@ -1,67 +0,0 @@ -const fs = require('fs') -const path = require('path') -const { execSync } = require('child_process') - -beforeEach(() => { - fs.rmdirSync('tests/__data__/output', { recursive: true }) - fs.mkdirSync('tests/__data__/output') - fs.mkdirSync('tests/__data__/temp/database', { recursive: true }) - fs.copyFileSync('tests/__data__/input/database/queue.db', 'tests/__data__/temp/database/queue.db') - fs.copyFileSync( - 'tests/__data__/input/database/programs.db', - 'tests/__data__/temp/database/programs.db' - ) - - const stdout = execSync( - 'DB_DIR=tests/__data__/temp/database DATA_DIR=tests/__data__/input/data PUBLIC_DIR=tests/__data__/output LOGS_DIR=tests/__data__/output/logs node scripts/commands/update-guides.js', - { encoding: 'utf8' } - ) -}) - -afterEach(() => { - fs.rmdirSync('tests/__data__/temp', { recursive: true }) -}) - -it('can generate /guides', () => { - const output1 = content('tests/__data__/output/guides/fr/chaines-tv.orange.fr.epg.xml') - const expected1 = content('tests/__data__/expected/guides/fr/chaines-tv.orange.fr.epg.xml') - - expect(output1).toBe(expected1) - - const output2 = content('tests/__data__/output/guides/zw/dstv.com.epg.xml') - const expected2 = content('tests/__data__/expected/guides/zw/dstv.com.epg.xml') - - expect(output2).toBe(expected2) -}) - -it('can create guides.log', () => { - const output = content('tests/__data__/output/logs/guides.log') - const expected = content('tests/__data__/expected/logs/guides.log') - - expect(output).toBe(expected) -}) - -it('can log errors', () => { - const output1 = content('tests/__data__/output/logs/errors/ru/yandex.ru.log') - const expected1 = content('tests/__data__/expected/logs/errors/ru/yandex.ru.log') - - expect(output1).toBe(expected1) - - const output2 = content('tests/__data__/output/logs/errors/us/directv.com.log') - const expected2 = content('tests/__data__/expected/logs/errors/us/directv.com.log') - - expect(output2).toBe(expected2) - - const output3 = content('tests/__data__/output/logs/errors/ge/magticom.ge.log') - const expected3 = content('tests/__data__/expected/logs/errors/ge/magticom.ge.log') - - expect(output3).toBe(expected3) -}) - -function content(filepath) { - const data = fs.readFileSync(path.resolve(filepath), { - encoding: 'utf8' - }) - - return JSON.stringify(data) -}