program-item-factory.spec.ts 3 KB
import ProgramItemFactory from '../src/program-item/program-item-factory';
import DummyProgramRepository from './dummy-program-repository';
import { PROGRAM_ITEM_TYPE_VIDEO, PROGRAM_ITEM_TYPE_SLIDESHOW } from '../src/program-item/program-item';

describe('Program Item Factory', () => {

    let dummyProgramRepository = new DummyProgramRepository();
    let programItemFactory = new ProgramItemFactory();
    programItemFactory.basePath = '/basepath/';

    beforeEach(() => {

        spyOn(dummyProgramRepository, "findById").and.callFake(() => {
            return new Promise<any> ((resolve, reject) => {
                resolve({
                    "_id" : "sample-video-id" ,
                    "type" : "asset" ,
                    "filename" : "somefilename.mp4" ,
                    "url" : "https://somewhere.com/blabalbalx"
                });
            });
        });

        spyOn(dummyProgramRepository, "findByIds").and.callFake(() => {
            return new Promise<any> ((resolve, reject) => {
                resolve([
                    {
                        "_id" : "image-id-1" ,
                        "type" : "asset" ,
                        "filename" : "somefilename1.jpg" ,
                        "url" : "https://somewhere.com/1" 
                    },
                    {
                        "_id" : "image-id-2" ,
                        "type" : "asset" ,
                        "filename" : "somefilename2.jpg" ,
                        "url" : "https://somewhere.com/2" 
                    },
                    {
                        "_id" : "image-id-3" ,
                        "type" : "asset" ,
                        "filename" : "somefilename3.jpg" ,
                        "url" : "https://somewhere.com/3" 
                    },
                ]);
            });            
        });

        programItemFactory.programRepository = dummyProgramRepository;
    });

    it('should return a video page item', (done) => {
        programItemFactory.prepareProgramItem(PROGRAM_ITEM_TYPE_VIDEO, {
            video : 'sample-video-id'
        }).then((programItem) => {
            expect(programItem.type).toEqual(PROGRAM_ITEM_TYPE_VIDEO);
            expect(programItem.data.video).toEqual('/basepath/somefilename.mp4');
            done();
        });
    });

    it('should return a slideshow page item', (done) => {
        programItemFactory.prepareProgramItem(PROGRAM_ITEM_TYPE_SLIDESHOW, {
            images : ['image-id-1','image-id-2','image-id-3'] ,
            settings : {
                speed  : 1000 ,
                effect : 'something'
            }
        }).then((programItem) => {
            expect(programItem.type).toEqual(PROGRAM_ITEM_TYPE_SLIDESHOW);
            expect(programItem.data.speed).toEqual(1000);
            expect(programItem.data.effect).toEqual('something');
            expect(programItem.data.images).toEqual(['/basepath/somefilename1.jpg','/basepath/somefilename2.jpg','/basepath/somefilename3.jpg']);
            done();
        });
    });

});