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

613 lines
21 KiB
JavaScript

describe('Test priority directive', function () {
var compile, scope, $httpBackend, priorityField, ticket, field, metadata, deferred, events, mapperData;
beforeEach(module('myitsmApp', 'templates'));
beforeEach(function () {
inject(function ($q, $compile, $rootScope, $injector, ticketModel, metadataModel, objectValueMapperService, _events_) {
$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/v2/metadata?type=incident').respond(200);
$httpBackend.whenGET('/smartit/restapi/person/supportgroupperson').respond(200);
$httpBackend.whenGET('/smartit/rest/serverstates').respond(200);
$httpBackend.whenGET('/smartit/rest/sessionstatus?getLicenseKey=true').respond(200);
$httpBackend.whenGET('/smartit/rest/incident/calculatepriority?companyName=Calbro+Services&impact=3-Moderate%2FLimited&urgency=2-High').respond(200);
$httpBackend.whenGET('/smartit/rest/change/calculatepriority?companyName=&impact=4-Minor%2FLocalized&urgency=urgency').respond(200);
$httpBackend.whenGET('/smartit/rest/v2/metadata?type=workorder').respond(200);
$httpBackend.whenGET('/smartit/rest/v2/metadata?type=change').respond(200);
$httpBackend.whenGET('/smartit/rest/v2/metadata?type=').respond(200);
compile = $compile;
scope = $rootScope.$new();
this.ticketModel = ticketModel;
this.metadataModel = metadataModel;
this.objectValueMapperService = objectValueMapperService;
deferred = $q.defer();
events = _events_;
metadata = {
"priorities": [
{
"index": 0,
"name": "Critical",
"label": "Critical"
},
{
"index": 1,
"name": "High",
"label": "High"
},
{
"index": 2,
"name": "Medium",
"label": "Medium"
},
{
"index": 3,
"name": "Low",
"label": "Low"
}
],
"urgencies": [
{
"index": 1000,
"name": "1-Critical",
"label": "1-Critical"
},
{
"index": 2000,
"name": "2-High",
"label": "2-High"
},
{
"index": 3000,
"name": "3-Medium",
"label": "3-Medium"
},
{
"index": 4000,
"name": "4-Low",
"label": "4-Low"
}
],
"metadatatype": "change",
"impacts": [
{
"index": 1000,
"name": "1-Extensive/Widespread",
"label": "1-Extensive/Widespread"
},
{
"index": 2000,
"name": "2-Significant/Large",
"label": "2-Significant/Large"
},
{
"index": 3000,
"name": "3-Moderate/Limited",
"label": "3-Moderate/Limited"
},
{
"index": 4000,
"name": "4-Minor/Localized",
"label": "4-Minor/Localized"
}
]
};
field = {
id: 'AGGAA5V0HG8SIAOTIDJZAB1ZVENZN5',
accessMappings: { fieldMappings: {priority: 'write'} },
name: 'priority',
type: 'priority',
hideLabel: false,
value: {
impact: {name: '4-Minor/Localized'},
priority: {name: 'Low'},
urgency: {name: '4-Low'}
},
members: [
{
"name": "urgency",
"label": "Urgency",
"options": [
{
"index": 1000,
"name": "1-Critical",
"label": "1-Critical"
},
{
"index": 2000,
"name": "2-High",
"label": "2-High"
},
{
"index": 3000,
"name": "3-Medium",
"label": "3-Medium"
},
{
"index": 4000,
"name": "4-Low",
"label": "4-Low"
}
]
},
{
"name": "impact",
"label": "Impact",
"options": [
{
"index": 1000,
"name": "1-Extensive/Widespread",
"label": "1-Extensive/Widespread"
},
{
"index": 2000,
"name": "2-Significant/Large",
"label": "2-Significant/Large"
},
{
"index": 3000,
"name": "3-Moderate/Limited",
"label": "3-Moderate/Limited"
},
{
"index": 4000,
"name": "4-Minor/Localized",
"label": "4-Minor/Localized"
}
]
},
{
"name": "priority",
"label": "Priority",
"options": [
{
"index": 0,
"name": "Critical",
"label": "Critical"
},
{
"index": 1,
"name": "High",
"label": "High"
},
{
"index": 2,
"name": "Medium",
"label": "Medium"
},
{
"index": 3,
"name": "Low",
"label": "Low"
}
]
}
],
accessible: true,
setValueFlag: '#$#'
};
ticket = {
accessMappings: { fieldMappings: {priority: 'write'} },
type: 'change',
resolvedDate: null,
impact: '4-Minor/Localized',
urgency: '4-Low',
resolution: null,
templateId: '',
serviceType: 'User Service Restoration',
brokerVendorName: '',
id: 'IDGAA5V0GEXADAPGP1NOPFSOMG8GQ9',
displayId: 'WO1332',
summary: 'Allen Allbrook',
desc: 'Allen Allbrook',
numAttachments: 0,
customFields: {},
noCategories: 0,
ticketType: 'workorder',
attachments: [],
priority: 'Low',
isDraft: true
};
mapperData = [{members: [
{
id: 'AGGAA5V0HG8SIAOTBCDCABEYOGN5C2',
name: 'priority',
itsmFieldId: 1000000164,
parentId: 'AGGAA5V0HG8SIAOTIDJZAB1ZVENZN5',
displayOrder: 2,
groupMember: false,
widgetMember: true,
ootb: true,
hide: false,
required: false,
editable: true,
hideLabel: false,
accessible: true,
isReadOnly: false
},
{
id: 'AGGAA5V0HG8SIAOTBCDPABEYOUN5C5',
name: 'urgency',
itsmFieldId: 1000000162,
parentId: 'AGGAA5V0HG8SIAOTIDJZAB1ZVENZN5',
displayOrder: 1,
groupMember: false,
widgetMember: true,
ootb: true,
hide: false,
required: false,
editable: true,
hideLabel: false,
accessible: true,
isReadOnly: false
},
{
id: 'AGGAA5V0HG8SIAOTBCGTABEYRYN5CP',
name: 'impact',
itsmFieldId: 1000000163,
parentId: 'AGGAA5V0HG8SIAOTIDJZAB1ZVENZN5',
displayOrder: 0,
groupMember: false,
widgetMember: true,
ootb: true,
hide: false,
required: false,
editable: true,
hideLabel: false,
accessible: true,
isReadOnly: false
}
]}];
spyOn(this.ticketModel, 'getPriority').and.callFake(function () {
deferred.resolve({});
return deferred.promise;
});
spyOn(this.objectValueMapperService, 'getFieldsByType').and.callFake(function () {
deferred.resolve(mapperData);
return deferred.promise;
});
priorityField = {
id: 'AGGAA5V0HG8SIAOTIDJZAB1ZVENZN5',
name: 'priority',
type: 'priority',
dataType: 'widget',
displayOrder: 1,
groupMember: false,
widgetMember: false,
ootb: true,
hide: false,
required: false,
editable: false,
hideLabel: false,
value: {
impact: '4-Minor/Localized',
priority: 'Low',
urgency: '4-Low'
},
members: [
{
id: 'AGGAA5V0HG8SIAOTBCDCABEYOGN5C2',
name: 'priority',
itsmFieldId: 1000000164,
parentId: 'AGGAA5V0HG8SIAOTIDJZAB1ZVENZN5',
displayOrder: 2,
groupMember: false,
widgetMember: true,
ootb: true,
hide: false,
required: false,
editable: true,
hideLabel: false,
accessible: true
},
{
id: 'AGGAA5V0HG8SIAOTBCDPABEYOUN5C5',
name: 'urgency',
itsmFieldId: 1000000162,
parentId: 'AGGAA5V0HG8SIAOTIDJZAB1ZVENZN5',
displayOrder: 1,
groupMember: false,
widgetMember: true,
ootb: true,
hide: false,
required: false,
editable: true,
hideLabel: false,
accessible: true
},
{
id: 'AGGAA5V0HG8SIAOTBCGTABEYRYN5CP',
name: 'impact',
itsmFieldId: 1000000163,
parentId: 'AGGAA5V0HG8SIAOTIDJZAB1ZVENZN5',
displayOrder: 0,
groupMember: false,
widgetMember: true,
ootb: true,
hide: false,
required: false,
editable: true,
hideLabel: false,
accessible: true
}
],
accessible: true
};
});
});
function getCompiledElement () {
var element = angular.element('<priority ticket="ticket" data="field" is-editable="true" is-new="true"></priority>');
var compiledElement = compile(element)(scope);
scope.$digest();
return compiledElement;
}
it('should compile', function () {
var ticket = {
type: 'incident',
resolvedDate: null,
impact: '4-Minor/Localized',
urgency: '4-Low',
resolution: null,
templateId: '',
serviceType: 'User Service Restoration',
brokerVendorName: '',
id: 'IDGAA5V0GEXADAPGP1NOPFSOMG8GQ9',
displayId: 'INC1332',
summary: 'Allen Allbrook',
desc: 'Allen Allbrook',
numAttachments: 0,
customFields: {},
noCategories: 0,
ticketType: 'incident',
attachments: [],
priority: 'Low'
};
scope.field = new FieldVO().build(priorityField);
scope.ticket = ticket;
var directiveElem = getCompiledElement();
var divElem = directiveElem[0];
expect(divElem).toBeDefined();
});
it('should set priority field editable value', function () {
var ticket = {
accessMappings: { priorityEditAllowed: true },
type: 'workorder',
resolvedDate: null,
impact: '4-Minor/Localized',
urgency: '4-Low',
resolution: null,
templateId: '',
serviceType: 'User Service Restoration',
brokerVendorName: '',
id: 'IDGAA5V0GEXADAPGP1NOPFSOMG8GQ9',
displayId: 'WO1332',
summary: 'Allen Allbrook',
desc: 'Allen Allbrook',
numAttachments: 0,
customFields: {},
noCategories: 0,
ticketType: 'workorder',
attachments: [],
priority: 'Low'
};
scope.field = new FieldVO().build(priorityField);
scope.ticket = ticket;
var directiveElem = getCompiledElement(),
isolatedScope = directiveElem.isolateScope();
expect(isolatedScope.isPriorityEditable).toBeTruthy();
});
it('should update priority', function () {
var field = {
id: 'AGGAA5V0HG8SIAOTIDJZAB1ZVENZN5',
name: 'priority',
type: 'priority',
hideLabel: false,
value: {
impact: '4-Minor/Localized',
priority: 'Low',
urgency: '4-Low'
},
members: [],
accessible: true
};
var ticket = {
type: EntityVO.TYPE_INCIDENT,
company: {name: 'Test Company'},
priority: 'Low',
isDraft: true
};
scope.field = new FieldVO().build(field);
scope.ticket = ticket;
scope.oldPriority = '';
scope.metadata = true;
var directiveElem = getCompiledElement();
var divElem = directiveElem[0];
expect(divElem).toBeDefined();
ticket.priority = 'High';
scope.$apply();
expect(scope.ticket.priority).toEqual('High');
});
it('should make priority editable', function () {
scope.field = new FieldVO().build(field);
scope.ticket = ticket;
var directiveElem = getCompiledElement();
var isoScope = directiveElem.isolateScope();
expect(isoScope.isPriorityEditable).toBeTruthy();
});
it('should save old priority', function(){
scope.field = new FieldVO().build(field);
scope.ticket = ticket;
scope.ticket.priority = 'Low';
scope.$digest();
var directiveElem = getCompiledElement();
var isoScope = directiveElem.isolateScope();
expect(isoScope.oldPriority ).toEqual('Low');
});
it('should invoke watch for setValueFlag for incident', function(){
scope.field = new FieldVO().build(field);
scope.ticket = ticket;
scope.ticket.type = 'incident';
spyOn(this.metadataModel, 'getMetadataByType').and.callFake(function () {
deferred.resolve(metadata);
return deferred.promise;
});
scope.field.setValueFlag = {urgency: {name: 'urgency'}, impact: {name: '4-Minor/Localized'}};
scope.$digest();
getCompiledElement();
expect(scope.field.setValueFlag).toEqual('#$#');
});
it('should invoke watch for setValueFlag for change', function(){
scope.field = new FieldVO().build(field);
scope.ticket = ticket;
scope.ticket.type = 'change';
spyOn(this.metadataModel, 'getMetadataByType').and.callFake(function () {
deferred.resolve(metadata);
return deferred.promise;
});
spyOn(this.ticketModel, 'getChangePriority').and.callFake(function () {
deferred.resolve('Low');
return deferred.promise;
});
scope.field.setValueFlag = {urgency: {name: 'urgency'}, impact: {name: '4-Minor/Localized'}};
scope.$digest();
getCompiledElement();
expect(scope.field.setValueFlag).toEqual('#$#');
});
it('should invoke watch for setValueFlag for other than change and incident', function(){
scope.field = new FieldVO().build(field);
scope.ticket = ticket;
scope.ticket.type = 'workorder';
spyOn(this.metadataModel, 'getMetadataByType').and.callFake(function () {
deferred.resolve(metadata);
return deferred.promise;
});
spyOn(this.ticketModel, 'getChangePriority').and.callFake(function () {
deferred.resolve('Low');
return deferred.promise;
});
scope.field.setValueFlag = {urgency: {name: 'urgency'}, impact: {name: '4-Minor/Localized'}};
scope.$digest();
getCompiledElement();
expect(scope.field.setValueFlag).toEqual('#$#');
});
it('should invoke watch for setValueFlag when urgency and impact is not updated', function(){
scope.field = new FieldVO().build(field);
scope.ticket = ticket;
spyOn(this.metadataModel, 'getMetadataByType').and.callFake(function () {
deferred.resolve(metadata);
return deferred.promise;
});
scope.field.setValueFlag = {};
scope.$digest();
getCompiledElement();
expect(scope.field.setValueFlag).toEqual('#$#');
});
it('should invoke watch for setValueFlag when urgency and impact is not updated and metadata is not available', function(){
scope.field = new FieldVO().build(field);
scope.ticket = ticket;
spyOn(this.metadataModel, 'getMetadataByType').and.callFake(function () {
deferred.resolve(false);
return deferred.promise;
});
scope.field.setValueFlag = {};
scope.$digest();
getCompiledElement();
expect(scope.field.setValueFlag).toEqual('#$#');
});
it('should change priority ', function(){
scope.field = new FieldVO().build(field);
scope.ticket = ticket;
var directiveElem = getCompiledElement();
var isoScope = directiveElem.isolateScope();
spyOn(isoScope, '$emit');
isoScope.$digest();
isoScope.changePriority ();
expect(isoScope.$emit).toHaveBeenCalledWith(events.WIDGET_VALUE_CHANGE, jasmine.any(Object));
});
it('should listen to TOGGLE_EDIT_MODE and assign data', inject(function ($rootScope) {
scope.field = new FieldVO().build(field);
scope.ticket = ticket;
spyOn(this.metadataModel, 'getMetadataByType').and.callFake(function () {
deferred.resolve(metadata);
return deferred.promise;
});
scope.$digest();
var directiveElem = getCompiledElement();
var isoScope = directiveElem.isolateScope();
isoScope.editMode = false;
isoScope.$parent.$broadcast(events.TOGGLE_EDIT_MODE);
expect(isoScope.editMode).toBeTruthy();
}));
it('should listen to DISCARD_CHANGES and assign data', inject(function ($rootScope) {
scope.field = new FieldVO().build(field);
scope.ticket = ticket;
spyOn(this.metadataModel, 'getMetadataByType').and.callFake(function () {
deferred.resolve(metadata);
return deferred.promise;
});
scope.$digest();
var directiveElem = getCompiledElement();
var isoScope = directiveElem.isolateScope();
isoScope.editMode = true;
isoScope.$parent.$broadcast(events.DISCARD_CHANGES);
expect(isoScope.editMode).toBeFalsy();
}));
it('should listen to AFTER_SAVED_CHANGES and assign data', inject(function ($rootScope) {
scope.field = new FieldVO().build(field);
scope.ticket = ticket;
spyOn(this.metadataModel, 'getMetadataByType').and.callFake(function () {
deferred.resolve(metadata);
return deferred.promise;
});
scope.$digest();
var directiveElem = getCompiledElement();
var isoScope = directiveElem.isolateScope();
isoScope.editMode = true;
isoScope.$parent.$broadcast(events.AFTER_SAVED_CHANGES);
expect(isoScope.oldPriority).toEqual('Low');
}));
});