diff --git a/spec/controllerSpec.js b/spec/controllerSpec.js new file mode 100644 index 0000000..ba240c6 --- /dev/null +++ b/spec/controllerSpec.js @@ -0,0 +1,621 @@ +describe('Controladores abm vehículo', function() { + + var $controller; + + beforeEach(function() { + module('focaAbmVehiculo'); + inject(function(_$controller_) { + $controller = _$controller_; + }); + }); + + describe('Controlador focaAbmVehiculosController', function() { + + it('Existe el controller focaAbmVehiculosController', function() { + //arrange + var controller = $controller('focaAbmVehiculosController', { + $scope: {}, + focaAbmVehiculoService: { + cleanCisternas: function() { return;}, + transportistaSeleccionado: {} + }, + $location: {}, + focaModalService: {}, + $uibModal: {}, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $timeout: {} + }); + + //assert + expect(typeof controller).toEqual('object'); + }); + + it('Crea fecha nueva', function() { + //arrange + var scope = {}; + var controller = $controller('focaAbmVehiculosController', { + $scope: scope, + focaAbmVehiculoService: { + cleanCisternas: function() { return;}, + transportistaSeleccionado: {} + }, + $location: {}, + focaModalService: {}, + $uibModal: {}, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $timeout: {} + }); + + //act + var date = scope.now; + + //assert + expect(angular.isDate(date)).toBe(true); + }); + + it('$scope setea botonera lateral', function() { + //arrange + var scope = {}; + var controller = $controller('focaAbmVehiculosController', { + $scope: scope, + focaAbmVehiculoService: { + cleanCisternas: function() { return;}, + transportistaSeleccionado: {} + }, + $location: {}, + focaModalService: {}, + $uibModal: {}, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $timeout: {} + }); + + //act + var botonera = scope.botonera; + + //assert + expect(angular.isArray(botonera)).toBe(true); + }); + + it('$scope.editar lleva a la ruta correcta', function() { + inject(function($location) { + //arrange + var scope = {}; + var controller = $controller('focaAbmVehiculosController', { + $scope: scope, + focaAbmVehiculoService: { + cleanCisternas: function() { return;}, + transportistaSeleccionado: {} + }, + $location: $location, + focaModalService: {}, + $uibModal: {}, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $timeout: {} + }); + + //act + scope.editar(1); + var esperado = '/vehiculo/' + 1 + '/' + scope.idTransportista; + + //assert + expect($location.url()).toEqual(esperado); + }); + }); + + it('Solicita confirmacion', function() { + //arrange + var scope = {}; + var focaModalService = { + confirm: function() {} + }; + var controller = $controller('focaAbmVehiculosController', { + $scope: scope, + focaAbmVehiculoService: { + cleanCisternas: function() { return;}, + transportistaSeleccionado: {} + }, + $location: {}, + focaModalService: focaModalService, + $uibModal: {}, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $timeout: {} + }); + + //act + spyOn(focaModalService, 'confirm').and.returnValue({then: function() {}}); + scope.solicitarConfirmacion({id: 1, tractor: 'abc'}); + + //assert + expect(focaModalService.confirm).toHaveBeenCalled(); + }); + + it('Elimina vehículo al confirmar', function(done) { + + //arrange + var scope = { + vehiculos: [] + }; + var focaModalService = { + confirm: function() { return; } + }; + var focaAbmVehiculoService = { + cleanCisternas: function() { return;}, + transportistaSeleccionado: {}, + deleteVehiculo: function() { return; } + }; + var controller = $controller('focaAbmVehiculosController', { + $scope: scope, + focaAbmVehiculoService: focaAbmVehiculoService, + $location: {}, + focaModalService: focaModalService, + $uibModal: {}, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $timeout: {} + }); + var promesa = Promise.resolve(true); + + //act + spyOn(focaModalService, 'confirm').and.returnValue(promesa); + spyOn(focaAbmVehiculoService, 'deleteVehiculo'); + scope.solicitarConfirmacion({id: 1, tractor: 'abc'}); + + //assert + promesa.then( + function() { + expect(focaAbmVehiculoService.deleteVehiculo).toHaveBeenCalled(); + done(); + } + ); + }); + + it('Se selecciona transportista', function() { + //arrange + var scope = {}; + var focaModalService = { + modal: function() {} + }; + var controller = $controller('focaAbmVehiculosController', { + $scope: scope, + focaAbmVehiculoService: { + cleanCisternas: function() { return;}, + transportistaSeleccionado: {} + }, + $location: {}, + focaModalService: focaModalService, + $uibModal: {}, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $timeout: {} + }); + + //act + spyOn(focaModalService, 'modal').and.returnValue({then: function() {}}); + scope.seleccionarTransportista(); + + //assert + expect(focaModalService.modal).toHaveBeenCalled(); + }); + + it('Se setea el transportista seleccionado al service', function(done) { + inject(function($timeout) { + + //arrange + var scope = {}; + var focaModalService = { + modal: function() { return; } + }; + var focaAbmVehiculoService = { + cleanCisternas: function() { return;}, + transportistaSeleccionado: {}, + deleteVehiculo: function() { return; }, + getVehiculosPorTransportista: function() { + return { + then: function() { return; } + }; + } + }; + var controller = $controller('focaAbmVehiculosController', { + $scope: scope, + focaAbmVehiculoService: focaAbmVehiculoService, + $location: {}, + focaModalService: focaModalService, + $uibModal: {}, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $timeout: $timeout + }); + var promesa = Promise.resolve({COD: '', NOM: ''}); + + //act + spyOn(focaModalService, 'modal').and.returnValue(promesa); + scope.seleccionarTransportista(); + + //assert + promesa.then( + function() { + expect(focaAbmVehiculoService.transportistaSeleccionado) + .toEqual(jasmine.objectContaining({ + COD: '', NOM: '' + })); + done(); + } + ); + }); + }); + }); + + describe('Controlador focaAbmVehiculoController', function() { + + var $timeout; + beforeEach(inject(function(_$timeout_) { + $timeout = _$timeout_; + })); + + it('Existe el controller focaAbmVehiculoController', function() { + + //arrange + var controller = $controller('focaAbmVehiculoController', { + $scope: {}, + focaAbmVehiculoService: { + getVehiculo: function() { + return { + then: function() { return; } + }; + } + }, + $routeParams: {}, + $location: {}, + $uibModal: {}, + focaModalService: {}, + $timeout: $timeout, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $window: {} + }); + + //assert + expect(typeof controller).toEqual('object'); + + }); + + it('Se busca el transportista cuando es nuevo', function() { + + //arrange + var scope = {}; + var focaAbmVehiculoService = { + getVehiculo: function() { + return { + then: function() { return; } + }; + }, + getTransportistaPorId: function() { return; } + }; + + spyOn(focaAbmVehiculoService, 'getTransportistaPorId') + .and.returnValue({then: function() { return; }}); + + //act + var controller = $controller('focaAbmVehiculoController', { + $scope: scope, + focaAbmVehiculoService: focaAbmVehiculoService, + $routeParams: { + idVehiculo: '0' + }, + $location: {}, + $uibModal: {}, + focaModalService: {}, + $timeout: $timeout, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $window: {} + }); + + //assert + expect(focaAbmVehiculoService.getTransportistaPorId).toHaveBeenCalled(); + }); + + it('No se busca el transportista cuando es nuevo', function() { + + //arrange + var scope = {}; + var focaAbmVehiculoService = { + getVehiculo: function() { + return { + then: function() { return; } + }; + }, + getTransportistaPorId: function() { return; } + }; + + spyOn(focaAbmVehiculoService, 'getTransportistaPorId') + .and.returnValue({then: function() { return; }}); + + //act + var controller = $controller('focaAbmVehiculoController', { + $scope: scope, + focaAbmVehiculoService: focaAbmVehiculoService, + $routeParams: {}, + $location: {}, + $uibModal: {}, + focaModalService: {}, + $timeout: $timeout, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $window: {} + }); + + //assert + expect(focaAbmVehiculoService.getTransportistaPorId).not.toHaveBeenCalled(); + }); + + it('Cancelar lleva a la ruta /vehiculo', function() { + + inject(function($location) { + //arrange + var scope = {}; + var controller = $controller('focaAbmVehiculoController', { + $scope: scope, + focaAbmVehiculoService: { + getVehiculo: function() { + return { + then: function() { return; } + }; + } + }, + $routeParams: {}, + $location: $location, + $uibModal: {}, + focaModalService: {}, + $timeout: $timeout, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $window: {} + }); + + //act + scope.cancelar(); + + //assert + expect($location.url()).toEqual('/vehiculo'); + }); + }); + + it('Editar lleva a la ruta correcta cuando recibe variable key', function() { + + inject(function($location) { + //arrange + var scope = {}; + var controller = $controller('focaAbmVehiculoController', { + $scope: scope, + focaAbmVehiculoService: { + getVehiculo: function() { + return { + then: function() { return; } + }; + } + }, + $routeParams: { + idVehiculo: 1 + }, + $location: $location, + $uibModal: {}, + focaModalService: {}, + $timeout: $timeout, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $window: {} + }); + + //act + scope.editar('testing'); + var esperado = '/vehiculo/1/cisterna/testing'; + + //assert + expect($location.url()).toEqual(esperado); + }); + }); + + it('Editar lleva a la ruta correcta cuando no recibe variable key', function() { + + inject(function($location) { + //arrange + var scope = {}; + var controller = $controller('focaAbmVehiculoController', { + $scope: scope, + focaAbmVehiculoService: { + getVehiculo: function() { + return { + then: function() { return; } + }; + } + }, + $routeParams: { + idVehiculo: 1 + }, + $location: $location, + $uibModal: {}, + focaModalService: {}, + $timeout: $timeout, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $window: {} + }); + + //act + scope.editar(); + var esperado = '/vehiculo/1/cisterna/0/'; + + //assert + expect($location.url()).toEqual(esperado); + }); + }); + + it('$scope.solicitarConfirmacionCisterna ejecuta modal de confirmación', function() { + + //arrange + var focaModalService = { + confirm: function() {} + }; + var scope = {}; + var controller = $controller('focaAbmVehiculoController', { + $scope: scope, + focaAbmVehiculoService: { + getVehiculo: function() { + return { + then: function() { return; } + }; + } + }, + $routeParams: { + idVehiculo: 1 + }, + $location: {}, + $uibModal: {}, + focaModalService: focaModalService, + $timeout: $timeout, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $window: {} + }); + + //act + spyOn(focaModalService, 'confirm').and.returnValue({then: function() {}}); + scope.solicitarConfirmacionCisterna({id: 1, codigo: 'abc'}); + + //assert + expect(focaModalService.confirm).toHaveBeenCalled(); + }); + + it('Elimina y obtiene cisternas al dar confirmar', function(done) { + + //arrange + var scope = {}; + var focaModalService = { + confirm: function() {} + }; + var focaAbmVehiculoService = { + getVehiculo: function() { + return { + then: function() { return; } + }; + }, + getCisternas: function() { return; }, + deleteCisterna: function() { return; } + }; + var controller = $controller('focaAbmVehiculoController', { + $scope: scope, + focaAbmVehiculoService: focaAbmVehiculoService, + $routeParams: {}, + $location: {}, + $uibModal: {}, + focaModalService: focaModalService, + $timeout: $timeout, + focaBotoneraLateralService: { + showSalir: function() { return; }, + showPausar: function() { return; }, + showCancelar: function() { return; }, + showGuardar: function() { return; }, + addCustomButton: function() { return; } + }, + $window: {} + }); + var promesa = Promise.resolve(true); + + //act + spyOn(focaModalService, 'confirm').and.returnValue(promesa); + spyOn(focaAbmVehiculoService, 'deleteCisterna'); + spyOn(focaAbmVehiculoService, 'getCisternas').and.returnValue({ then: function() {} }); + scope.solicitarConfirmacionCisterna({id: 1, codigo: 'abc'}); + + //assert + promesa.then( + function() { + expect(focaAbmVehiculoService.deleteCisterna).toHaveBeenCalled(); + expect(focaAbmVehiculoService.getCisternas).toHaveBeenCalled(); + done(); + } + ); + }); + }); +}); diff --git a/spec/routeSpec.js b/spec/routeSpec.js new file mode 100644 index 0000000..81d3baa --- /dev/null +++ b/spec/routeSpec.js @@ -0,0 +1,44 @@ +describe('Route de abm vehículo', function() { + + var route; + + beforeEach(function() { + module('focaAbmVehiculo'); + inject(function($route) { + route = $route; + }); + }); + + it('Ruta /vehiculo dirige correctamente', function() { + //assert + expect(route.routes['/vehiculo'].controller) + .toBe('focaAbmVehiculosController'); + expect(route.routes['/vehiculo'].templateUrl) + .toBe('src/views/foca-abm-vehiculos-listado.html'); + }); + + it('Ruta /vehiculo/:idVehiculo/:idTransportista dirige correctamente', function() { + //assert + expect(route.routes['/vehiculo/:idVehiculo/:idTransportista'].controller) + .toBe('focaAbmVehiculoController'); + expect(route.routes['/vehiculo/:idVehiculo/:idTransportista'].templateUrl) + .toBe('src/views/foca-abm-vehiculos-item.html'); + }); + + it('Ruta /vehiculo/:idVehiculo dirige correctamente', function() { + //assert + expect(route.routes['/vehiculo/:idVehiculo'].controller) + .toBe('focaAbmVehiculoController'); + expect(route.routes['/vehiculo/:idVehiculo'].templateUrl) + .toBe('src/views/foca-abm-vehiculos-item.html'); + }); + + it('Ruta /vehiculo/:idVehiculo/cisterna/:idx dirige correctamente', function() { + //assert + expect(route.routes['/vehiculo/:idVehiculo/cisterna/:idx'].controller) + .toBe('focaAbmVehiculoCisternaController'); + expect(route.routes['/vehiculo/:idVehiculo/cisterna/:idx'].templateUrl) + .toBe('src/views/foca-abm-cisterna-item.html'); + }); + +}); diff --git a/spec/serviceSpec.js b/spec/serviceSpec.js new file mode 100644 index 0000000..5a258a6 --- /dev/null +++ b/spec/serviceSpec.js @@ -0,0 +1,178 @@ +describe('Servicios de abm vehículo', function() { + + var servicio; + var httpBackend; + + beforeEach(function() { + module('focaAbmVehiculo'); + inject(module(function($provide) { + $provide.value('API_ENDPOINT', { + URL: 'localhost' + }); + })); + inject(function($httpBackend, _focaAbmVehiculoService_) { + httpBackend = $httpBackend; + servicio = _focaAbmVehiculoService_; + }); + }); + + describe('Servicio focaAbmVehiculoService', function() { + + it('Existe el servicio focaAbmVehiculoService', function() { + //assert + expect(typeof servicio).toEqual('object'); + }); + + it('función getVehiculos ejecuta $http.get correctamente', function() { + //arrange + var returnFake = { data: 'test' }; + var result; + httpBackend.expectGET('localhost/vehiculo').respond(returnFake); + + //act + servicio.getVehiculos().then(function(data) { + result = data.data; + }); + httpBackend.flush(); + + //assert + expect(result).toEqual(returnFake); + }); + + it('la función getVehiculo llama $http.get() correctamente', function() { + //arrange + var returnFake = { data: 'test' }; + var parametroPrueba = 1; + var result; + httpBackend.expectGET('localhost/vehiculo/' + parametroPrueba).respond(returnFake); + + //act + servicio.getVehiculo(parametroPrueba).then(function(data) { + result = data.data; + }); + httpBackend.flush(); + + //assert + expect(result).toEqual(returnFake); + }); + + it('la función getTransportistas llama $http.get() correctamente', function() { + //arrange + var returnFake = { data: 'test' }; + var result; + httpBackend.expectGET('localhost/transportista').respond(returnFake); + + //act + servicio.getTransportistas().then(function(data) { + result = data.data; + }); + httpBackend.flush(); + + //assert + expect(result).toEqual(returnFake); + }); + + it('Función guardarVehiculo llama $http.post() correctamente', function() { + //arrange + var returnFake = { data: 'test' }; + var bodyFake = { vehiculo: 1 }; + var result; + httpBackend + .expectPOST('localhost/vehiculo', JSON.stringify(bodyFake)) + .respond(returnFake); + + //act + servicio.guardarVehiculo(bodyFake.vehiculo).then(function(data) { + result = data.data; + }); + httpBackend.flush(); + + //assert + expect(result).toEqual(returnFake); + }); + + it('Función delete vehiculo ejecuta $http.delete correctamente', function() { + //arrange + var returnFake = { data: 'test' }; + var paramFake = 1; + var result; + httpBackend.expectDELETE('localhost/vehiculo/' +paramFake).respond(returnFake); + + //act + servicio.deleteVehiculo(paramFake).then(function(data) { + result = data.data; + }); + httpBackend.flush(); + + //assert + expect(result).toEqual(returnFake); + }); + + it('Función getCisternas devuelve una promesa', function() { + //arrange + var promesa = Promise.all([true]); + + //act + var espera = servicio.getCisternas(); + espera = espera.toString(); + promesa = promesa.toString(); + + //assert + expect(espera).toEqual(promesa); + }); + + it('Función guardarCisternas llama a post /cisterna', function() { + //arrange + var returnFake = { data: 'test' }; + var result; + var bodyFake = { cisternas: 1 }; + httpBackend.expectPOST('localhost/cisterna', JSON.stringify(bodyFake)) + .respond(returnFake); + + //act + servicio.guardarCisternas(bodyFake.cisternas).then(function(data) { + result = data.data; + }); + httpBackend.flush(); + + //assert + expect(result).toEqual(returnFake); + }); + + it('Funcion getVehiculosPorTransportista llama ruta correcta', function() { + //arrange + var returnFake = { data: 'test' }; + var paramFake = 1; + var result; + httpBackend.expectGET('localhost/vehiculo/transportista/' + paramFake) + .respond(returnFake); + + //act + servicio.getVehiculosPorTransportista(paramFake).then(function(data) { + result = data.data; + }); + httpBackend.flush(); + + //assert + expect(result).toEqual(returnFake); + }); + + it('Funcion getTransportistaPorId llama ruta correcta', function() { + //arrange + var returnFake = { data: 'test' }; + var paramFake = 1; + var result; + httpBackend.expectGET('localhost/transportista/' + paramFake) + .respond(returnFake); + + //act + servicio.getTransportistaPorId(paramFake).then(function(data) { + result = data.data; + }); + httpBackend.flush(); + + //assert + expect(result).toEqual(returnFake); + }); + }); +});