import { beforeAll, describe, expect, test } from 'vitest'
import { Channel, Feed, Guide } from '../../src/models'
import { DataManager } from '../../src/core/dataManager'

let guide: Guide

describe('Guide', () => {
  beforeAll(async () => {
    const dataManager = new DataManager({ dataDir: './tests/__data__/input/data' })
    await dataManager.loadFromDisk()
    dataManager.processData()

    const data = dataManager.getProcessedData()
    guide = data.guides.first()
  })

  test('channel', () => {
    expect(guide.channel).toBe('AndorraTV.ad')
  })

  test('feed', () => {
    expect(guide.feed).toBe(null)
  })

  test('site', () => {
    expect(guide.site).toBe('9tv.co.il')
  })

  test('site_id', () => {
    expect(guide.site_id).toBe('#')
  })

  test('site_name', () => {
    expect(guide.site_name).toBe('9 канал')
  })

  test('lang', () => {
    expect(guide.lang).toBe('ru')
  })

  test('sources', () => {
    expect(guide.sources[0]).toMatchObject({
      host: 'example.com',
      url: 'https://example.com/guide.xml',
      format: 'XML'
    })
  })

  test('getChannel()', () => {
    expect(guide.getChannel()).instanceOf(Channel)
  })

  test('getFeed()', () => {
    expect(guide.getFeed()).instanceof(Feed)
  })

  test('getStreamId()', () => {
    expect(guide.getStreamId()).toBe('AndorraTV.ad@SD')
  })

  test('toObject()', () => {
    expect(guide.toObject()).toMatchObject({
      channel: 'AndorraTV.ad',
      feed: null,
      site: '9tv.co.il',
      site_id: '#',
      site_name: '9 канал',
      lang: 'ru',
      sources: [
        {
          host: 'example.com',
          url: 'https://example.com/guide.xml',
          format: 'XML'
        }
      ]
    })
  })
})
