///
///
///
///
///
///
describe('ViewController', function () {
const elements:HTMLElement[] = [
jQuery('
')[0],
jQuery('')[0]
];
const finder = new ContentBlockFinder();
const converter = new DomContentBlockConverter();
const dataService = new DataService(null);
const drawer = new ContentBlockDrawer();
const editController = new EditController(null, null, null, null, null);
const controller = new ViewController(finder, converter, dataService, drawer, editController);
const domContent1:DomContentBlock = converter.convert(elements[0]);
const domContent2:DomContentBlock = converter.convert(elements[1]);
beforeEach(function() {
spyOn(finder, 'find').and.returnValue(elements);
spyOn(finder, 'find_by').and.returnValue([elements[1]]);
spyOn(converter, 'convert').and.callThrough();
spyOn(dataService, 'loadEditableContent').and.callFake((cb:ContentBlock) => {
const d = new Date(2015, 11, 21);
const filledCb = new ContentBlock(`real content ${cb.contentPath}`, cb.contentPath, cb.apiKey, cb.apiHost, d, d);
const editableCb = new EditableContentBlock(filledCb, null);
return jQuery.Deferred().resolve(editableCb).promise();
});
spyOn(dataService, 'loadReadonlyContent').and.callFake((cb:ContentBlock) => {
const d = new Date(2015, 11, 21);
const filledCb = new ContentBlock(`real content ${cb.contentPath}`, cb.contentPath, cb.apiKey, cb.apiHost, d, d);
return jQuery.Deferred().resolve(filledCb).promise();
});
spyOn(dataService, 'loadReadonlyContentFromCache').and.callFake((cb:ContentBlock) => {
const d = new Date(2015, 11, 21);
return new ContentBlock(`cached content ${cb.contentPath}`, cb.contentPath, cb.apiKey, cb.apiHost, d, d);
});
});
it('initializes the contents', function () {
const editControllerSpy = spyOn(editController, 'prepareEdit');
editControllerSpy.and.callFake((dom:DomContentBlock) => {
expect(dom.contentBlock.contentPath).toBe('editable-path');
});
const drawerSpy = spyOn(drawer, 'draw').and.stub();
controller.init();
expect(finder.find).toHaveBeenCalled();
expect(converter.convert).toHaveBeenCalledWith(elements[0]);
expect(converter.convert).toHaveBeenCalledWith(elements[1]);
expect(dataService.loadReadonlyContent).toHaveBeenCalledWith(domContent1.contentBlock);
expect(dataService.loadEditableContent).toHaveBeenCalledWith(domContent2.contentBlock, domContent2.privateApiKey);
expect(drawer.draw).toHaveBeenCalled();
expect(editControllerSpy.calls.count()).toBe(1);
expect(editController.prepareEdit).toHaveBeenCalled();
const drawFirstDom = drawerSpy.calls.first().args[0];
expect(drawFirstDom.contentBlock.content).toBe(`cached content ${drawFirstDom.contentBlock.contentPath}`);
const drawSecondDom = drawerSpy.calls.mostRecent().args[0];
expect(drawSecondDom.contentBlock.content).toBe(`real content ${drawSecondDom.contentBlock.contentPath}`);
});
it('initializes the contents of specified content-blocks', function () {
const editControllerSpy = spyOn(editController, 'prepareEdit');
editControllerSpy.and.callFake((dom:DomContentBlock) => {
expect(dom.contentBlock.contentPath).toBe('editable-path');
});
const drawerSpy = spyOn(drawer, 'draw').and.stub();
controller.init('editable-path');
expect(finder.find).not.toHaveBeenCalled();
expect(finder.find_by).toHaveBeenCalledWith('editable-path');
expect(converter.convert).not.toHaveBeenCalledWith(elements[0]);
expect(converter.convert).toHaveBeenCalledWith(elements[1]);
expect(dataService.loadReadonlyContent).not.toHaveBeenCalledWith(domContent1.contentBlock);
expect(dataService.loadEditableContent).toHaveBeenCalledWith(domContent2.contentBlock, domContent2.privateApiKey);
expect(drawer.draw).toHaveBeenCalled();
expect(editControllerSpy.calls.count()).toBe(1);
expect(editController.prepareEdit).toHaveBeenCalled();
const drawSecondDom = drawerSpy.calls.mostRecent().args[0];
expect(drawSecondDom.contentBlock.content).toBe(`real content ${drawSecondDom.contentBlock.contentPath}`);
});
});