613 lines
21 KiB
JavaScript
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');
|
|
}));
|
|
}); |