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(''); 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('#$#'); })); });