program-manager.spec.ts 2.65 KB
import {DummyProgramRepository} from './dummy-program-repository';
import {ProgramManager} from '../src/program-manager';
import {Util} from '../src/util';

describe('Program Manager', () => {

    let programManager = new ProgramManager();

    it('should find respective program item, according to given time', () => {
            let nowInMinutes1 = Util.convertToMinutes("00:00");
            let nowInMinutes2 = Util.convertToMinutes("03:23");
            let nowInMinutes3 = Util.convertToMinutes("23:29");

            let schedule = {
                "23:30" : "item-4" ,
                "07:20" : "item-2" ,
                "16:47" : "item-3" ,
                "03:22" : "item-1" ,
                "00:00" : "item-0"
            };

            expect(programManager.findCurrentProgramItem(schedule, nowInMinutes1)).toEqual("item-0");
            expect(programManager.findCurrentProgramItem(schedule, nowInMinutes2)).toEqual("item-1");
            expect(programManager.findCurrentProgramItem(schedule, nowInMinutes3)).toEqual("item-3");
        });

});

describe('Program Segment', () => {

    let programManager = new ProgramManager();
    let dummyProgramRepository = new DummyProgramRepository();

    beforeEach(() => {

        let schedule = {};
        schedule['2016-12-24']      = 'xmas-program-segment';
        schedule[Util.getISODate()] = 'program-segment-of-today';
        
        spyOn(dummyProgramRepository, "findByType").and.callFake(() => {
            return new Promise<any> ((resolve, reject) => {
                resolve([{
                    _id : 'test-program-1' ,
                    type : "program" ,
                    default : "xmas-program-segment" ,
                    schedule : schedule
                }]);
            });
        });

        spyOn(dummyProgramRepository, "findById").and.callFake(() => {
            return new Promise<any> ((resolve, reject) => {
                resolve({
                    _id : 'program-segment-of-today' ,
                    type : 'program_segment'
                });
            });            
        });

        programManager.programRepository = dummyProgramRepository;
    });

    it('retrieve program segment for today', (done) => {

        programManager.findCurrentProgramSegment()
            .then(programSegment => {

                expect(dummyProgramRepository.findById).toHaveBeenCalled();
                expect(dummyProgramRepository.findByType).toHaveBeenCalled();

                expect(programSegment._id).toEqual('program-segment-of-today');
                expect(programSegment.type).toEqual('program_segment');
                
                done();
            });
    }, 5000);

});