/* MMigreringsbeslut: denna test behöver Chrome headless eller PhantomJs + es6-shim för att kunna köras */ /** * @ngdoc MaeklarObjektCtrlSpec * @name fasit.controllerTest.#MaeklarObjektCtrl * @MaeklarObjektCtrl * * @description * Test för MaeklarObjektCtrl * */ describe('MaeklarObjektCtrl', function () { var $scope: fb.IMaeklarObjektScope; var ctrl; var location: ng.ILocationService; var routeParams; var navigationService: fb.IMockNavigationService; var quickSearchService: fb.IMockQuickSearchService; var maeklarObjektService: fb.IMockMaeklarObjektService; var naeromraadeService: fb.IMockNaeromraadeService; var httpMock: fb.IMockHttpService; var q: ng.IQService; var timeout: ng.ITimeoutService; var window: ng.IWindowService; var scrollService; var domainService; var intressentService; var maeklarObjektLaanService; var visningService; var searchAddressService; var commonService; var kommunService: fb.IKommunService; var vaerderingsdataMock: fb.IVaerderingsdataService; var valueguardMock: fb.IValueguardService; var globalTimerService: fb.IMockGlobalTimerService; var maeklarObjektBesiktningService: fb.IMockMaeklarObjektBesiktningService; var foersaekringsPrisService: fb.IMockFoersaekringsPrisService; var kommentarService: fb.IKommentarService; var instaellningarService: fb.IMockInstaellningarService; describe('MaeklarObjektCtrl', function () { beforeEach(function () { angular.mock.module('fasit', 'fbMocks', 'configModelMock'); inject(function ($injector, $rootScope, $controller, $location, $routeParams, $timeout, getMaeklarObjekt, getMaeklarObjektDok, $q, $window) { $scope = $rootScope.$new(); navigationService = $injector.get('navigationService'); quickSearchService = $injector.get('quickSearchServiceMock'); maeklarObjektService = $injector.get('maeklarObjektService'); naeromraadeService = $injector.get('naeromraadeService'); scrollService = $injector.get('scrollService'); domainService = $injector.get('domainService'); intressentService = $injector.get('intressentService'); maeklarObjektLaanService = $injector.get('maeklarObjektLaanService'); visningService = $injector.get('visningServiceMock'); searchAddressService = $injector.get('searchAddressServiceMock'); kommunService = $injector.get('kommunServiceMock'); commonService = $injector.get('commonService'); httpMock = $injector.get('httpMock'); vaerderingsdataMock = $injector.get('vaerderingsdataService'); valueguardMock = $injector.get('valueguardService'); globalTimerService = $injector.get('globalTimerService'); maeklarObjektBesiktningService = $injector.get('maeklarObjektBesiktningServiceMock'); foersaekringsPrisService = $injector.get('foersaekringsPrisServiceMock'); kommentarService = $injector.get('kommentarService'); instaellningarService = $injector.get('instaellningarService'); location = $location; routeParams = $routeParams; routeParams.id = getMaeklarObjekt.MaeklarObjektId.toString(); q = $q; timeout = $timeout; window = $window; $rootScope.InloggadAnvaendare = { promise: $q.defer().promise, LandId: fb.FasITDomain.Land.SVERIGE, BostadsmarknadId: fb.FasITDomain.Bostadsmarknad.SVERIGE }; ctrl = $controller('MaeklarObjektCtrl', { $scope: $scope, $routeParams: routeParams, $location: location, $timeout: timeout, $http: httpMock, scrollService: scrollService, maeklarObjektService: maeklarObjektService, domainService: domainService, intressentService: intressentService, navigationService: navigationService, maeklarObjektLaanService: maeklarObjektLaanService, naeromraadeService: naeromraadeService, visningService: visningService, searchAddressService: searchAddressService, $q: q, $window: window, $rootScope: $rootScope, commonService: commonService, kommunService: kommunService, vaerderingsDataService: vaerderingsdataMock, valueguardService: valueguardMock, maeklarObjektBesiktningService: maeklarObjektBesiktningService, foersaekringsPrisService: foersaekringsPrisService, kommentarService: kommentarService, instaellningarService: instaellningarService }); maeklarObjektService.resolve(fb.RequestType.GET, '' + routeParams.id, getMaeklarObjekt); spyOn($scope.maeklarObjekt, 'enqueue'); spyOn($scope.maeklarObjekt, 'setValue').and.callFake(function (track, value) { track.value = value; track.dirty = true; }); $timeout.flush(); $scope.$digest(); }); }); it('borde kunna initialiseras', function () { expect(ctrl).not.toBeUndefined(); }); describe('Grundfunktionalitet', function () { it('Kan stänga sig själv', function () { var maeklarObjektId = parseInt(routeParams.id, 10); spyOn(navigationService, 'closeWoNavigationObjekt'); $scope.close(); //var callObj = new fb.MaeklarNavigationsObjekt({ MaeklarObjektId: maeklarObjektId, ObjektTypId: 1 }); // Bortkommenterad då den inte används expect(navigationService.closeWoNavigationObjekt).toHaveBeenCalled(); // var theCall = navigationService.closeWoNavigationObjekt; // Bortkommenterad då den inte används //expect(theCall.calls.mostRecent().args[0].MaeklarObjektId).toBe(maeklarObjektId); }); }) // TODO: Mattias - Få dessa att gå igenom igen //describe('Ändra värden som påverkar försäljningsrapporteringen', function () { // it('Om objektet är sålt och slutpris ändras triggas modalen', function () { // expect($scope.showFoersaeljningsrapporteratKommentar).toBe(false); // $scope.maeklarObjekt.AerFoersaeljningsrapporterat.value = true; // $scope.maeklarObjekt.SlutPris.value = 1; // $scope.$digest(); // expect($scope.showFoersaeljningsrapporteratKommentar).toBe(true); // }); // it('Callback från modalen', function () { // var slutPrisTrack = $scope.maeklarObjekt.SlutPris; // var kommentar = $scope.maeklarObjekt.SenasteProvisionsFoeraendringKommentar // slutPrisTrack.value = 1; // $scope.$digest(); // kommentar.value = 'Köttbullar!'; // $scope.foersaeljningsrapporteratKommentarCallBack.Cancel(); // expect(slutPrisTrack.value).toBe(slutPrisTrack.originalValue); // expect(kommentar.value).toBe(kommentar.originalValue); // }); //}); }); describe('MaeklarObjektCtrl Ändra uppdragtyp ska medföra fler ändringar', function () { beforeEach(function () { angular.mock.module('fasit', 'fbMocks', 'configModelMock'); inject(function ($injector, $rootScope, $controller, $location, $routeParams, $timeout, getMaeklarObjekt4, getMaeklarObjektDok, $q, $window) { $scope = $rootScope.$new(); navigationService = $injector.get('navigationService'); quickSearchService = $injector.get('quickSearchServiceMock'); maeklarObjektService = $injector.get('maeklarObjektService'); naeromraadeService = $injector.get('naeromraadeService'); scrollService = $injector.get('scrollService'); domainService = $injector.get('domainService'); intressentService = $injector.get('intressentService'); maeklarObjektLaanService = $injector.get('maeklarObjektLaanService'); visningService = $injector.get('visningServiceMock'); searchAddressService = $injector.get('searchAddressServiceMock'); kommunService = $injector.get('kommunServiceMock'); commonService = $injector.get('commonService'); httpMock = $injector.get('httpMock'); vaerderingsdataMock = $injector.get('vaerderingsdataService'); valueguardMock = $injector.get('valueguardService'); globalTimerService = $injector.get('globalTimerService'); maeklarObjektBesiktningService = $injector.get('maeklarObjektBesiktningServiceMock'); foersaekringsPrisService = $injector.get('foersaekringsPrisServiceMock'); instaellningarService = $injector.get('instaellningarService'); location = $location; routeParams = $routeParams; routeParams.id = getMaeklarObjekt4.MaeklarObjektId.toString(); q = $q; timeout = $timeout; window = $window; $rootScope.InloggadAnvaendare = { promise: $q.defer().promise, LandId: fb.FasITDomain.Land.SVERIGE, BostadsmarknadId: fb.FasITDomain.Bostadsmarknad.SVERIGE }; ctrl = $controller('MaeklarObjektCtrl', { $scope: $scope, $routeParams: routeParams, $location: location, $timeout: timeout, $http: httpMock, scrollService: scrollService, maeklarObjektService: maeklarObjektService, domainService: domainService, intressentService: intressentService, navigationService: navigationService, maeklarObjektLaanService: maeklarObjektLaanService, naeromraadeService: naeromraadeService, visningService: visningService, searchAddressService: searchAddressService, $q: q, $window: window, $rootScope: $rootScope, commonService: commonService, kommunService: kommunService, vaerderingsDataService: vaerderingsdataMock, valueguardService: valueguardMock, maeklarObjektBesiktningService: maeklarObjektBesiktningService, foersaekringsPrisService: foersaekringsPrisService, instaellningarService: instaellningarService }); maeklarObjektService.resolve(fb.RequestType.GET, '' + routeParams.id, getMaeklarObjekt4); spyOn($scope.maeklarObjekt, 'enqueue'); spyOn($scope.maeklarObjekt, 'setValue').and.callFake(function (track, value) { track.value = value; track.dirty = true; }); $timeout.flush(); $scope.$digest(); }); }); it('Om uppdragstyp ändras till S ska saker nullas', function () { var foeraendradeAttribut = [ $scope.maeklarObjekt.UppdragStatus, $scope.maeklarObjekt.StartPris, $scope.maeklarObjekt.PrisText, $scope.maeklarObjekt.ProvisVisaEjIAvtal, $scope.maeklarObjekt.ProvisProc, $scope.maeklarObjekt.ProvisText, $scope.maeklarObjekt.PaaGaang ]; spyOn(globalTimerService, 'globalSave'); spyOn($scope.maeklarObjekt, 'applyValue') // Ändra uppdragtyp till skrivning $scope.maeklarObjekt.UppdragTyp.value = fb.FasITDomain.UppdragTyp.SKRIVNING; $scope.maeklarObjekt.UppdragTyp.dirty = true; $scope.$digest(); expect(globalTimerService.globalSave).toHaveBeenCalledWith(true); expect($scope.maeklarObjekt.UppdragTyp.value).toBe(fb.FasITDomain.UppdragTyp.SKRIVNING); expect($scope.maeklarObjekt.UppdragStatusSpecifikation.value).toBe(fb.FasITDomain.UppdragStatusSpecifikation.SKRIVNING); expect($scope.maeklarObjekt.UppdragStatusSpecifikation.dirty).toBe(true); for (var i = 0; i < foeraendradeAttribut.length; i++) { expect(foeraendradeAttribut[i]['value']).toBe(null); expect(foeraendradeAttribut[i]['dirty']).toBe(true); } }); it('Om uppdragstyp ändras till V ska saker nullas', function () { var foeraendradeAttribut = [ $scope.maeklarObjekt.UppdragStatus, $scope.maeklarObjekt.SlutPris, $scope.maeklarObjekt.ProvisVisaEjIAvtal, $scope.maeklarObjekt.ProvisProc, $scope.maeklarObjekt.ProvisText, $scope.maeklarObjekt.HandpenningDeponeras, $scope.maeklarObjekt.HandpenningBelopp, $scope.maeklarObjekt.HandpenningSkaErlaeggasDatum, $scope.maeklarObjekt.HandpenningErlagdDatum, $scope.maeklarObjekt.HandpenningRedovisadDatum, $scope.maeklarObjekt.HandpenningRedovisaRaenta, $scope.maeklarObjekt.DellikvidDatum, $scope.maeklarObjekt.DellikvidBelopp, $scope.maeklarObjekt.ReversBelopp, $scope.maeklarObjekt.PaaGaang ]; spyOn(globalTimerService, 'globalSave'); spyOn($scope.maeklarObjekt, 'applyValue') // Ändra uppdragtyp till värdering $scope.maeklarObjekt.UppdragTyp.value = fb.FasITDomain.UppdragTyp.VAERDERING; $scope.maeklarObjekt.UppdragTyp.dirty = true; $scope.$digest(); expect(globalTimerService.globalSave).toHaveBeenCalledWith(true); expect($scope.maeklarObjekt.UppdragTyp.value).toBe(fb.FasITDomain.UppdragTyp.VAERDERING); expect($scope.maeklarObjekt.UppdragStatusSpecifikation.value).toBe(fb.FasITDomain.UppdragStatusSpecifikation.VAERDERING); expect($scope.maeklarObjekt.UppdragStatusSpecifikation.dirty).toBe(true); for (var i = 0; i < foeraendradeAttribut.length; i++) { expect(foeraendradeAttribut[i]['value']).toBe(null); expect(foeraendradeAttribut[i]['dirty']).toBe(true); } }); it('Om uppdragstyp ändras till F ska uppdragstatus sättas', function () { spyOn($scope.maeklarObjekt, 'applyValue') // Uppdragstyp är F, gör om till S innan $scope.maeklarObjekt.UppdragTyp.value = fb.FasITDomain.UppdragTyp.SKRIVNING; $scope.maeklarObjekt.UppdragTyp.dirty = true; $scope.$digest(); // Ändra uppdragtyp till föräsljning $scope.maeklarObjekt.UppdragTyp.value = fb.FasITDomain.UppdragTyp.FOERSAELJNING; $scope.maeklarObjekt.UppdragTyp.dirty = true; spyOn(globalTimerService, 'globalSave'); expect(globalTimerService.globalSave).not.toHaveBeenCalled(); $scope.$digest(); expect(globalTimerService.globalSave).toHaveBeenCalledWith(true); expect($scope.maeklarObjekt.UppdragTyp.value).toBe(fb.FasITDomain.UppdragTyp.FOERSAELJNING); expect($scope.maeklarObjekt.UppdragStatus.value).toBe(fb.FasITDomain.UppdragStatus.FOERBEARBETNING); expect($scope.maeklarObjekt.UppdragStatus.dirty).toBe(true); }); }); });