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

321 lines
11 KiB
JavaScript

describe('Test POI Location directive', function () {
var compile, scope, $httpBackend, locationModel, events, originalTimeout;
beforeEach(module('myitsmApp','templates'));
beforeEach(function(){
inject(function($compile, $rootScope, $injector, _locationModel_, _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/serverstates').respond(200);
$httpBackend.whenGET('/smartit/rest/sessionstatus?getLicenseKey=true').respond(200);
$httpBackend.whenGET('/smartit/rest/v2/bulk/location?fields=id,name,address&floor_map_count=true&floor_map_with_images_only=true&include=floormap%5Bid,name,locationId%5D').respond(200);
compile = $compile;
scope = $rootScope.$new();
locationModel = _locationModel_;
events = _events_;
});
});
beforeEach(function() {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
});
afterEach(function() {
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});
beforeEach(inject(function ($q, $rootScope) {
var deferred = $q.defer(), success = {id: 'AG00123F73CF5EDVYTSQN8FaAAZsUA'};
spyOn(locationModel, 'filterLocations').and.callFake(function () {
deferred.resolve(success);
return deferred.promise;
});
spyOn(locationModel, 'filterLocationPOI').and.callFake(function () {
deferred.resolve(success);
return deferred.promise;
});
spyOn(locationModel, 'getLocationByPoiId').and.callFake(function () {
deferred.resolve(success);
return deferred.promise;
});
spyOn(locationModel, 'poiByLocationCache').and.callFake(function () {
deferred.resolve(success);
return deferred.promise;
});
}));
function getCompiledElement(){
var element = angular.element('<poi-location data="field" is-editable="true"></poi-location>');
var compiledElement = compile(element)(scope);
scope.$digest();
return compiledElement;
}
it('should compile', function(){
var field = {
"id": "AGGAA5V0GEOYAAPBKJINA55318BHWR",
"name": "workOrderLocation",
"type": "poiLocation",
"dataType": "widget",
"displayOrder": 0,
"groupMember": false,
"widgetMember": false,
"ootb": true,
"itsmRequired": false,
"hide": false,
"required": false,
"editable": true,
"hideLabel": false,
"accessible": true
};
scope.field = new FieldVO().build(field);
scope.ticket = {};
scope.isNew = false;
var directiveElem = getCompiledElement();
var divElem = directiveElem[0];
expect(divElem).toBeDefined();
});
it('should set location null', function(){
var field = {
"id": "AGGAA5V0GEOYAAPBKJINA55318BHWR",
"name": "workOrderLocation",
"type": "poiLocation",
"dataType": "widget",
"displayOrder": 0,
"groupMember": false,
"widgetMember": false,
"ootb": true,
"itsmRequired": false,
"hide": false,
"required": false,
"editable": true,
"hideLabel": false,
"accessible": true
};
scope.field = new FieldVO().build(field);
scope.ticket = {};
scope.isNew = false;
var directiveElem = getCompiledElement(), clearAll = true,
isolatedScope = directiveElem.isolateScope();
isolatedScope.clearField(clearAll);
scope.$apply();
expect(isolatedScope.viewData.location).toEqual(null);
});
it('should set poi null', function(){
var field = {
"id": "AGGAA5V0GEOYAAPBKJINA55318BHWR",
"name": "workOrderLocation",
"type": "poiLocation",
"dataType": "widget",
"displayOrder": 0,
"groupMember": false,
"widgetMember": false,
"ootb": true,
"itsmRequired": false,
"hide": false,
"required": false,
"editable": true,
"hideLabel": false,
"accessible": true
};
scope.field = new FieldVO().build(field);
var directiveElem = getCompiledElement(), clearAll = false,
isolatedScope = directiveElem.isolateScope();
isolatedScope.clearField(clearAll);
scope.$apply();
expect(isolatedScope.viewData.poi).toEqual(null);
});
it('should invoke watch for setValueFlag', function(){
var field = {
"id": "AGGAA5V0GEOYAAPBKJINA55318BHWR",
"name": "workOrderLocation",
"type": "poiLocation",
"dataType": "widget",
"displayOrder": 0,
"groupMember": false,
"widgetMember": false,
"ootb": true,
"itsmRequired": false,
"hide": false,
"required": false,
"editable": true,
"hideLabel": false,
"accessible": true
};
scope.field = new FieldVO().build(field);
scope.field.setValueFlag = {};
scope.$digest();
getCompiledElement();
expect(scope.field.setValueFlag).toEqual('#$#');
});
it('should filter location by criteria', function(){
var field = {
"id": "AGGAA5V0GEOYAAPBKJINA55318BHWR",
"name": "workOrderLocation",
"type": "poiLocation",
"dataType": "widget",
"displayOrder": 0,
"groupMember": false,
"widgetMember": false,
"ootb": true,
"itsmRequired": false,
"hide": false,
"required": false,
"editable": true,
"hideLabel": false,
"accessible": true
};
scope.field = new FieldVO().build(field);
var directiveElem = getCompiledElement(), term = 'location',
isolatedScope = directiveElem.isolateScope();
isolatedScope.filterLocationsByCriteria(term);
scope.$apply();
expect(locationModel.filterLocations).toHaveBeenCalled();
});
it('should filter POI by criteria', function(){
var field = {
"id": "AGGAA5V0GEOYAAPBKJINA55318BHWR",
"name": "workOrderLocation",
"type": "poiLocation",
"dataType": "widget",
"displayOrder": 0,
"groupMember": false,
"widgetMember": false,
"ootb": true,
"itsmRequired": false,
"hide": false,
"required": false,
"editable": true,
"hideLabel": false,
"accessible": true
};
scope.field = new FieldVO().build(field);
var directiveElem = getCompiledElement(), term = 'location',
isolatedScope = directiveElem.isolateScope();
isolatedScope.viewData.location = {id: 'AGGAA5V0GEOYAAPBKJINA55318BH'};
isolatedScope.filterPOIbyCriteria(term);
scope.$apply();
expect(locationModel.filterLocationPOI).toHaveBeenCalled();
});
it('should handle location change', function(){
var field = {
"id": "AGGAA5V0GEOYAAPBKJINA55318BHWR",
"name": "workOrderLocation",
"type": "poiLocation",
"dataType": "widget",
"displayOrder": 0,
"groupMember": false,
"widgetMember": false,
"ootb": true,
"itsmRequired": false,
"hide": false,
"required": false,
"editable": true,
"hideLabel": false,
"accessible": true
};
scope.field = new FieldVO().build(field);
var directiveElem = getCompiledElement(),
isolatedScope = directiveElem.isolateScope();
isolatedScope.handleLocationChange();
scope.$apply();
expect(scope.field.value).toEqual(null);
});
it('should handle POI change', function(){
var field = {
"id": "AGGAA5V0GEOYAAPBKJINA55318BHWR",
"name": "workOrderLocation",
"type": "poiLocation",
"dataType": "widget",
"displayOrder": 0,
"groupMember": false,
"widgetMember": false,
"ootb": true,
"itsmRequired": false,
"hide": false,
"required": false,
"editable": true,
"hideLabel": false,
"accessible": true
};
scope.field = new FieldVO().build(field);
var directiveElem = getCompiledElement(),
isolatedScope = directiveElem.isolateScope();
isolatedScope.viewData.poi = {id: 'AGGAA5V0GEOYAAPBKJINA55318BH'};
isolatedScope.handlePOIChange();
scope.$apply();
expect(scope.field.value.poiId).toBe('AGGAA5V0GEOYAAPBKJINA55318BH');
});
it('should show POI map', function(){
var field = {
"id": "AGGAA5V0GEOYAAPBKJINA55318BHWR",
"name": "workOrderLocation",
"type": "poiLocation",
"dataType": "widget",
"displayOrder": 0,
"groupMember": false,
"widgetMember": false,
"ootb": true,
"itsmRequired": false,
"hide": false,
"required": false,
"editable": true,
"hideLabel": false,
"accessible": true
};
scope.field = new FieldVO().build(field);
var directiveElem = getCompiledElement(), poi = {poiId: 'India'},
isolatedScope = directiveElem.isolateScope();
isolatedScope.viewData.poi = {id: 'AGGAA5V0GEOYAAPBKJINA55318BH'};
isolatedScope.showPOIMap(poi);
scope.$apply();
expect(scope.field.value).toBeDefined();
});
it('should listen to DISCARD_CHANGES and assign data', inject(function ($rootScope) {
var field = {
"id": "AGGAA5V0GEOYAAPBKJINA55318BHR",
"name": "workOrderLocation",
"type": "poiLocation",
"dataType": "widget",
"displayOrder": 0,
"groupMember": false,
"widgetMember": false,
"ootb": true,
"itsmRequired": false,
"hide": false,
"required": false,
"editable": true,
"hideLabel": false,
"accessible": true
};
scope.field = new FieldVO().build(field);
scope.field.value = {poiId:'123'};
scope.viewData = {poi: false};
scope.$digest();
var directiveElem = getCompiledElement();
var isoScope = directiveElem.isolateScope();
isoScope.$parent.$broadcast(events.DISCARD_CHANGES);
expect(scope.field.setValueFlag).toEqual('#$#');
}));
});