SmartIT_Extensions/BMC/smart-it-full/test/app/custom-widgets/person-name-directive.spec.js

449 lines
18 KiB
JavaScript

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('<person-name data="field" is-editable="true" context="ticket"></person-name>');
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('<input set-view="data.value" ng-model="modelVar"/>');
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();
});
});