Back to Repositories

Validating Playlist Channel Management in IPTV-org Repository

This test suite validates playlist functionality in the IPTV-org repository, focusing on channel validation and error handling. It ensures proper handling of blocked channels and validates channel IDs against the database.

Test Coverage Overview

The test suite provides comprehensive coverage of playlist validation scenarios.

Key areas tested include:
  • Blocked channel detection and error handling
  • Channel ID validation against database
  • Error message formatting and content
  • Warning message handling for invalid channel IDs

Implementation Analysis

The implementation uses Jest’s testing framework with Node’s child_process for command execution validation. The tests employ execSync to run playlist validation commands and verify output through expect assertions. Error handling patterns specifically check for expected error statuses and message content.

Technical Details

Testing tools and configuration:
  • Jest test framework
  • Node.js child_process module
  • TypeScript for type safety
  • Custom data directories for test isolation
  • Environment variable configuration for test data paths

Best Practices Demonstrated

The test suite demonstrates several testing best practices including proper error handling, isolated test data, and clear assertion messages. It uses type-safe error handling with TypeScript, maintains separate test data directories, and implements precise output validation patterns.

iptv-org/iptv

tests/commands/playlist/validate.test.ts

            
import { execSync } from 'child_process'

type ExecError = {
  status: number
  stdout: string
}

it('show an error if channel name in the blocklist', () => {
  try {
    execSync(
      'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/streams_validate npm run playlist:validate -- us_blocked.m3u',
      {
        encoding: 'utf8'
      }
    )
    process.exit(1)
  } catch (error) {
    expect((error as ExecError).status).toBe(1)
    expect((error as ExecError).stdout).toContain(
      'us_blocked.m3u\n 2     error    "Fox Sports 2 Asia (Thai)" is on the blocklist due to claims of copyright holders or NSFW content (https://github.com/iptv-org/iptv/issues/0000)\n\n1 problems (1 errors, 0 warnings)\n'
    )
  }
})

it('show a warning if channel has wrong id', () => {
  const stdout = execSync(
    'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/streams_validate npm run playlist:validate -- wrong_id.m3u',
    {
      encoding: 'utf8'
    }
  )

  expect(stdout).toContain(
    'wrong_id.m3u\n 2     warning  "qib22lAq1L.us" is not in the database\n\n1 problems (0 errors, 1 warnings)\n'
  )
})