From 3608891effd3f4a50d5ff759154b04207773d220 Mon Sep 17 00:00:00 2001 From: 4gray Date: Wed, 3 Feb 2021 19:54:57 +0100 Subject: [PATCH] test: extend tests for epg-list component --- .../epg-list/epg-list.component.spec.ts | 115 +++++++++++++++++- .../components/epg-list/epg-list.component.ts | 2 +- 2 files changed, 115 insertions(+), 2 deletions(-) diff --git a/src/app/player/components/epg-list/epg-list.component.spec.ts b/src/app/player/components/epg-list/epg-list.component.spec.ts index 9a1859ae1..169fe22fa 100644 --- a/src/app/player/components/epg-list/epg-list.component.spec.ts +++ b/src/app/player/components/epg-list/epg-list.component.spec.ts @@ -1,13 +1,79 @@ +/* eslint-disable @typescript-eslint/unbound-method */ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { EpgListComponent } from './epg-list.component'; +import { EpgListComponent, EpgData } from './epg-list.component'; import { MatListModule } from '@angular/material/list'; import { MockModule } from 'ng-mocks'; import { ElectronService } from '../../../services/electron.service'; import { ElectronServiceStub } from '../../../home/home.component.spec'; +import * as moment from 'moment'; +import { EPG_GET_PROGRAM_DONE } from '../../../shared/ipc-commands'; +import { ChannelStore } from '../../../state'; describe('EpgListComponent', () => { let component: EpgListComponent; let fixture: ComponentFixture; + let electronService: ElectronService; + let channelStore: ChannelStore; + + const MOCKED_PROGRAMS = { + channel: { + id: '12345', + name: [ + { + lang: 'ab', + value: 'test me', + }, + { + lang: 'ar', + value: 'ar test', + }, + ], + icon: [], + url: [], + }, + items: [ + { + start: moment(Date.now()).format('YYYYMMDD'), + stop: moment(Date.now()).format('YYYYMMDD'), + channel: '12345', + title: [{ lang: 'en', value: 'NOW on PBS' }], + desc: [ + { + lang: 'en', + value: + "Jordan's Queen Rania has made job creation a priority to help curb the staggering unemployment rates among youths in the Middle East.", + }, + ], + date: ['20080711'], + category: [ + { lang: 'en', value: 'Newsmagazine' }, + { lang: 'en', value: 'Interview' }, + ], + episodeNum: [ + { system: 'dd_progid', value: 'EP01006886.0028' }, + { system: 'onscreen', value: '427' }, + ], + previouslyShown: [{ start: '20080711000000' }], + subtitles: [{ type: 'teletext' }], + rating: [ + { + system: 'VCHIP', + value: 'TV-G', + }, + ], + credits: [ + { + role: 'actor', + name: 'Peter Bergman', + }, + ], + icon: [ + 'http://imageswoapi.whatsonindia.com/WhatsOnTV/images/ProgramImages/xlarge/38B4DE4E9A7132257749051B6C8B4F699DB264F4V.jpg', + ], + audio: [], + }, + ], + }; beforeEach(async(() => { TestBed.configureTestingModule({ @@ -22,10 +88,57 @@ describe('EpgListComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(EpgListComponent); component = fixture.componentInstance; + electronService = TestBed.inject(ElectronService); + channelStore = TestBed.inject(ChannelStore); fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + it('should handle epg programs', () => { + component.handleEpgData({ payload: MOCKED_PROGRAMS }); + fixture.detectChanges(); + expect(component.timeNow).toBeTruthy(); + expect(component.dateToday).toBeTruthy(); + expect(component.channel).toBeTruthy(); + expect(component.items).toHaveLength(1); + }); + + it('should handle an empty epg programs object', () => { + const payload = ({} as unknown) as EpgData; + component.handleEpgData({ payload }); + fixture.detectChanges(); + expect(component.timeNow).toBeFalsy(); + expect(component.dateToday).toBeFalsy(); + expect(component.channel).toBeNull(); + expect(component.items).toHaveLength(0); + }); + + it('should remove ipc listeners on destroy', () => { + spyOn(electronService.ipcRenderer, 'removeAllListeners'); + component.ngOnDestroy(); + expect( + electronService.ipcRenderer.removeAllListeners + ).toHaveBeenCalledTimes(1); + expect( + electronService.ipcRenderer.removeAllListeners + ).toHaveBeenCalledWith(EPG_GET_PROGRAM_DONE); + }); + + it('should set epg program as active', () => { + spyOn(channelStore, 'setActiveEpgProgram'); + component.setEpgProgram(MOCKED_PROGRAMS.items[0], false); + expect(channelStore.setActiveEpgProgram).toHaveBeenCalledTimes(1); + expect(channelStore.setActiveEpgProgram).toHaveBeenCalledWith( + MOCKED_PROGRAMS.items[0] + ); + }); + + it('should reset active epg program', () => { + spyOn(channelStore, 'resetActiveEpgProgram'); + component.setEpgProgram(MOCKED_PROGRAMS.items[0], true); + expect(channelStore.resetActiveEpgProgram).toHaveBeenCalledTimes(1); + }); }); diff --git a/src/app/player/components/epg-list/epg-list.component.ts b/src/app/player/components/epg-list/epg-list.component.ts index 30b88ff5b..8f98a5230 100644 --- a/src/app/player/components/epg-list/epg-list.component.ts +++ b/src/app/player/components/epg-list/epg-list.component.ts @@ -6,7 +6,7 @@ import { ElectronService } from '../../../services/electron.service'; import { EPG_GET_PROGRAM_DONE } from '../../../shared/ipc-commands'; import { ChannelStore } from '../../../state'; -interface EpgData { +export interface EpgData { channel: EpgChannel; items: EpgProgram[]; }