describe('Test person name directive', function () { var compile, scope, $httpBackend, objectValueMapperService, userModel, events, createTicketModel, permissionModel; beforeEach(module('myitsmApp', 'templates')); beforeEach(inject(function($compile, $rootScope, $injector, _userModel_, _objectValueMapperService_, _permissionModel_, _events_, _createTicketModel_) { $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(); $httpBackend.whenGET('/smartit/restapi/person/supportgroupperson').respond(); $httpBackend.whenGET('/smartit/rest/serverstates').respond(200); $httpBackend.whenGET('/smartit/rest/sessionstatus?getLicenseKey=true').respond(200); compile = $compile; scope = $rootScope.$new(); objectValueMapperService = _objectValueMapperService_; userModel = _userModel_; events = _events_; createTicketModel = _createTicketModel_; permissionModel = _permissionModel_; var field = { "id": "AGGAA5V0HG8SIAOTBARJABEX23N4Y8", "name": "customer", "type": "personName", "dataType": "widget", "displayOrder": 0, "groupMember": false, "widgetMember": false, "ootb": true, "hide": false, "required": true, "editable": true, "hideLabel": false, "members": [ { "id": "AGGAA5V0HG8SIAOTBJ3YABFFZCN5M1", "name": "firstName", "itsmFieldId": 1000000019, "parentId": "AGGAA5V0HG8SIAOTBARJABEX23N4Y8", "type": "characterField", "dataType": "text", "displayOrder": 0, "label": "First Name", "groupMember": false, "widgetMember": true, "ootb": true, "hide": false, "required": true, "editable": true, "hideLabel": false, "rowCount": 1, "maxLength": 30, "accessible": true }, { "id": "AGGAA5V0HG8SIAOTC5JJABG1U3N8Y0", "name": "lastName", "itsmFieldId": 1000000018, "parentId": "AGGAA5V0HG8SIAOTBARJABEX23N4Y8", "type": "characterField", "dataType": "text", "displayOrder": 1, "label": "Last Name", "groupMember": false, "widgetMember": true, "ootb": true, "hide": false, "required": true, "editable": true, "hideLabel": false, "rowCount": 1, "maxLength": 30, "accessible": true }, { "id": "AGGAA5V0HG8SIAOTEEVBABIB6GNOHH", "name": "customerVIPFlag", "itsmFieldId": 1000000026, "parentId": "AGGAA5V0HG8SIAOTBARJABEX23N4Y8", "displayOrder": 3, "groupMember": false, "widgetMember": true, "ootb": true, "hide": false, "required": false, "editable": true, "hideLabel": false, "accessible": true }, { "id": "AGGAA5V0HHE9DAOWA4YI5MXGH8S9F2", "name": "customerLoginId", "itsmFieldId": 304309540, "parentId": "AGGAA5V0HG8SIAOTBARJABEX23N4Y8", "displayOrder": 3, "groupMember": false, "widgetMember": true, "ootb": true, "hide": false, "required": false, "editable": true, "hideLabel": false, "accessible": true }, { "id": "AGGAA5V0HHE9DAOWA5A15MYSA4S98X", "name": "customerPersonId", "itsmFieldId": 1000000080, "parentId": "AGGAA5V0HG8SIAOTBARJABEX23N4Y8", "displayOrder": 4, "groupMember": false, "widgetMember": true, "ootb": true, "hide": false, "required": false, "editable": true, "hideLabel": false, "accessible": true }], "accessible": true }; scope.field = new FieldVO().build(field); scope.field.isAssigneeWidget = function(){ return true; }; scope.field.value = { firstName: 'Allen', lastName: 'Allbrook', id: 'aallbrook', company: { name: 'Calbro' }, autoAssign: false, managerAutoAssign: false, coordinatorAutoAssign: true }; scope.ticket = {selectedCompany: 'Calbro', accessMappings: {coordinatorSelfAssignmentAllowed: 'coordinatorAssigned', managerSelfAssignmentAllowed: 'managerAssigned'}, type: 'incident'}; userModel.userFullData = { availableForAssignment: true }; })); beforeEach(inject(function ($q, $rootScope) { var deferred = $q.defer(), success = { items: [ { "firstName": "Allen", "fullName": "Allen Allbrook", "id": "Allen", "loginId": "Allen" } ], exceedsChunkSize: true }; spyOn(objectValueMapperService, 'getValueByFieldName').and.callFake(function () { deferred.resolve(success); return deferred.promise; }); spyOn(createTicketModel, 'getPersonsByCompany').and.callFake(function () { deferred.resolve(success); return deferred.promise; }); spyOn(permissionModel, 'hasRole').and.callFake(function () { deferred.resolve(success); return deferred.promise; }); })); function getCompiledElement(){ var element = angular.element(''); var compiledElement = compile(element)(scope); scope.$digest(); return compiledElement; } it('should compile', function() { var directiveElem = getCompiledElement(); var divElem = directiveElem[0]; expect(divElem.className).toContain('person-name'); }); it('person name should be hyperlink', function () { var directiveElem = getCompiledElement(); var divElem = directiveElem[0]; var links = divElem.getElementsByTagName('a'); expect(links.length).toEqual(1); expect(links[0].hash).toEqual('#/person/' + scope.field.value.id); }); it('should update objectValueMapperService on clearing person', function () { var directiveElem = getCompiledElement(); var divElem = directiveElem[0]; spyOn(objectValueMapperService, 'setValueByFieldName'); $(divElem).find('.item-input__delete-btn').click(); expect(objectValueMapperService.setValueByFieldName).toHaveBeenCalledWith('company', ''); expect(divElem.getElementsByTagName('a').length).toBe(0); }); it('should validate person name', function () { var directiveElem = getCompiledElement(); var isoScope = directiveElem.isolateScope(); scope.field.value = { firstName: 'Allen', lastName: 'Allbrook', id: 'aallbrook', company: { name: 'Calbro' }, autoAssign: false, managerAutoAssign: false, coordinatorAutoAssign: true }; isoScope.validate(); expect(typeof(scope.field.value)).toBe('object'); }); it('should update person data', function () { var directiveElem = getCompiledElement(); var isoScope = directiveElem.isolateScope(); var modelData = {isEmptyResult: false}; spyOn(isoScope, '$emit'); isoScope.$digest(); isoScope.update(modelData); expect(isoScope.$emit).toHaveBeenCalledWith(events.WIDGET_VALUE_CHANGE, jasmine.any(Object)); }); it('should listen to AFTER_SAVED_CHANGES and assign data', inject(function ($rootScope) { var directiveElem = getCompiledElement(); directiveElem.isolateScope(); scope.$parent.$broadcast(events.AFTER_SAVED_CHANGES); expect(scope.field.value.firstName).toBe('Allen'); })); it('should listen to DISCARD_CHANGES and assign data', inject(function ($rootScope) { var directiveElem = getCompiledElement(); directiveElem.isolateScope(); scope.$parent.$broadcast(events.DISCARD_CHANGES); expect(scope.field.value.id).toBe('aallbrook'); })); it('should clear fields depending upon person name', function () { var directiveElem = getCompiledElement(); var isoScope = directiveElem.isolateScope(); spyOn(isoScope, '$emit'); isoScope.$digest(); isoScope.clear(); expect(isoScope.$emit).toHaveBeenCalledWith(events.WIDGET_VALUE_CHANGE, jasmine.any(Object)); }); it('should fetch company list based on company', function () { var directiveElem = getCompiledElement(); var isoScope = directiveElem.isolateScope(); var term = '%%%'; scope.field.value.company.name = ''; isoScope.getListPersonsByCompany(term); isoScope.$digest(); expect(permissionModel.hasRole).toHaveBeenCalled(); }); it('should make fullname', function () { var directiveElem = getCompiledElement(); var isoScope = directiveElem.isolateScope(); spyOn(isoScope, '$emit'); isoScope.$digest(); isoScope.onValueChange(); expect(isoScope.$emit).toHaveBeenCalledWith(events.WIDGET_VALUE_CHANGE, jasmine.any(Object)); expect(scope.field.value.fullName).toBe('Allen Allbrook'); }); it('should invoke watch for setValueFlag', function(){ scope.field.setValueFlag = {id: '', loginId: 'AllenAl'}; scope.$digest(); getCompiledElement(); expect(scope.field.setValueFlag).toEqual('#$#'); }); it('should listen to DISCARD_CHANGES and assign data', inject(function ($rootScope) { scope.$digest(); var directiveElem = getCompiledElement(); var isoScope = directiveElem.isolateScope(); spyOn(isoScope, '$emit'); isoScope.$digest(); isoScope.$parent.$broadcast(events.DISCARD_CHANGES); expect(isoScope.$emit).toHaveBeenCalledWith(events.WIDGET_VALUE_CHANGE, jasmine.any(Object)); })); it('should destroy modal scope', inject(function ($rootScope) { var directiveElem = getCompiledElement(); var isoScope = directiveElem.isolateScope(); scope.$destroy(); expect(isoScope.isEditable).toBeTruthy(); })); }); describe('Test for create person', function () { var compile, scope, $httpBackend, originalTimeout, field; beforeEach(module('myitsmApp','templates')); beforeEach(function(){ inject(function($compile, $rootScope, $injector){ $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/serverstates').respond(200); $httpBackend.whenGET('/smartit/rest/sessionstatus?getLicenseKey=true').respond(200); compile = $compile; scope = $rootScope.$new(); field = { "id": "AGGAA5V0HG8SIAOTBARJABEX23N4Y8", "name": "customer", "type": "personName", "dataType": "widget", "displayOrder": 0, "groupMember": false, "widgetMember": false, "ootb": true, "hide": false, "required": true, "editable": true, "hideLabel": false, "members": [ { "id": "AGGAA5V0HG8SIAOTBJ3YABFFZCN5M1", "name": "firstName", "itsmFieldId": 1000000019, "parentId": "AGGAA5V0HG8SIAOTBARJABEX23N4Y8", "type": "characterField", "dataType": "text", "displayOrder": 0, "label": "First Name", "groupMember": false, "widgetMember": true, "ootb": true, "hide": false, "required": true, "editable": true, "hideLabel": false, "rowCount": 1, "maxLength": 30, "accessible": true }, { "id": "AGGAA5V0HG8SIAOTC5JJABG1U3N8Y0", "name": "lastName", "itsmFieldId": 1000000018, "parentId": "AGGAA5V0HG8SIAOTBARJABEX23N4Y8", "type": "characterField", "dataType": "text", "displayOrder": 1, "label": "Last Name", "groupMember": false, "widgetMember": true, "ootb": true, "hide": false, "required": true, "editable": true, "hideLabel": false, "rowCount": 1, "maxLength": 30, "accessible": true }, { "id": "AGGAA5V0HG8SIAOTEEVBABIB6GNOHH", "name": "customerVIPFlag", "itsmFieldId": 1000000026, "parentId": "AGGAA5V0HG8SIAOTBARJABEX23N4Y8", "displayOrder": 3, "groupMember": false, "widgetMember": true, "ootb": true, "hide": false, "required": false, "editable": true, "hideLabel": false, "accessible": true }, { "id": "AGGAA5V0HHE9DAOWA4YI5MXGH8S9F2", "name": "customerLoginId", "itsmFieldId": 304309540, "parentId": "AGGAA5V0HG8SIAOTBARJABEX23N4Y8", "displayOrder": 3, "groupMember": false, "widgetMember": true, "ootb": true, "hide": false, "required": false, "editable": true, "hideLabel": false, "accessible": true }, { "id": "AGGAA5V0HHE9DAOWA5A15MYSA4S98X", "name": "customerPersonId", "itsmFieldId": 1000000080, "parentId": "AGGAA5V0HG8SIAOTBARJABEX23N4Y8", "displayOrder": 4, "groupMember": false, "widgetMember": true, "ootb": true, "hide": false, "required": false, "editable": true, "hideLabel": false, "accessible": true }], "accessible": true, "setValueFlag": "#$#" }; }); }); beforeEach(function() { originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; }); afterEach(function() { jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; }); function getCompiledElement(){ var element = angular.element(''); var compiledElement = compile(element)(scope); scope.$digest(); return compiledElement; } it('should compile', function(){ scope.field = new FieldVO().build(field); scope.someProperty = {}; var directiveElem = getCompiledElement(); var divElem = directiveElem[0]; expect(divElem).toBeDefined(); }); });