/// /// /// /// /// /// /// /// /// /// describe('EditController', function () { const block = new ContentBlock('content', 'path', 'api-key', 'host', new Date(2015, 10, 1), new Date(2015, 10, 1), 'default', 17); const element = jQuery('
')[0]; const dom = new DomContentBlock(element, block, 'private-key', new RenuoUploadCredentials('', '')); const preparer:EditorPreparer = new CkeditorPreparer(); const editorLoader:EditorLoader = new CkeditorLoader(new ScriptLoader()); const uploadLoader = new UploadLoader(new ScriptLoader(), new CSSInjector()); const dataService = new DataService(null); const contentBlockDrawer = new ContentBlockDrawer(); const controller = new EditController(dataService, editorLoader, uploadLoader, preparer, contentBlockDrawer); it('prepares an element for editing', function () { spyOn(preparer, 'prepare'); const loaderSpy = spyOn(editorLoader, 'loadEditor'); const uploadSpy = spyOn(uploadLoader, 'loadUpload'); const deferredEditor = jQuery.Deferred(); const deferredUpload = jQuery.Deferred(); loaderSpy.and.returnValue(deferredEditor.promise()); uploadSpy.and.returnValue(deferredUpload.promise()); controller.prepareEdit(dom); expect(editorLoader.loadEditor).toHaveBeenCalled(); expect(preparer.prepare).not.toHaveBeenCalled(); deferredEditor.resolve(); expect(preparer.prepare).not.toHaveBeenCalled(); deferredUpload.resolve(); expect(preparer.prepare).toHaveBeenCalledWith(dom, jasmine.any(Function)); expect(loaderSpy.calls.count()).toBe(1); expect(uploadSpy.calls.count()).toBe(1); controller.prepareEdit(dom); expect(loaderSpy.calls.count()).toBe(1); expect(uploadSpy.calls.count()).toBe(1); }); it('edits a dom element successfully', function () { dom.contentBlock = block; const deferred = jQuery.Deferred(); spyOn(preparer, 'notifySave'); spyOn(contentBlockDrawer, 'draw'); const dataServiceSpy = spyOn(dataService, 'storeContent'); dataServiceSpy.and.returnValue(deferred); controller.editContent(dom, 'this is new content'); const newContentBlock = new ContentBlock('this is new content', block.contentPath, block.apiKey, block.apiHost, block.createdAt, block.updatedAt, block.defaultContent, block.version); expect(dataServiceSpy).toHaveBeenCalledWith(newContentBlock, 'private-key'); expect(preparer.notifySave).not.toHaveBeenCalled(); const response = {content_block: {version: 234}}; deferred.resolve(response); expect(preparer.notifySave).toHaveBeenCalledWith(dom, true, response); expect(contentBlockDrawer.draw).toHaveBeenCalledWith(dom); expect(dom.contentBlock.version).toEqual(234); }); it('edits a dom element unsuccessfully', function () { dom.contentBlock = block; const deferred = jQuery.Deferred(); spyOn(preparer, 'notifySave'); const dataServiceSpy = spyOn(dataService, 'storeContent'); dataServiceSpy.and.returnValue(deferred); controller.editContent(dom, 'this is new content'); const newContentBlock = new ContentBlock('this is new content', block.contentPath, block.apiKey, block.apiHost, block.createdAt, block.updatedAt, block.defaultContent, block.version); expect(dataServiceSpy).toHaveBeenCalledWith(newContentBlock, 'private-key'); expect(preparer.notifySave).not.toHaveBeenCalled(); const response = {foo: 'baz'}; deferred.reject(response); expect(preparer.notifySave).toHaveBeenCalledWith(dom, false, response); }); });