/* Migreringsbeslut: denna test behöver Chrome headless eller PhantomJs + es6-shim för att kunna köras */ describe('TopNavCtrl', function () { var $scope: fb.ITopNavScope; var ctrl; var navigationService: fb.IMockNavigationService; var quickSearchService: fb.IMockQuickSearchService; var postitService: fb.IMockPostitService; var instaellningarService: fb.IMockInstaellningarService; var kontorssamarbetenService: fb.IMockKontorssamarbetenService; var stateService: fb.IMockStateService; var meddelandeTillAnvaendareService: fb.IMockMeddelandeTillAnvaendareService; var location: ng.ILocationService; var timeout: ng.ITimeoutService; var queueService: fb.IQueueService; var uiService: fb.IUIService; var q: ng.IQService; var sideDrawerService: fb.IMockSideDrawerService; var notifyService: fb.IMockNotifyService; beforeEach(function () { angular.mock.module('fasit', 'fbMocks', 'configModelMock'); inject(function ($injector, $rootScope, $controller, $timeout, $q, inloggadAnvaendare) { $scope = $rootScope.$new(); quickSearchService = $injector.get('quickSearchServiceMock'); postitService = $injector.get('postitServiceMock'); navigationService = $injector.get('navigationService'); instaellningarService = $injector.get('instaellningarService'); kontorssamarbetenService = $injector.get('kontorssamarbetenServiceMock'); stateService = $injector.get('stateService'); meddelandeTillAnvaendareService = $injector.get('meddelandeTillAnvaendareService'); queueService = $injector.get('queueService'); uiService = $injector.get('uiService'); sideDrawerService = $injector.get('sideDrawerService'); notifyService = $injector.get('notifyService'); timeout = $timeout; q = $q; ($scope.$parent).InloggadAnvaendare = inloggadAnvaendare; ctrl = $controller('TopNavCtrl', { $scope: $scope, navigationService: navigationService, quickSearchService: quickSearchService, postitService: postitService, instaellningarService: instaellningarService, kontorssamarbetenService: kontorssamarbetenService, meddelandeTillAnvaendareService: meddelandeTillAnvaendareService, queueService: queueService, sideDrawerService: sideDrawerService, notifyService: notifyService } ); $scope.$digest(); }); }); describe('Nytt', function () { it('Mäklarobjekt', function () { spyOn(navigationService, 'goto'); $scope.gotoNyttMaeklarObjekt(); expect(navigationService.goto).toHaveBeenCalled(); }); it('Kalenderpost', function () { spyOn(sideDrawerService, 'setSideDrawer'); $scope.openNyKalenderPost(); expect(sideDrawerService.setSideDrawer).toHaveBeenCalled(); }); it('Epost', function () { spyOn(sideDrawerService, 'setSideDrawer'); $scope.openNyEpost(); expect(sideDrawerService.setSideDrawer).toHaveBeenCalled(); }); it('Sms', function () { spyOn(sideDrawerService, 'setSideDrawer'); $scope.openNyttSms(); expect(sideDrawerService.setSideDrawer).toHaveBeenCalled(); }); }); describe('QuickSearch', function () { var eventDown, eventUp, eventEnter, eventUnknown; beforeEach(function () { $scope.quickSearchHighlight = 0; eventDown = { keyCode: 40 }; eventUp = { keyCode: 38 }; eventUnknown = { keyCode: 1 }; eventEnter = { keyCode: 13 }; }); it('Laddning av data', inject(function (getQuickSearch) { expect($scope.quickSearchResult).toBeUndefined(); $scope.quickSearch('Hej'); expect($scope.quickSearchResult).toBeUndefined(); expect($scope.quickSearchHighlight).toBe(0); $scope.quickSearchKeypress(eventDown); expect($scope.quickSearchHighlight).toBe(0); $scope.$digest(); expect(quickSearchService.getPendingRequests().length).toBe(0); expect($scope.quickSearchResult).toBeUndefined(); timeout.flush(); $scope.$digest(); expect(quickSearchService.getPendingRequests().length).toBe(1); expect($scope.quickSearchResult.$resolved).toBe(false); quickSearchService.resolve(fb.RequestType.GET, '', getQuickSearch); $scope.$digest(); expect(quickSearchService.getPendingRequests().length).toBe(0); expect($scope.quickSearchResult.$resolved).toBe(true); })); it('Ingen sökning med för kort sträng', function () { var oldTimeoutLength = timeout.length; $scope.quickSearch('H'); $scope.$digest(); expect(timeout.length).toBe(oldTimeoutLength); }); it('Avbryt gamla sökningen', inject(function (getQuickSearch) { var promise = quickSearchService.quickSearch('another'); spyOn(quickSearchService, 'quickSearch').and.returnValue(promise); $scope.quickSearch('Hej'); $scope.quickSearch('Hej2'); $scope.$digest(); timeout.flush(); expect(quickSearchService.quickSearch).toHaveBeenCalledWith('Hej2'); expect(quickSearchService.quickSearch).not.toHaveBeenCalledWith('Hej'); })); describe('Pilar i sökresultatet', function () { beforeEach(inject(function (getQuickSearch) { $scope.quickSearch('hej'); timeout.flush(); quickSearchService.resolve(fb.RequestType.GET, '', getQuickSearch); $scope.$digest(); })); it('kan gå upp och ner', function () { $scope.quickSearchKeypress(eventDown); expect($scope.quickSearchHighlight).toBe(1); $scope.quickSearchKeypress(eventUp); expect($scope.quickSearchHighlight).toBe(0); }); it('går inte under noll', function () { $scope.quickSearchKeypress(eventUp); expect($scope.quickSearchHighlight).toBe(0); }); it('går inte över max', function () { var maxIndexOfList = $scope.quickSearchResult.MaeklarObjekts.length + $scope.quickSearchResult.Kontakter.length + 1; $scope.quickSearchHighlight = maxIndexOfList - 1; expect($scope.quickSearchHighlight).toBe(maxIndexOfList - 1); $scope.quickSearchKeypress(eventDown); expect($scope.quickSearchHighlight).toBe(maxIndexOfList); $scope.quickSearchKeypress(eventDown); expect($scope.quickSearchHighlight).toBe(maxIndexOfList); }); it('inget händer vid annan knapptryckning', function () { $scope.quickSearchKeypress(eventUnknown); expect($scope.quickSearchHighlight).toBe(0); }); }); it('Trycker enter i sökresultatet', inject(function (getQuickSearch) { $scope.quickSearch('Hej'); timeout.flush(); quickSearchService.resolve(fb.RequestType.GET, '', getQuickSearch); $scope.$digest(); spyOn(navigationService, 'goto'); var param = $scope.quickSearchResult.MaeklarObjekts[0]; $scope.quickSearchHighlight = 0; $scope.quickSearchKeypress(eventEnter); expect(navigationService.goto).toHaveBeenCalledWith(param); var kontaktIndex = 1; $scope.quickSearchHighlight = $scope.quickSearchResult.MaeklarObjekts.length + 1 + kontaktIndex; //var param2 = $scope.quickSearchResult.Kontakter[kontaktIndex]; //$scope.quickSearchKeypress(eventEnter); //expect(navigationService.goto).toHaveBeenCalledWith(param2); spyOn($scope, 'gotoMaeklarObjektListSearchString') $scope.quickSearchHighlight = $scope.quickSearchResult.MaeklarObjekts.length; $scope.quickSearchKeypress(eventEnter); expect($scope.gotoMaeklarObjektListSearchString).toHaveBeenCalled(); spyOn($scope, 'gotoKontaktListSearchString') $scope.quickSearchHighlight = $scope.quickSearchResult.MaeklarObjekts.length + 1 + $scope.quickSearchResult.Kontakter.length; $scope.quickSearchKeypress(eventEnter); expect($scope.gotoKontaktListSearchString).toHaveBeenCalled(); })); it('Trycker annan tangent i sökresultatet', function () { $scope.search.quickSearchString = 'Hej' $scope.quickSearch($scope.search.quickSearchString); $scope.$digest(); $scope.quickSearchKeypress(eventUnknown); }); it('anropar goto*ListSearchString', function () { spyOn(navigationService, 'gotoObjektlista'); spyOn(navigationService, 'gotoKontaktlista'); spyOn(stateService, 'addState'); spyOn(stateService, 'offLoadState'); $scope.search.quickSearchString = 'Taco'; $scope.gotoMaeklarObjektListSearchString(); expect(navigationService.gotoObjektlista).toHaveBeenCalled(); expect(stateService.addState).toHaveBeenCalled(); expect(stateService.offLoadState).toHaveBeenCalled(); $scope.gotoKontaktListSearchString(); expect(navigationService.gotoKontaktlista).toHaveBeenCalled(); expect((stateService.addState).calls.count()).toBe(2); expect((stateService.offLoadState).calls.count()).toBe(2); }); it('Klickar på konstigt objekt', function () { spyOn(navigationService, 'goto'); $scope.quickSearchClick(new fb.NavigationsObjekt({ ObjektTypId: 3 })); expect(navigationService.goto).not.toHaveBeenCalled(); }); }); describe('Postits', function () { it('Kan lista postits', inject(function (queryPostit) { postitService.resolve(fb.RequestType.QUERY, '', queryPostit); expect($scope.postits.length).toBe(0); $scope.$digest(); expect($scope.postits.length).toBe(2); })); it('Kan öppna postit från lista', inject(function (queryPostit) { postitService.resolve(fb.RequestType.QUERY, '', queryPostit); $scope.$digest(); $scope.setActivePostit($scope.postits[0]); $scope.$digest(); expect($scope.postitDialog.show).toBe(true); expect($scope.postitDialog.add).toBe(false); expect($scope.postitDialog.currentPostit).toBe($scope.postits[0]); })); it('Kan börja skapa ny postit', function () { $scope.setActivePostit(undefined); $scope.$digest(); expect($scope.postitDialog.show).toBe(true); expect($scope.postitDialog.add).toBe(true); expect($scope.postitDialog.currentPostit.Text.value).toBe(''); }); it('Kan lägga till ny postit', inject(function (queryPostit, postAddPostit) { postitService.resolve(fb.RequestType.QUERY, '', queryPostit); $scope.$digest(); $scope.setActivePostit(undefined); $scope.$digest(); $scope.postitDialog.currentPostit.Text = new fb.ChangeTrack(''); $scope.postitDialog.currentPostit.Text.value = 'Hej'; var oldLength = $scope.postits.length; $scope.savePostitDialog(); postitService.resolve(fb.RequestType.ADD, '', postAddPostit); $scope.$digest(); expect($scope.postitDialog.show).toBe(false); expect($scope.postits.length).toBe(oldLength + 1); expect($scope.postits[$scope.postits.length - 1].Text.value).toBe('Hej'); })); it('Skapar inte ny postit om det inte är någon text', inject(function (queryPostit, postAddPostit) { postitService.resolve(fb.RequestType.QUERY, '', queryPostit); spyOn(postitService, 'add'); $scope.$digest(); $scope.setActivePostit(undefined); $scope.$digest(); $scope.postitDialog.currentPostit.Text = new fb.ChangeTrack(''); $scope.postitDialog.currentPostit.Text.value = ''; $scope.savePostitDialog(); $scope.$digest(); expect($scope.postitDialog.show).toBe(false); expect(postitService.add).not.toHaveBeenCalled(); })); it('Kan ändra postit', inject(function (queryPostit) { postitService.resolve(fb.RequestType.QUERY, '', queryPostit); $scope.$digest(); $scope.setActivePostit($scope.postits[0]); $scope.$digest(); $scope.postitDialog.currentPostit.Text.value = 'Hej'; var oldLength = $scope.postits.length; spyOn(postitService, 'save'); $scope.savePostitDialog(); $scope.$digest(); expect(postitService.save).toHaveBeenCalledWith($scope.postits[0]); expect($scope.postitDialog.show).toBe(false); expect($scope.postits.length).toBe(oldLength); expect($scope.postitDialog.currentPostit).toBe($scope.postits[0]); })); it('Kan ta bort postit', inject(function (queryPostit) { postitService.resolve(fb.RequestType.QUERY, '', queryPostit); $scope.$digest(); $scope.setActivePostit($scope.postits[1]); var oldLength = $scope.postits.length; $scope.deletePostit(); postitService.resolve(fb.RequestType.REMOVE, '' + $scope.postits[1].PostitId.value, {}); $scope.$digest(); expect($scope.postits.length).toBe(oldLength - 1); })); it('Kan inte ta bort ej tillagd postit', function () { $scope.setActivePostit(undefined); $scope.$digest(); $scope.postitDialog.currentPostit.Text = new fb.ChangeTrack(''); $scope.postitDialog.currentPostit.Text.value = 'Hej'; $scope.$digest(); $scope.deletePostit(); expect($scope.postitDialog.show).toBe(false); //expect(function () { // $scope.deletePostit(); //}).toThrow(new Error('Kan inte ta bort osparade notisar')); }); }); describe('onHamburgerMenuClick borde påverka #leftNav', function () { it('id klick på #hamburgerMenu borde vi kunna "toggla" klasserna på #leftNav', function () { spyOn(uiService, 'toggle'); $scope.onHamburgerMenuClick(); $scope.$digest(); expect(uiService.toggle).toHaveBeenCalled(); }); }); describe('notis ', function () { it('borde kunna visas och släckas beroende på klickande både på och utanför elementet', function () { expect($scope.showNotis).toBe(false); $scope.onNotisButtonClick(); $scope.$digest(); expect($scope.showNotis).toBe(true); }); it('borde kunna visas vid klick på knapp', function () { expect($scope.showNotis).toBe(false); $scope.hideNotis(); $scope.$digest(); expect($scope.showNotis).toBe(false); $scope.onNotisButtonClick(); $scope.$digest(); expect($scope.showNotis).toBe(true); $scope.hideNotis(); $scope.$digest(); expect($scope.showNotis).toBe(false); }); }); describe('MeddelandeTillAnvaendare', function () { beforeEach(inject(function (getMeddelandeList) { })); it('borde kunna ta bort fasit-meddelande', inject(function (getMeddelandeList) { $scope.getMeddelande(); meddelandeTillAnvaendareService.resolve(fb.RequestType.GET, 'list', getMeddelandeList); $scope.$digest(); var length = $scope.processadeMeddelanden.FasitMeddelandeList.length; var pendingRequests = meddelandeTillAnvaendareService.getPendingRequests().length; var meddelande = $scope.processadeMeddelanden.FasitMeddelandeList[1]; $scope.prioriteratMeddelande.Driftmeddelande = meddelande; $scope.dismissFasitMeddelande(meddelande); expect(meddelandeTillAnvaendareService.getPendingRequests().length).toBe(pendingRequests + 1); meddelandeTillAnvaendareService.resolve(fb.RequestType.SAVE, '','true'); $scope.$digest(); expect($scope.processadeMeddelanden.FasitMeddelandeList.length).toBe(length - 1); })); }); describe('Sparaköer', function () { }); describe('Mergeresolve', function () { it('löser biffen', function () { var obj = { Item: { getGlobalUniqueId: function () { return 1337; }, taco0: { keepLocal: { value: true }, localValue: { value: 'nottaco', originalValue: 'verynottaco', dirty: true }, databaseValue: 'taco' }, taco1: { keepLocal: { value: true }, localValue: { value: 'nottaco', originalValue: 'nottaco', dirty: false }, databaseValue: 'taco' }, taco2: { keepLocal: { value: false }, localValue: { }, databaseValue: 'taco' }, mergeConflicts: [ ] } } obj.Item.mergeConflicts.push(obj.Item.taco0); obj.Item.mergeConflicts.push(obj.Item.taco1); obj.Item.mergeConflicts.push(obj.Item.taco2); spyOn(queueService.get('dirty'), 'enqueue'); spyOn(queueService.get('error'), 'remove'); $scope.resolve(obj); expect(queueService.get('dirty').enqueue).toHaveBeenCalled(); expect(queueService.get('error').remove).toHaveBeenCalled(); expect(obj.Item.mergeConflicts.length).toBe(0); var local0 = obj.Item.taco0.localValue; var local1 = obj.Item.taco1.localValue; var local2 = obj.Item.taco2.localValue; expect(local0.value).toBe('nottaco'); expect(local0.originalValue).toBe('taco'); expect(local0.dirty).toBe(true); expect(local1.value).toBe('nottaco'); expect(local1.originalValue).toBe('taco'); expect(local1.dirty).toBe(true); expect(local2.value).toBe('taco'); expect(local2.originalValue).toBe('taco'); expect(local2.dirty).toBeUndefined(); }); }); });