diff --git a/tests/__data__/input/sites/duplicate.channels.xml b/tests/__data__/input/sites/duplicate.channels.xml
new file mode 100644
index 00000000..000cd700
--- /dev/null
+++ b/tests/__data__/input/sites/duplicate.channels.xml
@@ -0,0 +1,7 @@
+
+
+
+ CNN International
+ CNN International
+
+
\ No newline at end of file
diff --git a/tests/__data__/input/sites/wrong_xmltv_id.channels.xml b/tests/__data__/input/sites/wrong_xmltv_id.channels.xml
new file mode 100644
index 00000000..638ab301
--- /dev/null
+++ b/tests/__data__/input/sites/wrong_xmltv_id.channels.xml
@@ -0,0 +1,6 @@
+
+
+
+ CNN International
+
+
\ No newline at end of file
diff --git a/tests/commands/channels/validate.test.js b/tests/commands/channels/validate.test.js
new file mode 100644
index 00000000..0c7e6026
--- /dev/null
+++ b/tests/commands/channels/validate.test.js
@@ -0,0 +1,49 @@
+const { execSync } = require('child_process')
+
+it('will show a message if the file contains a duplicate', () => {
+ try {
+ const stdout = execSync(
+ 'npm run channels:validate -- tests/__data__/input/sites/duplicate.channels.xml',
+ {
+ encoding: 'utf8'
+ }
+ )
+ console.log(stdout)
+ process.exit(1)
+ } catch (err) {
+ expect(err.status).toBe(1)
+ expect(err.stdout).toBe(
+ `\n> channels:validate\n> node scripts/commands/channels/validate.js "tests/__data__/input/sites/duplicate.channels.xml"\n\ntests/__data__/input/sites/duplicate.channels.xml
+┌─────────┬─────────────┬──────┬─────────────────────────────┬─────────┬─────────────────────┐
+│ (index) │ type │ lang │ xmltv_id │ site_id │ name │
+├─────────┼─────────────┼──────┼─────────────────────────────┼─────────┼─────────────────────┤
+│ 0 │ 'duplicate' │ 'en' │ 'CNNInternationalEurope.us' │ '140' │ 'CNN International' │
+└─────────┴─────────────┴──────┴─────────────────────────────┴─────────┴─────────────────────┘
+\n1 error(s) in 1 file(s)\n`
+ )
+ }
+})
+
+it('will show a message if the file contains a channel with wrong xmltv_id', () => {
+ try {
+ const stdout = execSync(
+ 'npm run channels:validate -- tests/__data__/input/sites/wrong_xmltv_id.channels.xml',
+ {
+ encoding: 'utf8'
+ }
+ )
+ console.log(stdout)
+ process.exit(1)
+ } catch (err) {
+ expect(err.status).toBe(1)
+ expect(err.stdout).toBe(
+ `\n> channels:validate\n> node scripts/commands/channels/validate.js "tests/__data__/input/sites/wrong_xmltv_id.channels.xml"\n\ntests/__data__/input/sites/wrong_xmltv_id.channels.xml
+┌─────────┬──────────────────┬──────┬────────────────────┬─────────┬─────────────────────┐
+│ (index) │ type │ lang │ xmltv_id │ site_id │ name │
+├─────────┼──────────────────┼──────┼────────────────────┼─────────┼─────────────────────┤
+│ 0 │ 'wrong_xmltv_id' │ 'en' │ 'CNNInternational' │ '140' │ 'CNN International' │
+└─────────┴──────────────────┴──────┴────────────────────┴─────────┴─────────────────────┘
+\n1 error(s) in 1 file(s)\n`
+ )
+ }
+})