describe('Test assignee chooser directive', function () { var scope, compile, $httpBackend, $q, groupList, personList, organizationList, companyList, deferred; beforeEach(module('myitsmApp', 'templates')); beforeEach(function () { var userModelMock = { userFullData: { loginId: 'Allen', fullName: 'Allen Allbrook', availableForAssignment: true } }; module('myitsmApp', function ($provide) { $provide.value('userModel', userModelMock); }); inject(function ($compile, $rootScope, $injector, _$q_, searchModel, ticketService, objectValueMapperService, i18nService, $timeout, events) { $q = _$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/serverstates').respond(200); $httpBackend.whenGET('/smartit/rest/sessionstatus?getLicenseKey=true').respond(200); $httpBackend.whenGET('views/dashboard/index.html').respond(200); $httpBackend.when('POST', "/smartit/rest/foundation/assignment/items?chunkInfo=%7B%22startIndex%22:0,%22chunkSize%22:80%7D&type=assigneeSupportCompany") .respond(200, { status: "success" }); $httpBackend.when('POST', "/smartit/rest/foundation/assignment/items?type=assigneeSupportCompany") .respond(200, { status: "success" }); deferred = $q.defer(); compile = $compile; scope = $rootScope.$new(); this.searchModel = searchModel; this.ticketService = ticketService; this.objectValueMapperService = objectValueMapperService; this.i18nService = i18nService; this.$timeout = $timeout; this.events = events; }); }); beforeEach(function () { companyList = { objects: [ { "name": "Calbro Services", "attributeMap": {} }, { "name": "Petramco", "attributeMap": {} }, { "name": "BMC Software", "attributeMap": {} }, { "name": "Remedy", "attributeMap": {} } ], exceedsChunkSize: false }; groupList = { supportGroups: [ { "name": "Backoffice Support", "organization": "IT Support", "company": { "name": "Calbro Services" }, "id": "SGP000000000009", "companyName": "Calbro Services" }, { "name": "Change Management", "organization": "IT Support", "company": { "name": "Calbro Services" }, "id": "SGP000000000013", "companyName": "Calbro Services" }, { "name": "Frontoffice Support", "organization": "IT Support", "company": { "name": "Calbro Services" }, "id": "SGP000000000010", "companyName": "Calbro Services" }, { "name": "Backoffice Support", "organization": "IT Support", "company": { "name": "Calbro Services" }, "id": "SGP0000000000011", "companyName": "Calbro Services" }, ], exceedsChunkSize: true }; personList = { results: [ { "type": "person", "firstName": "Allen", "lastName": "Allbrook", "fullName": "Allen Allbrook", "company": { "name": "Calbro Services" }, "organization": "IT Support", "loginId": "Allen", "id": "Allen", "supportGroup": "Backoffice Support", "supportGroupId": "SGP000000000009", "supportOrganization": "IT Support" }, { "type": "person", "firstName": "Mary", "lastName": "Mann", "fullName": "Mary Mann", "company": { "name": "Calbro Services" }, "organization": "IT Support", "loginId": "Mary", "id": "Mary", "supportGroup": "Service Desk", "supportGroupId": "SGP000000000011", "supportOrganization": "IT Support" }, { "type": "person", "firstName": "Bob", "lastName": "Baxter", "fullName": "Bob Baxter", "company": { "name": "Calbro Services" }, "organization": "IT Support", "loginId": "Bob", "id": "Bob", "supportGroup": "Backoffice Support", "supportGroupId": "SGP000000000009", "supportOrganization": "IT Support" }, { "type": "person", "firstName": "Francie", "lastName": "Stafford", "fullName": "Francie Stafford", "company": { "name": "Calbro Services" }, "organization": "IT Support", "loginId": "Francie", "id": "Francie", "supportGroup": "Service Desk", "supportGroupId": "SGP000000000011", "supportOrganization": "IT Support" } ], "totalMatches": 4, "exceedsChunkSize": false }; organizationList = { organizations: [ { "name": "IT Support", "attributeMap": { "companyName": "Calbro Services" }, "companyName": "Calbro Services" }, { "name": "IT Support", "attributeMap": { "companyName": "Petramco" }, "companyName": "Petramco" }, { "name": "Unterstützungsorganisation2", "attributeMap": { "companyName": "Löwe" }, "companyName": "Löwe" } ], exceedsChunkSize: true }; spyOn(this.i18nService, 'getLocalizedString').and.callFake(function (input) { return input === 'assignBlade.company.all' || input === 'assignBlade.organization.all' || input === 'assignBlade.supportGroup.all' ? 'All': input; }); }); function spyAssigneeSupportDropdown(self) { spyOn(self.searchModel, 'getAssigneeSupportOrgByCompany').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(organizationList); return deferred.promise; }); spyOn(self.searchModel, 'getAssigneeSupportGroupsForCompanyAndOrg').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(groupList); return deferred.promise; }); spyOn(self.ticketService, 'getAssigneeSupportGroupPersons').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(personList); return deferred.promise; }); } function spyAllInitService(self) { spyOn(self.searchModel, 'getAssigneeSupportCompanies').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(companyList); return deferred.promise; }); spyOn(self.objectValueMapperService, 'getExactValueByFieldName').and.callFake(function () { if (arguments[0] === 'customerCompany' || arguments[0] === 'locationCompany') { return 'Calbro Services'; } return ''; }); spyOn(self.ticketService, 'getAssigneeBySupportGroupId').and.callFake(function () { let deferred = $q.defer(); deferred.resolve({ results: [personList.results[0]], exceedsChunkSize: true }); return deferred.promise; }); spyAssigneeSupportDropdown(self); } function loadTicketData(type) { var data; if (type === EntityVO.TYPE_INCIDENT) { data = { "type": "incident", "status": { "value": "In Progress" }, "assignee": { "fullName": "Allen Allbrook", "loginId": "Allen", "id": "Allen" }, "supportGroup": { "name": "Backoffice Support", "company": { "name": "Calbro Services" }, "organization": "IT Support", "id": "SGP000000000009" }, "serviceTargets": [ { "startTime": 1535115593000, "endTime": 1535115593000, "slaType": "createdate" } ], "customer": { "firstName": "Allen", "lastName": "Allbrook", "company": { "name": "Calbro Services" } }, "accessMappings": { "assigneeSelfAssignmentAllowed": true }, "locationCompany": { "name": "Calbro Services" }, "company": { "name": "Calbro Services" }, "ticketType": "incident" } } else if (type === EntityVO.TYPE_KNOWLEDGE) { data = { "ghostEntity": true, "title": "", "isDraft": true, "type": "knowledge", "status": { "value": "Work In Progress" }, "assignee": { "customFields": {} }, "author": { "company": { "name": "Calbro Services" } }, "owner": { "company": { "name": "Calbro Services" } }, "company": { "name": "All" }, "accessMappings": { "assignee-self-assignmentEditAllowed": true }, "allCompanies": [ { "primary": true, "name": "All", } ], "customer": { "company": { "name": "Calbro Services" } } } } else if (type === EntityVO.TYPE_TASK || type === EntityVO.TYPE_CHANGE) { data = { "name": "text", "id": "123", "type": type === EntityVO.TYPE_CHANGE ? "change" : "task", "status": { "value": "Assigned" }, "customer": { "company": { "name": "Calbro Services", } }, "supportGroup": { "name": "Service Desk", "company": { "name": "Calbro Services" }, "organization": "IT Support", "id": "SGP000000000011" }, "accessMappings": { "assigneeSelfAssignmentAllowed": true, "managerSelfAssignmentAllowed": true, "coordinatorSelfAssignmentAllowed": true }, "company": { "name": "Calbro Services" } } } else if(type === EntityVO.TYPE_KNOWNERROR || type === EntityVO.TYPE_WORKORDER || type === EntityVO.TYPE_RELEASE) { data = { "type": type === EntityVO.TYPE_KNOWNERROR ? "knownerror" : (type === EntityVO.TYPE_RELEASE) ? 'release' : 'workorder', "status": { "value": "Assigned" }, "assignee": { "fullName": "Allen Allbrook", "loginId": "Allen", "customFields": {}, "id": "Allen" }, "supportGroup": { "name": "Service Desk", "company": { "name": "Calbro Services" }, "organization": "IT Support", "id": "SGP000000000011" }, "accessMappings": { "coordinatorSelfAssignmentAllowed": true, "assigneeSelfAssignmentAllowed": true, "managerSelfAssignmentAllowed": true }, "company": { "name": "Calbro Services" }, "coordinatorGroup": { "name": "Service Desk", "company": { "name": "Calbro Services" }, "organization": "IT Support", "id": "SGP000000000011" }, "ticketType": type === EntityVO.TYPE_KNOWNERROR ? "knownerror" : type === EntityVO.TYPE_RELEASE ? 'release' : 'workorder' } } return data; } function getCompiledElement(ticket, isDraft, assignee, role) { scope.ticket = ticket; scope.assignee = assignee; role = role ? 'role="' + role + '"' : ''; var element = angular.element(''); var compiledElement = compile(element)(scope); scope.$digest(); return compiledElement; } it('should compile and set showAssignToMe', function () { var ticket = new KnowledgeArticleVO(), assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: {} }; ticket.accessMappings = { 'assignee-self-assignmentEditAllowed': true }; ticket.allCompanies = null; ticket.company = { name: 'Calbro' }; var directiveElem = getCompiledElement(ticket, false, assignee), divElem = directiveElem[0], isolatedScope = directiveElem.isolateScope(); expect(divElem).toBeDefined(); expect(isolatedScope.conditions.showAssignToMe).toBeTruthy(); }); it('should send customer company and location company in calls for companies, support group, organisation for Incident', function () { var ticket = new IncidentVO(), assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'SP123' } }, testCompany = { name: 'Calbro' }, testOrganisation = { name: 'HR Support' }, testSupportGroup = { name: 'IT Support' }; ticket.accessMappings = {}; ticket.allCompanies = null; ticket.company = { name: 'Calbro' }; spyOn(this.objectValueMapperService, 'getExactValueByFieldName').and.callFake(function () { if (arguments[0] === 'customerCompany' || arguments[0] === 'locationCompany') { return 'Calbro'; } return ''; }); spyOn(this.searchModel, 'getAssigneeSupportCompanies').and.callFake(function () { let deferred = $q.defer(); expect(arguments[0].customerCompany).toEqual('Calbro'); expect(arguments[0].locationCompany).toEqual('Calbro'); deferred.resolve(companyList); return deferred.promise; }); spyOn(this.searchModel, 'getAssigneeSupportOrgByCompany').and.callFake(function () { let deferred = $q.defer(); expect(arguments[3]).toEqual('Calbro'); expect(arguments[4]).toEqual('Calbro'); deferred.resolve(organizationList); return deferred.promise; }); spyOn(this.searchModel, 'getAssigneeSupportGroupsForCompanyAndOrg').and.callFake(function () { let deferred = $q.defer(); expect(arguments[4]).toEqual('Calbro'); expect(arguments[5]).toEqual('Calbro'); deferred.resolve(groupList); return deferred.promise; }); spyOn(this.ticketService, 'getAssigneeSupportGroupPersons').and.callFake(function () { let deferred = $q.defer(); expect(arguments[6]).toEqual('Calbro'); expect(arguments[7]).toEqual('Calbro'); deferred.resolve(personList); return deferred.promise; }); spyOn(this.ticketService, 'getAssigneeBySupportGroupId').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(personList); return deferred.promise; }); var directiveElem = getCompiledElement(ticket, false, assignee), divElem = directiveElem[0], isolatedScope = directiveElem.isolateScope(); expect(divElem).toBeDefined(); isolatedScope.selectCompany(testCompany); isolatedScope.selectOrganization(testOrganisation); isolatedScope.selectGroup(testSupportGroup); isolatedScope.$apply(); }); it('should check Assign to Me checkbox and Logged in user should be searched by name if ticket is Incident', function () { var ticket = new IncidentVO(loadTicketData(EntityVO.TYPE_INCIDENT)), assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'SP123' } }, assignToMeSearchResult = { "results": [ { "type": "person", "firstName": "Allen", "lastName": "Allbrook", "fullName": "Allen Allbrook", "loginId": "Allen", "supportGroupId": "SGP000000000009", }, { "type": "person", "firstName": "Allen", "lastName": "Allbrook", "fullName": "Allen Allbrook", "loginId": "Allen", "id": "Allen", "supportGroupId": "SGP000000000010" } ], "totalMatches": 2 }, directiveElem, isolatedScope; spyOn(this.objectValueMapperService, 'getExactValueByFieldName').and.callFake(function (input) { return input === 'locationCompany' ? 'Calbro Services': input; }); spyOn(this.ticketService, 'getAssigneeSupportGroupPersons').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(assignToMeSearchResult); return deferred.promise; }); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); isolatedScope.assignToMe = true; isolatedScope.selectAssignToMe(); this.$timeout.flush(); isolatedScope.$apply(); expect(isolatedScope.assigneeCompany.id).toBe('All'); expect(isolatedScope.assigneeOrganization.id).toBe('All'); expect(isolatedScope.assignee.group.id).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.search.text).toBe('Allen Allbrook'); expect(isolatedScope.assigneeLoginId).toBe('Allen'); expect(isolatedScope.conditions.showAssignToGroup).toBeFalsy(); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); }); it('should uncheck Assign to Me checkbox and Logged in user should be cleared from search box if ticket is Incident', function () { var ticket = new IncidentVO(loadTicketData(EntityVO.TYPE_INCIDENT)), assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }, assignToMeSearchResult = { "results": [ { "type": "person", "firstName": "Bob", "lastName": "Baxter", "fullName": "Bob Baxter", "loginId": "Allen", "supportGroupId": "SGP000000000009", }, { "type": "person", "firstName": "Bob", "lastName": "Baxter", "fullName": "Bob Baxter", "loginId": "Allen", "id": "Allen", "supportGroupId": "SGP000000000010" } ], "totalMatches": 2 }, directiveElem, isolatedScope; spyOn(this.objectValueMapperService, 'getExactValueByFieldName').and.callFake(function (input) { if (input === 'customerCompany') { input = ''; } else if (input === 'locationCompany') { input = 'Calbro Services'; } return input; }); spyOn(this.ticketService, 'getAssigneeSupportGroupPersons').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(assignToMeSearchResult); return deferred.promise; }); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); isolatedScope.assignToMe = false; isolatedScope.selectAssignToMe(); this.$timeout.flush(); isolatedScope.$apply(); expect(isolatedScope.search.text).toBe(''); expect(isolatedScope.assigneeLoginId).toBe(''); expect(isolatedScope.conditions.showAssignToGroup).toBeTruthy(); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.assignee.group.persons.length).toBe(3); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Bob Baxter'); }); it('should check Assign to Me checkbox and Logged in user should be searched by name if ticket is Knowledge article', function () { var ticket = loadTicketData(EntityVO.TYPE_KNOWLEDGE), assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'SP123' } }, assignToMeSearchResult = { "results": [ { "type": "person", "firstName": "Allen", "lastName": "Allbrook", "fullName": "Allen Allbrook", "loginId": "Allen", "supportGroupId": "SGP000000000009", }, { "type": "person", "firstName": "Allen", "lastName": "Allbrook", "fullName": "Allen Allbrook", "loginId": "Allen", "id": "Allen", "supportGroupId": "SGP000000000010" } ], "exceedsChunkSize": true, "totalMatches": 2 }, directiveElem, isolatedScope; spyOn(this.objectValueMapperService, 'getExactValueByFieldName').and.callFake(function (input) { return input === 'locationCompany' ? 'Calbro Services': input; }); spyOn(this.ticketService, 'getAssigneeSupportGroupPersons').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(assignToMeSearchResult); return deferred.promise; }); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); isolatedScope.assignToMe = true; isolatedScope.selectAssignToMe(); this.$timeout.flush(); isolatedScope.$apply(); expect(isolatedScope.assigneeCompany.id).toBe('All'); expect(isolatedScope.assigneeOrganization.id).toBe('All'); expect(isolatedScope.assignee.group.id).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.search.text).toBe('Allen Allbrook'); expect(isolatedScope.assigneeLoginId).toBe('Allen'); expect(isolatedScope.conditions.showAssignToGroup).toBeFalsy(); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); }); it('should uncheck Assign to Me checkbox and Logged in user should be cleared from search box if ticket is Knowledge article', function () { var ticket = loadTicketData(EntityVO.TYPE_KNOWLEDGE), assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }, assignToMeSearchResult = { "results": [ { "type": "person", "firstName": "Bob", "lastName": "Baxter", "fullName": "Bob Baxter", "loginId": "Allen", "supportGroupId": "SGP000000000009", }, { "type": "person", "firstName": "Bob", "lastName": "Baxter", "fullName": "Bob Baxter", "loginId": "Allen", "id": "Allen", "supportGroupId": "SGP000000000010" } ], "exceedsChunkSize": true, "totalMatches": 2 }, directiveElem, isolatedScope; spyOn(this.objectValueMapperService, 'getExactValueByFieldName').and.callFake(function (input) { if (input === 'customerCompany') { input = ''; } else if (input === 'locationCompany') { input = 'Calbro Services'; } return input; }); spyOn(this.ticketService, 'getAssigneeSupportGroupPersons').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(assignToMeSearchResult); return deferred.promise; }); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); isolatedScope.assignToMe = false; isolatedScope.selectAssignToMe(); this.$timeout.flush(); isolatedScope.$apply(); expect(isolatedScope.search.text).toBe(''); expect(isolatedScope.assigneeLoginId).toBe(''); expect(isolatedScope.conditions.showAssignToGroup).toBeFalsy(); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.assignee.group.persons.length).toBe(3); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Bob Baxter'); }); it('should check Assign to Me checkbox and Logged in user should be searched by name if ticket is task article', function () { var ticket = loadTicketData(EntityVO.TYPE_TASK), assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'SP123' } }, assignToMeSearchResult = { "results": [ { "type": "person", "firstName": "Allen", "lastName": "Allbrook", "fullName": "Allen Allbrook", "loginId": "Allen", "supportGroupId": "SGP000000000009", }, { "type": "person", "firstName": "Allen", "lastName": "Allbrook", "fullName": "Allen Allbrook", "loginId": "Allen", "id": "Allen", "supportGroupId": "SGP000000000010" } ], "totalMatches": 2 }, directiveElem, isolatedScope; spyOn(this.objectValueMapperService, 'getExactValueByFieldName').and.callFake(function (input) { return input === 'locationCompany' ? 'Calbro Services': input; }); spyOn(this.ticketService, 'getAssigneeSupportGroupPersons').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(assignToMeSearchResult); return deferred.promise; }); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); isolatedScope.assignToMe = true; isolatedScope.selectAssignToMe(); this.$timeout.flush(); isolatedScope.$apply(); expect(isolatedScope.assigneeCompany.id).toBe('All'); expect(isolatedScope.assigneeOrganization.id).toBe('All'); expect(isolatedScope.assignee.group.id).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.search.text).toBe('Allen Allbrook'); expect(isolatedScope.assigneeLoginId).toBe('Allen'); expect(isolatedScope.conditions.showAssignToGroup).toBeFalsy(); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); }); it('should uncheck Assign to Me checkbox and Logged in user should be cleared from search box if ticket is task', function () { var ticket = loadTicketData(EntityVO.TYPE_TASK), assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }, assignToMeSearchResult = { "results": [ { "type": "person", "firstName": "Bob", "lastName": "Baxter", "fullName": "Bob Baxter", "loginId": "Allen", "supportGroupId": "SGP000000000009", }, { "type": "person", "firstName": "Bob", "lastName": "Baxter", "fullName": "Bob Baxter", "loginId": "Allen", "id": "Allen", "supportGroupId": "SGP000000000010" } ], "totalMatches": 2 }, directiveElem, isolatedScope; spyOn(this.objectValueMapperService, 'getExactValueByFieldName').and.callFake(function (input) { if (input === 'customerCompany') { input = ''; } else if (input === 'locationCompany') { input = 'Calbro Services'; } return input; }); spyOn(this.ticketService, 'getAssigneeSupportGroupPersons').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(assignToMeSearchResult); return deferred.promise; }); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); isolatedScope.assignToMe = false; isolatedScope.selectAssignToMe(); this.$timeout.flush(); isolatedScope.$apply(); expect(isolatedScope.search.text).toBe(''); expect(isolatedScope.assigneeLoginId).toBe(''); expect(isolatedScope.conditions.showAssignToGroup).toBeTruthy(); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.assignee.group.persons.length).toBe(3); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Bob Baxter'); }); describe('if ticket is Incident, it', function() { var ticket, assignee, directiveElem, isolatedScope; beforeEach(function () { ticket = new IncidentVO(loadTicketData(EntityVO.TYPE_INCIDENT)); assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }; spyOn(this.objectValueMapperService, 'getExactValueByFieldName').and.callFake(function (input) { if (input === 'customerCompany') { input = ''; } else if (input === 'locationCompany') { input = 'Calbro Services'; } return input; }); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); }); it('should select Support Company item and update the data of other dropdowns when user selects any value from Support Company', function () { var company = { "name": "Calbro Services", "attributeMap": {} }; spyAssigneeSupportDropdown(this); isolatedScope.selectCompany(company); isolatedScope.$apply(); expect(isolatedScope.assigneeCompany.name).toBe(company.name); expect(isolatedScope.assigneeOrganization.name).toBe('All'); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should select Support Organization item and update the data of Support Group dropdown when user selects any value from Support Organization', function () { var organization = { "name": "IT Support", "attributeMap": { "companyName": "Calbro Services" }, "companyName": "Calbro Services" }; spyAssigneeSupportDropdown(this); isolatedScope.selectOrganization(organization); isolatedScope.$apply(); expect(isolatedScope.assigneeOrganization.name).toBe('IT Support'); expect(isolatedScope.assignment.organizations.length).toBe(0); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should select Support Group item when user selects any value from Support Group', function () { var group = { "name": "Backoffice Support", "organization": "IT Support", "company": { "name": "Calbro Services" }, "id": "SGP000000000009", "companyName": "Calbro Services", "persons": [] }; spyOn(this.ticketService, 'getAssigneeBySupportGroupId').and.callFake(function (input) { let deferred = $q.defer(); deferred.resolve(personList); return deferred.promise; }); isolatedScope.selectGroup(group); isolatedScope.$apply(); expect(isolatedScope.assignment.organizations.length).toBe(0); expect(isolatedScope.assignee.group.name).toBe('Backoffice Support'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); }); describe('if ticket is Knowledge Article, it', function() { var ticket, assignee, directiveElem, isolatedScope; beforeEach(function () { ticket = loadTicketData(EntityVO.TYPE_KNOWLEDGE); assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }; spyOn(this.objectValueMapperService, 'getExactValueByFieldName').and.callFake(function (input) { if (input === 'customerCompany') { input = ''; } else if (input === 'locationCompany') { input = 'Calbro Services'; } return input; }); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); }); it('should select Support Company item and update the data of other dropdowns when user selects any value from Support Company', function () { var company = { "name": "Calbro Services", "attributeMap": {} }; spyAssigneeSupportDropdown(this); isolatedScope.selectCompany(company); isolatedScope.$apply(); expect(isolatedScope.assigneeCompany.name).toBe(company.name); expect(isolatedScope.assigneeOrganization.name).toBe('All'); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should select Support Organization item and update the data of Support Group dropdown when user selects any value from Support Organization', function () { var organization = { "name": "IT Support", "attributeMap": { "companyName": "Calbro Services" }, "companyName": "Calbro Services" }; spyAssigneeSupportDropdown(this); isolatedScope.selectOrganization(organization); isolatedScope.$apply(); expect(isolatedScope.assigneeOrganization.name).toBe('IT Support'); expect(isolatedScope.assignment.organizations.length).toBe(0); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should select Support Group item when user selects any value from Support Group', function () { var group = { "name": "Backoffice Support", "organization": "IT Support", "company": { "name": "Calbro Services" }, "id": "SGP000000000009", "companyName": "Calbro Services", "persons": [] }; spyOn(this.ticketService, 'getAssigneeBySupportGroupId').and.callFake(function (input) { let deferred = $q.defer(); deferred.resolve(personList); return deferred.promise; }); isolatedScope.selectGroup(group); isolatedScope.$apply(); expect(isolatedScope.assignment.organizations.length).toBe(0); expect(isolatedScope.assignee.group.name).toBe('Backoffice Support'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); }); describe('if ticket is Task, it', function() { var ticket, assignee, directiveElem, isolatedScope; beforeEach(function () { ticket = loadTicketData(EntityVO.TYPE_TASK); assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }; spyOn(this.objectValueMapperService, 'getExactValueByFieldName').and.callFake(function (input) { if (input === 'customerCompany') { input = ''; } else if (input === 'locationCompany') { input = 'Calbro Services'; } return input; }); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); }); it('should select Support Company item and update the data of other dropdowns when user selects any value from Support Company', function () { var company = { "name": "Calbro Services", "attributeMap": {} }; spyAssigneeSupportDropdown(this); isolatedScope.selectCompany(company); isolatedScope.$apply(); expect(isolatedScope.assigneeCompany.name).toBe(company.name); expect(isolatedScope.assigneeOrganization.name).toBe('All'); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should select Support Organization item and update the data of Support Group dropdown when user selects any value from Support Organization', function () { var organization = { "name": "IT Support", "attributeMap": { "companyName": "Calbro Services" }, "companyName": "Calbro Services" }; spyAssigneeSupportDropdown(this); isolatedScope.selectOrganization(organization); isolatedScope.$apply(); expect(isolatedScope.assigneeOrganization.name).toBe('IT Support'); expect(isolatedScope.assignment.organizations.length).toBe(0); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should select Support Group item when user selects any value from Support Group', function () { var group = { "name": "Backoffice Support", "organization": "IT Support", "company": { "name": "Calbro Services" }, "id": "SGP000000000009", "companyName": "Calbro Services", "persons": [] }; spyOn(this.ticketService, 'getAssigneeBySupportGroupId').and.callFake(function (input) { let deferred = $q.defer(); deferred.resolve(personList); return deferred.promise; }); isolatedScope.selectGroup(group); isolatedScope.$apply(); expect(isolatedScope.assignment.organizations.length).toBe(0); expect(isolatedScope.assignee.group.name).toBe('Backoffice Support'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should select Support Company item and update the data of other dropdowns when user selects any value from Support Company if location company is null', function () { var company = { "name": "Calbro Services", "attributeMap": {} }; spyAssigneeSupportDropdown(this); isolatedScope.ticket.company = null; isolatedScope.selectCompany(company); isolatedScope.$apply(); expect(isolatedScope.assigneeCompany.name).toBe(company.name); expect(isolatedScope.assigneeOrganization.name).toBe('All'); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should select Support Organization item and update the data of Support Group dropdown when user selects any value from Support Organization if location company is null', function () { var organization = { "name": "IT Support", "attributeMap": { "companyName": "Calbro Services" }, "companyName": "Calbro Services" }; spyAssigneeSupportDropdown(this); isolatedScope.ticket.company = null; isolatedScope.selectOrganization(organization); isolatedScope.$apply(); expect(isolatedScope.assigneeOrganization.name).toBe('IT Support'); expect(isolatedScope.assignment.organizations.length).toBe(0); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should select Support Group item when user selects any value from Support Group if location company is null', function () { var group = { "name": "Backoffice Support", "organization": "IT Support", "company": { "name": "Calbro Services" }, "id": "SGP000000000009", "companyName": "Calbro Services", "persons": [] }; spyOn(this.ticketService, 'getAssigneeBySupportGroupId').and.callFake(function (input) { let deferred = $q.defer(); deferred.resolve(personList); return deferred.promise; }); isolatedScope.ticket.company = null; isolatedScope.selectGroup(group); isolatedScope.$apply(); expect(isolatedScope.assignment.organizations.length).toBe(0); expect(isolatedScope.assignee.group.name).toBe('Backoffice Support'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); }); it('should select the assignee group and make the form dirty', function () { var ticket = new IncidentVO(loadTicketData(EntityVO.TYPE_INCIDENT)), assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }, directiveElem, isolatedScope; directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); spyOn(isolatedScope, '$emit'); isolatedScope.assignee.isGroup = false; isolatedScope.assignToGroup(); isolatedScope.$apply(); expect(isolatedScope.assignee.isGroup).toBeTruthy(); expect(isolatedScope.$emit).toHaveBeenCalledWith(this.events.MODAL_FORM_IS_DIRTY); }); describe('should select assignee person', function () { var ticket, assignee, directiveElem, isolatedScope; beforeEach(function () { ticket = new IncidentVO(loadTicketData(EntityVO.TYPE_INCIDENT)); assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }; directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); spyOn(isolatedScope, '$emit'); }); it('and select its parent in case of person type parent', function () { var selectedPerson = { type: 'parent', fullName: 'Allen Allbrook', id: 'Allen' }; isolatedScope.selectedParent = {}; isolatedScope.assignToPerson(selectedPerson); isolatedScope.$apply(); expect(isolatedScope.selectedParent.fullName).toBe(selectedPerson.fullName); }); it('and make the form dirty in case of person type child', function () { var selectedPerson = { type: 'child', fullName: 'Allen Allbrook', id: 'Allen' }; isolatedScope.assignee.isGroup = true; isolatedScope.assignToPerson(selectedPerson); isolatedScope.$apply(); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.person.fullName).toBe(selectedPerson.fullName); expect(isolatedScope.$emit).toHaveBeenCalledWith(this.events.MODAL_FORM_IS_DIRTY); }); }); it('should click on search text box cross icon to delete search text and populate all records if assign to me checkbox is not checked', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = new IncidentVO(loadTicketData(EntityVO.TYPE_INCIDENT)); assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }; directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); isolatedScope.search.text = 'Allen'; isolatedScope.search.filterText = 'Allen'; isolatedScope.clearSearchText(); isolatedScope.$apply(); expect(isolatedScope.search.text).toBe(''); expect(isolatedScope.assigneeLoginId).toBe(''); expect(isolatedScope.search.filterText).toBe(''); }); it('should set Support Group to All if user clicks on expanding your search to all groups', function () { var ticket, assignee, directiveElem, isolatedScope, group, list; ticket = new IncidentVO(loadTicketData(EntityVO.TYPE_INCIDENT)); assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }; group = { "name": "Backoffice Support", "organization": "IT Support", "company": { "name": "Calbro Services" }, "id": "SGP000000000009", "companyName": "Calbro Services", "persons": [] }; list = { "results": [ { "type": "person", "firstName": "App", "lastName": "Admin", "fullName": "App Admin", "company": { "name": "Calbro Services" }, "organization": "IT Support", "loginId": "App", "id": "App", "supportGroup": "Frontoffice Support", "supportGroupId": "SGP000000000010", "supportOrganization": "IT Support 1" } ], "totalMatches": 1 }; directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); spyOn(this.ticketService, 'getAssigneeBySupportGroupId').and.callFake(function (input) { let deferred = $q.defer(); deferred.resolve(personList); return deferred.promise; }); spyOn(this.ticketService, 'getAssigneeSupportGroupPersons').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(list); return deferred.promise; }); isolatedScope.selectGroup(group); isolatedScope.$apply(); expect(isolatedScope.assignment.organizations.length).toBe(0); expect(isolatedScope.assignee.group.name).toBe('Backoffice Support'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); isolatedScope.setGroupToAll(); isolatedScope.$apply(); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('App Admin'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); describe('if ticket type is incident and records is greater than chunk size then', function () { var ticket, assignee, directiveElem, isolatedScope; beforeEach(function () { ticket = new IncidentVO(loadTicketData(EntityVO.TYPE_INCIDENT)); assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }; this.searchModel.supportGroupChunkSize = 3; this.searchModel.organizationChunkSize = 3; this.searchModel.companyChunkSize = 3; this.searchModel.supportPersonChunkSize = 3; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); }); it('user can search for support group', function () { spyOn(this.searchModel, 'getAssigneeSupportGroupsForCompanyAndOrgByName').and.callFake(function () { deferred.resolve(groupList); return deferred.promise; }); isolatedScope.getSupportGroupsForCompanyAndOrgByName('%%%'); isolatedScope.$apply(); expect(this.searchModel.getAssigneeSupportGroupsForCompanyAndOrgByName).toHaveBeenCalled(); }); it('user can search for organizations', function () { spyOn(this.searchModel, 'getSupportOrganizationsByTextAndCompany').and.callFake(function () { deferred.resolve(organizationList); return deferred.promise; }); isolatedScope.getSupportOrganizationsByTextAndCompany('%%%'); isolatedScope.$apply(); expect(this.searchModel.getSupportOrganizationsByTextAndCompany).toHaveBeenCalled(); }); it('user can search for company', function () { spyOn(this.searchModel, 'getAssigneeSupportCompaniesByText').and.callFake(function () { deferred.resolve(companyList); return deferred.promise; }); isolatedScope.getCompaniesByName('%%%'); isolatedScope.$apply(); expect(this.searchModel.getAssigneeSupportCompaniesByText).toHaveBeenCalled(); }); it('user can select any value from Support Company and data of other dropdowns will be updated accordingly', function () { var company = { "name": "Calbro Services", "attributeMap": {} }; isolatedScope.selectCompany(company); isolatedScope.$apply(); expect(isolatedScope.assigneeCompany.name).toBe(company.name); expect(isolatedScope.assigneeOrganization.name).toBe('All'); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons.length).toBe(4); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('user can select any value from Support Organization and data of other dropdowns will be updated accordingly', function () { var organization = { "name": "IT Support", "attributeMap": { "companyName": "Calbro Services" }, "companyName": "Calbro Services" }; isolatedScope.selectOrganization(organization); isolatedScope.$apply(); expect(isolatedScope.assigneeOrganization.name).toBe('IT Support'); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons.length).toBe(4); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('user can select any value from Support Group', function () { var group = { "name": "Backoffice Support", "organization": "IT Support", "company": { "name": "Calbro Services" }, "id": "SGP000000000009", "companyName": "Calbro Services", "persons": [] }; isolatedScope.selectGroup(group); isolatedScope.$apply(); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignee.group.name).toBe('Backoffice Support'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons.length).toBe(1); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('user can select any value from Support Group if selected group is All', function () { var group = { "name": "All", "id": "All", "companyName": "Calbro Services", "persons": [] }; isolatedScope.selectGroup(group); isolatedScope.$apply(); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons.length).toBe(4); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); }); describe('if ticket type is Knowledge Article and records is greater than chunk size then', function () { var ticket, assignee, directiveElem, isolatedScope; beforeEach(function () { ticket = loadTicketData(EntityVO.TYPE_KNOWLEDGE); assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }; this.searchModel.supportGroupChunkSize = 3; this.searchModel.organizationChunkSize = 3; this.searchModel.companyChunkSize = 3; this.searchModel.supportPersonChunkSize = 3; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); }); it('user can search for support group', function () { spyOn(this.searchModel, 'getAssigneeSupportGroupsForCompanyAndOrgByName').and.callFake(function () { deferred.resolve(groupList); return deferred.promise; }); isolatedScope.getSupportGroupsForCompanyAndOrgByName('%%%'); isolatedScope.$apply(); expect(this.searchModel.getAssigneeSupportGroupsForCompanyAndOrgByName).toHaveBeenCalled(); }); it('user can search for organizations', function () { spyOn(this.searchModel, 'getSupportOrganizationsByTextAndCompany').and.callFake(function () { deferred.resolve(groupList); return deferred.promise; }); isolatedScope.getSupportOrganizationsByTextAndCompany('%%%'); isolatedScope.$apply(); expect(this.searchModel.getSupportOrganizationsByTextAndCompany).toHaveBeenCalled(); }); }); describe('if ticket type is task and records is greater than chunk size then', function () { var ticket, assignee, directiveElem, isolatedScope; beforeEach(function () { ticket = loadTicketData(EntityVO.TYPE_TASK); assignee = { isGroup: false, autoAssign: false, person: new PersonVO(), group: { id: 'All', person: [new PersonVO()] } }; this.searchModel.supportGroupChunkSize = 3; this.searchModel.organizationChunkSize = 3; this.searchModel.companyChunkSize = 3; this.searchModel.supportPersonChunkSize = 3; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); }); it('user can search for support group', function () { spyOn(this.searchModel, 'getAssigneeSupportGroupsForCompanyAndOrgByName').and.callFake(function () { deferred.resolve(groupList); return deferred.promise; }); isolatedScope.getSupportGroupsForCompanyAndOrgByName('%%%'); isolatedScope.$apply(); expect(this.searchModel.getAssigneeSupportGroupsForCompanyAndOrgByName).toHaveBeenCalled(); }); it('user can search for organizations', function () { spyOn(this.searchModel, 'getSupportOrganizationsByTextAndCompany').and.callFake(function () { deferred.resolve(organizationList); return deferred.promise; }); isolatedScope.getSupportOrganizationsByTextAndCompany('%%%'); isolatedScope.$apply(); expect(this.searchModel.getSupportOrganizationsByTextAndCompany).toHaveBeenCalled(); }); it('user can search for support group if location company is null', function () { spyOn(this.searchModel, 'getAssigneeSupportGroupsForCompanyAndOrgByName').and.callFake(function () { deferred.resolve(groupList); return deferred.promise; }); isolatedScope.ticket.company = null; isolatedScope.getSupportGroupsForCompanyAndOrgByName('%%%'); isolatedScope.$apply(); expect(this.searchModel.getAssigneeSupportGroupsForCompanyAndOrgByName).toHaveBeenCalled(); }); it('user can search for organizations if location company is null', function () { spyOn(this.searchModel, 'getSupportOrganizationsByTextAndCompany').and.callFake(function () { deferred.resolve(organizationList); return deferred.promise; }); isolatedScope.ticket.company = null; isolatedScope.getSupportOrganizationsByTextAndCompany('%%%'); isolatedScope.$apply(); expect(this.searchModel.getSupportOrganizationsByTextAndCompany).toHaveBeenCalled(); }); }); it('should load blade in case of problem coordinator role and it is assigned to logged in user and ticket type is Known Error', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = loadTicketData(EntityVO.TYPE_KNOWNERROR); assignee = { isGroup: false, autoAssign: false, person: { loginId: 'Allen' }, group: { id: 'All', person: [new PersonVO()] } }; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee, 'problemcoordinator'); isolatedScope = directiveElem.isolateScope(); expect(isolatedScope.conditions.showAssignToMe).toBeTruthy(); expect(isolatedScope.assignToMe).toBeTruthy(); expect(isolatedScope.assignee.person.supportGroupId).toBe(ticket.coordinatorGroup.id); expect(isolatedScope.assignee.person.supportGroup).toBe(ticket.coordinatorGroup.name); expect(isolatedScope.assigneeCompany.id).toBe('All'); expect(isolatedScope.assigneeOrganization.id).toBe('All'); expect(isolatedScope.assignee.group.id).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.search.text).toBe('Allen Allbrook'); expect(isolatedScope.assigneeLoginId).toBe('Allen'); expect(isolatedScope.conditions.showAssignToGroup).toBeFalsy(); expect(this.searchModel.getAssigneeSupportGroupsForCompanyAndOrg).toHaveBeenCalledWith('', '', 'problemcoordinator', null, 'Calbro Services', null, null, null, null); expect(this.searchModel.getAssigneeSupportOrgByCompany).toHaveBeenCalledWith('', null, 'problemcoordinator', 'Calbro Services', null, null, null, null); }); it('should load blade in case of work order manager role and ticket type is work order', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = loadTicketData(EntityVO.TYPE_WORKORDER); assignee = { isGroup: false, autoAssign: false, person: { loginId: '' }, group: { id: 'All', person: [new PersonVO()] } }; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee, 'workordermanager'); isolatedScope = directiveElem.isolateScope(); expect(isolatedScope.conditions.showAssignToMe).toBeTruthy(); expect(isolatedScope.assigneeOrganization.id).toBe('All'); expect(isolatedScope.assignee.group.id).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.search.text).toBe(''); expect(isolatedScope.conditions.showAssignToGroup).toBeTruthy(); expect(this.searchModel.getAssigneeSupportGroupsForCompanyAndOrg).toHaveBeenCalledWith(undefined, '', 'workordermanager', null, 'Calbro Services', 'Calbro Services', null, null, null); expect(this.searchModel.getAssigneeSupportOrgByCompany).toHaveBeenCalledWith(undefined, null, 'workordermanager', 'Calbro Services', 'Calbro Services', null, null, null); }); it('should load blade if role is not defined(so it would be workorderassignee) and ticket type is work order', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = loadTicketData(EntityVO.TYPE_WORKORDER); assignee = { isGroup: false, autoAssign: false, person: { loginId: '' }, group: { id: 'All', person: [new PersonVO()] } }; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); expect(isolatedScope.conditions.showAssignToMe).toBeTruthy(); expect(isolatedScope.assigneeOrganization.id).toBe('All'); expect(isolatedScope.assignee.group.id).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.search.text).toBe(''); expect(isolatedScope.conditions.showAssignToGroup).toBeTruthy(); expect(this.searchModel.getAssigneeSupportGroupsForCompanyAndOrg).toHaveBeenCalledWith(undefined, '', 'workorderassignee', null, 'Calbro Services', 'Calbro Services', null, null, null); expect(this.searchModel.getAssigneeSupportOrgByCompany).toHaveBeenCalledWith(undefined, null, 'workorderassignee', 'Calbro Services', 'Calbro Services', null, null, null); }); it('should load blade if role is not defined(so it would be releasecoordinator) and ticket type is release', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = loadTicketData(EntityVO.TYPE_RELEASE); assignee = { isGroup: false, autoAssign: false, person: { loginId: '' }, group: { id: 'All', person: [new PersonVO()] } }; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); expect(isolatedScope.conditions.showAssignToMe).toBeTruthy(); expect(isolatedScope.assigneeOrganization.id).toBe('All'); expect(isolatedScope.assignee.group.id).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.search.text).toBe(''); expect(isolatedScope.conditions.showAssignToGroup).toBeTruthy(); expect(this.searchModel.getAssigneeSupportGroupsForCompanyAndOrg).toHaveBeenCalledWith(undefined, '', 'releasecoordinator', null, 'Calbro Services', null, null, null, null); expect(this.searchModel.getAssigneeSupportOrgByCompany).toHaveBeenCalledWith(undefined, null, 'releasecoordinator', 'Calbro Services', null, null, null, null); }); it('should load blade if role is changecoordinator and ticket type is Change request', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = loadTicketData(EntityVO.TYPE_CHANGE); assignee = { isGroup: false, autoAssign: false, person: { loginId: '' }, group: { id: 'All', person: [new PersonVO()] } }; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee, 'changecoordinator'); isolatedScope = directiveElem.isolateScope(); expect(isolatedScope.conditions.showAssignToMe).toBeTruthy(); expect(isolatedScope.assigneeOrganization.id).toBe('All'); expect(isolatedScope.assignee.group.id).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.search.text).toBe(''); expect(isolatedScope.conditions.showAssignToGroup).toBeTruthy(); expect(isolatedScope.assignee.person.supportGroupId).toBe(ticket.supportGroup.id); expect(isolatedScope.assignee.person.supportGroup).toBe(ticket.supportGroup.name); expect(this.searchModel.getAssigneeSupportGroupsForCompanyAndOrg).toHaveBeenCalledWith(undefined, '', 'changecoordinator', null, 'Calbro Services', 'Calbro Services', null, null, null); expect(this.searchModel.getAssigneeSupportOrgByCompany).toHaveBeenCalledWith(undefined, null, 'changecoordinator', 'Calbro Services', 'Calbro Services', null, null, null); }); it('should load blade if role is changemanager and ticket type is Change request', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = loadTicketData(EntityVO.TYPE_CHANGE); assignee = { isGroup: false, autoAssign: false, person: { loginId: '' }, group: { id: 'All', person: [new PersonVO()] } }; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee, 'changemanager'); isolatedScope = directiveElem.isolateScope(); expect(isolatedScope.conditions.showAssignToMe).toBeTruthy(); expect(isolatedScope.assigneeOrganization.id).toBe('All'); expect(isolatedScope.assignee.group.id).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.search.text).toBe(''); expect(isolatedScope.conditions.showAssignToGroup).toBeTruthy(); expect(isolatedScope.assignee.person.supportGroupId).toBe(ticket.supportGroup.id); expect(isolatedScope.assignee.person.supportGroup).toBe(ticket.supportGroup.name); expect(this.searchModel.getAssigneeSupportGroupsForCompanyAndOrg).toHaveBeenCalledWith(undefined, '', 'changemanager', null, 'Calbro Services', 'Calbro Services', null, null, null); expect(this.searchModel.getAssigneeSupportOrgByCompany).toHaveBeenCalledWith(undefined, null, 'changemanager', 'Calbro Services', 'Calbro Services', null, null, null); }); it('should load blade if role is not defined(so it would be knowledgeassignee) and ticket type is knowledge', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = loadTicketData(EntityVO.TYPE_KNOWLEDGE); assignee = { isGroup: false, autoAssign: false, person: { loginId: '' }, group: { id: 'All', person: [new PersonVO()] } }; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); expect(isolatedScope.conditions.showAssignToMe).toBeTruthy(); expect(isolatedScope.assigneeOrganization.id).toBe('All'); expect(isolatedScope.assignee.group.id).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.search.text).toBe(''); expect(isolatedScope.conditions.showAssignToGroup).toBeFalsy(); expect(this.searchModel.getAssigneeSupportGroupsForCompanyAndOrg).toHaveBeenCalledWith(undefined, '', 'knowledgeassignee', null, null, null, 'Calbro Services', null, 'Calbro Services'); expect(this.searchModel.getAssigneeSupportOrgByCompany).toHaveBeenCalledWith(undefined, null, 'knowledgeassignee', null, null, 'Calbro Services', null, 'Calbro Services'); }); it('should select company on init if assignee is not assigned in case of Knowledge ticket', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = loadTicketData(EntityVO.TYPE_KNOWLEDGE); assignee = { isGroup: false, autoAssign: false, person: { loginId: '' }, group: {} }; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); expect(isolatedScope.assigneeCompany.name).toBe('Calbro Services'); expect(isolatedScope.assigneeOrganization.name).toBe('All'); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should select company on init if problem coordinator is not assigned in case of Known Error', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = loadTicketData(EntityVO.TYPE_KNOWNERROR); assignee = { isGroup: false, autoAssign: false, person: { loginId: '' }, group: {} }; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); expect(isolatedScope.assigneeCompany.name).toBe('Calbro Services'); expect(isolatedScope.assigneeOrganization.name).toBe('All'); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should select company on init if assignment is not done and company is selected while creating Incident', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = loadTicketData(EntityVO.TYPE_INCIDENT); ticket.selectedCompany = 'Calbro Services'; delete ticket.customer; assignee = { isGroup: false, autoAssign: false, person: { loginId: '' }, group: {} }; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); expect(isolatedScope.assigneeCompany.name).toBe('Calbro Services'); expect(isolatedScope.assigneeOrganization.name).toBe('All'); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should select company on init if assignment is not done and company is selected while creating Knowledge', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = loadTicketData(EntityVO.TYPE_KNOWLEDGE); ticket.author = { company: { name: 'Calbro Services' } }; delete ticket.customer; assignee = { isGroup: false, autoAssign: false, person: { loginId: '' }, group: {} }; spyAllInitService(this); directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); expect(isolatedScope.assigneeCompany.name).toBe('Calbro Services'); expect(isolatedScope.assigneeOrganization.name).toBe('All'); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.group.name).toBe('All'); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe(''); }); it('should successfully watch data.setValueFlag', function () { var ticket, assignee, directiveElem, isolatedScope; ticket = loadTicketData(EntityVO.TYPE_KNOWLEDGE); assignee = { isGroup: false, autoAssign: false, person: { loginId: '' }, group: {} }; directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); spyOn(isolatedScope, '$emit'); isolatedScope.data = { setValueFlag: 'test', name: 'test' }; isolatedScope.$apply(); expect(isolatedScope.data.setValueFlag).toBe('#$#'); expect(isolatedScope.$emit).toHaveBeenCalledWith(this.events.WIDGET_VALUE_CHANGE, {fieldName: isolatedScope.data.name}); }); it('should intellisense person list while typing person name in search box if tooManySupportPeople is true ', function () { var ticket, assignee, directiveElem, isolatedScope; spyAllInitService(this); ticket = loadTicketData(EntityVO.TYPE_KNOWNERROR); assignee = { isGroup: false, autoAssign: false, person: { loginId: 'Bob' }, group: { id: 'Backoffice Support' } }; this.searchModel.supportPersonChunkSize = 2; directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); isolatedScope.search.text = 'Alle'; isolatedScope.onSearchTextChanged(); this.$timeout.flush(); isolatedScope.$apply(); expect(isolatedScope.assigneeOrganization.name).toBe('All'); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe(''); expect(isolatedScope.search.text).toBe('Alle'); }); it('should intellisense person list while typing person name in search box if tooManySupportPeople is false ', function () { var ticket, assignee, directiveElem, isolatedScope; spyOn(this.searchModel, 'getAssigneeSupportCompanies').and.callFake(function () { let deferred = $q.defer(); deferred.resolve(companyList); return deferred.promise; }); spyOn(this.objectValueMapperService, 'getExactValueByFieldName').and.callFake(function () { if (arguments[0] === 'customerCompany' || arguments[0] === 'locationCompany') { return 'Calbro Services'; } return ''; }); spyOn(this.ticketService, 'getAssigneeBySupportGroupId').and.callFake(function () { let deferred = $q.defer(); deferred.resolve({ results: [personList.results[0]], exceedsChunkSize: false }); return deferred.promise; }); spyAssigneeSupportDropdown(this); ticket = loadTicketData(EntityVO.TYPE_KNOWNERROR); assignee = { isGroup: false, autoAssign: false, person: { loginId: 'Bob' }, group: { id: 'SGP000000000009' } }; directiveElem = getCompiledElement(ticket, false, assignee); isolatedScope = directiveElem.isolateScope(); isolatedScope.search.text = 'Alle'; isolatedScope.onSearchTextChanged(); this.$timeout.flush(); isolatedScope.$apply(); expect(isolatedScope.assigneeOrganization.name).toBe('All'); expect(isolatedScope.assignment.organizations.length).toBe(4); expect(isolatedScope.assignment.groups.length).toBe(5); expect(isolatedScope.assignee.isGroup).toBeFalsy(); expect(isolatedScope.assignee.group.persons[0].fullName).toBe('Allen Allbrook'); expect(isolatedScope.search.filterText).toBe('Alle'); expect(isolatedScope.search.text).toBe('Alle'); }); });