describe('Test Edit Summary directive', function () { var compile, scope, $httpBackend, attachmentService, objectValueMapperService, $timeout, events, rootScope, deferred, $q; beforeEach(module('myitsmApp', 'templates')); beforeEach(function () { inject(function ($compile, $rootScope, $injector, _attachmentService_, _objectValueMapperService_, _$timeout_, _events_, _$q_) { $httpBackend = $injector.get('$httpBackend'); var getLocale = function () { return readJSON('scripts/app/i18n/resources-locale_en.json'); }; $httpBackend.whenGET(/^scripts\/app\/i18n\/resources-locale_en.*$/).respond(getLocale()); $httpBackend.whenGET('/smartit/rest/v2/metadata?type=global').respond(200); $httpBackend.whenGET('/smartit/rest/serverstates').respond(200); $httpBackend.whenGET('/smartit/rest/sessionstatus?getLicenseKey=true').respond(200); $httpBackend.whenPUT('/smartit/rest/task/all').respond([]); compile = $compile; rootScope = $rootScope; scope = $rootScope.$new(); attachmentService = _attachmentService_; objectValueMapperService = _objectValueMapperService_; $timeout = _$timeout_; events = _events_; $q = _$q_; deferred = $q.defer(); }); }); beforeEach(function () { scope.context = 'detail'; scope.asset = { type: 'task' }; scope.data = { members: [ { name: 'desc', type: 'textAreaField', required: true } ] }; scope.updateIsHandledByParent = false; }); function getCompiledElement() { var element = angular.element(''); var compiledElement = compile(element)(scope); scope.$digest(); return compiledElement; } it('should compile', function () { var directiveElem = getCompiledElement(), divElem = directiveElem[0]; expect(divElem).toBeDefined(); }); it('should not be editable', function () { scope.isEditable = false; var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); expect(isolateScope.isLocked).toBeTruthy(); }); it('should successfully upload the attachment', function () { scope.editMode = true; scope.dropable = false; var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(), attachment = { pendingSave: true, name: 'Dummy.xls', size: 940544, file: {}, fileExt: 'xls' }, descField = { name: 'desc', value: { attachmentToUpload: [] } }; isolateScope.showAttachment = true; isolateScope.$digest(); spyOn(attachmentService, 'prepareFileToUpload').and.returnValue(attachment); spyOn(objectValueMapperService, 'getFieldByName').and.returnValue(descField); isolateScope.handleFileChange(directiveElem.find('.attach-tool__file-input')[0]); $timeout.flush(); expect(isolateScope.attachmentToUpload[0].name).toBe('Dummy.xls'); expect(descField.value.attachmentToUpload[0].name).toBe('Dummy.xls'); }); it('should dismiss the uploaded attachment', function () { var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); spyOn(attachmentService, 'dismissAttachment'); isolateScope.dismissAttachment(); expect(attachmentService.dismissAttachment).toHaveBeenCalled(); }); it('should open uploaded attachment on click', function () { var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); spyOn(attachmentService, 'getAttachmentFile'); isolateScope.handleAttachmentClick(); expect(attachmentService.getAttachmentFile).toHaveBeenCalled(); }); it('should not open uploaded attachment if it is in draft or create state', function () { scope.context = 'draft'; var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(), returnVal; returnVal = isolateScope.handleAttachmentClick(); expect(returnVal).toBeFalsy(); }); it('should handle toggle Edit Mode event handler and successfully toggle to edit mode if data is already present in scope', function () { scope.data.value = { desc: 'dummy' }; var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); isolateScope.edit(); expect(isolateScope.editMode).toBeTruthy(); expect(isolateScope.descCopy).toBe('dummy'); }); it('should successfully toggle to edit mode if data is not present in scope', function () { scope.asset.desc = 'dummy'; var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); rootScope.$broadcast(events.TOGGLE_EDIT_MODE); expect(isolateScope.editMode).toBeTruthy(); expect(isolateScope.descCopy).toBe('dummy'); }); it('should should handle cancel event handler and revert all changes on click of cancel', function () { scope.asset.attachments = [{ name: 'Dummy.xls' }]; scope.descCopy = 'dummy test 1'; scope.asset.desc = 'dummy'; scope.context = 'draft'; scope.data.value = { desc: '' }; scope.data.name = 'description'; var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); spyOn(isolateScope, '$emit'); rootScope.$broadcast(events.DISCARD_CHANGES); expect(isolateScope.attachmentToDelete.length).toBe(0); expect(isolateScope.attachmentToUpload.length).toBe(0); expect(isolateScope.descCopy).toBe('dummy'); expect(isolateScope.attachments[0].name).toBe('Dummy.xls'); expect(isolateScope.ticket.attachments[0].name).toBe('Dummy.xls'); expect(isolateScope.$emit).toHaveBeenCalledWith(events.WIDGET_VALUE_CHANGE, { fieldName: 'description' }); }); it('should change the height and check for max length of the text area', function () { var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); isolateScope.data.name = 'description'; isolateScope.context = 'create'; isolateScope.descCopy = 'this is description of text box'; isolateScope.data.value = { desc: '' }; spyOn(isolateScope, '$emit'); isolateScope.onTicketDescriptionChange(); expect(isolateScope.ticket.desc).toBe('this is de'); expect(isolateScope.$emit).toHaveBeenCalledWith(events.WIDGET_VALUE_CHANGE, { fieldName: 'description', memberName: 'description' }); expect(isolateScope.$emit).toHaveBeenCalledWith(events.FIELD_FORM_IS_DIRTY); }); it('should toggle summary on click of show/less link', function () { var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); isolateScope.summaryExpanded = false; isolateScope.toggleSummary(); $timeout.flush(); expect(isolateScope.summaryExpanded).toBeTruthy(); }); it('should handle afterSaveChangesHandler event Handler on click of Save button', function () { scope.asset.attachments = [{ name: 'Attach.xls' }]; var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(), descField = { value: { attachmentToUpload: [{ name: 'Dummy.xls' }], attachmentToDelete: [{ name: 'Delete.xls' }] } }; spyOn(objectValueMapperService, 'getFieldByName').and.returnValue(descField); rootScope.$broadcast(events.AFTER_SAVED_CHANGES); expect(descField.value.attachmentToUpload.length).toBe(0); expect(isolateScope.attachments[0].name).toBe('Attach.xls'); }); it('should handle handleSaveChanges event Handler on click of Save button', function () { var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(), response = [{ name: 'Dummy1.xls', pendingSave: false }]; spyOn($q, 'all').and.callFake(function () { deferred.resolve(response); return deferred.promise; }); spyOn(isolateScope, '$emit'); spyOn(attachmentService, 'deleteAttachment'); spyOn(attachmentService, 'uploadAttachment').and.callFake(function () { deferred.resolve(response); return deferred.promise; }); isolateScope.state.descriptionChanged = true; isolateScope.descCopy = 'Dummy Text'; isolateScope.attachmentToUpload = [{ name: 'Dummy.xls', pendingSave: false }]; isolateScope.attachmentToDelete = [{ name: 'Delete.xls', pendingSave: false, attachmentReference: {} }]; rootScope.$broadcast(events.SAVE_CHANGES); isolateScope.$digest(); expect(isolateScope.attachments[0].name).toBe('Dummy1.xls'); expect(attachmentService.deleteAttachment).toHaveBeenCalled(); }); it('should handle handleSaveChanges event Handler and revert all changes in case of any error', function () { var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); spyOn($q, 'all').and.callFake(function () { deferred.reject(''); return deferred.promise; }); isolateScope.state.descriptionChanged = false; isolateScope.descCopy = 'Dummy Text'; isolateScope.ticket.desc = 'old data'; isolateScope.data.value = { desc: '' }; rootScope.$broadcast(events.SAVE_CHANGES); isolateScope.$digest(); expect(isolateScope.descCopy).toBe('old data'); }); it('should handle handleSaveAllChangesComplete event Handler', function () { scope.updateIsHandledByParent = true; var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); rootScope.$broadcast(events.SAVE_ALL_CHANGES_COMPLETE); expect(isolateScope.editMode).toBeFalsy(); expect(isolateScope.state.descriptionChanged).toBeFalsy(); }); it('should successfully watch setValueFlag', function () { var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); isolateScope.data.value = { desc: '' }; isolateScope.data.setValueFlag = 'Dummy Data'; isolateScope.$digest(); expect(isolateScope.data.setValueFlag).toBe('#$#'); }); it('should successfully hanlde DESC_CHANGED event handler and update the description on call', function () { var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); isolateScope.ticket.desc = 'Dummy Data'; rootScope.$broadcast(events.DESC_CHANGED); expect(isolateScope.descCopy).toBe('Dummy Data'); }); it('should successfully hanlde CLEAR_DESC event handler and clear the description on call', function () { var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); isolateScope.ticket.desc = 'Dummy Data'; isolateScope.descCopy = 'Dummy Data'; rootScope.$broadcast(events.CLEAR_DESC); expect(isolateScope.descCopy).toBe(''); expect(isolateScope.ticket.desc).toBe(''); }); it('should successfully handle TICKET_TEMPLATE_UPDATED event handler on update of ticket template', function () { var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); isolateScope.data = { name: 'description', value: { desc: '' } }; isolateScope.$emit(events.TICKET_TEMPLATE_UPDATED, { desc: 'Dummy'}); expect(isolateScope.descCopy).toBe('Dummy'); expect(isolateScope.data.value.desc).toBe('Dummy'); }); it('should successfully destroy scope', function () { var directiveElem = getCompiledElement(), isolateScope = directiveElem.isolateScope(); expect(isolateScope.$parent.context).toBe('detail'); isolateScope.$destroy(); expect(isolateScope.$parent).toBeNull(); }); });