controllerSpec.js 10.4 KB
describe('Controladores de abm chofer', function() {

    var $controller;

    beforeEach(function() {
        module('focaAbmChofer');
        inject(function(_$controller_) {
            $controller = _$controller_;
        });
    });

    describe('Controlador focaAbmChoferesController', function() {

        it('Existe el controlador focaAbmChoferesController', function() {
            //arrange
            var controlador = $controller('focaAbmChoferesController', {
                $scope: {},
                focaAbmChoferService: {
                    transportistaSeleccionado: function() { return; }
                },
                $location: {},
                $uibModal: {},
                focaModalService: {},
                focaBotoneraLateralService: {},
                $timeout: function() { return; }
            });

            //assert
            expect(typeof controlador).toEqual('object');
        });

        it('$scope.solicitarConfirmacion levanta modal de confirmacion', function() {
            //arrange
            var fakeParam = '';
            var scope = {};
            var focaModalService = {
                confirm: function() { }
            };
            var controlador = $controller('focaAbmChoferesController', {
                $scope: scope,
                focaAbmChoferService: {
                    transportistaSeleccionado: function() { return; }
                },
                $location: {},
                $uibModal: {},
                focaModalService: focaModalService,
                focaBotoneraLateralService: {},
                $timeout: function() { return; }
            });
            console.info(controlador);

            //act
            spyOn(focaModalService, 'confirm').and.returnValue({ then: function() { }});
            scope.solicitarConfirmacion(fakeParam);

            //assert
            expect(focaModalService.confirm).toHaveBeenCalled();
        });

        it('$scope.solicitarConfirmacion elimina al confirmar', function(done) {
            //arrange
            var scope = {};
            var focaModalService = {
                confirm: function() {
                    return {
                        then: function() { }
                    };
                }
            };
            var focaAbmChoferService = {
                transportistaSeleccionado: function() { return; },
                deleteChofer: function() { }
            };
            var controlador = $controller('focaAbmChoferesController', {
                $scope: scope,
                focaAbmChoferService: focaAbmChoferService,
                $location: {},
                $uibModal: {},
                focaModalService: focaModalService,
                focaBotoneraLateralService: {},
                $timeout: function() { return; }
            });
            console.info(controlador);
            var fakeParam = '';
            var promesa = Promise.resolve(true);

            //act
            spyOn(focaModalService, 'confirm').and.returnValue(promesa);
            spyOn(focaAbmChoferService, 'deleteChofer');
            scope.solicitarConfirmacion(fakeParam);

            //assert
            promesa.then(function() {
                expect(focaAbmChoferService.deleteChofer).toHaveBeenCalled();
                done();
            });
        });

        it('$scope.seleccionarTransportista levanta modal', function() {
            //arrange
            var scope = {};
            var focaModalService = {
                modal: function() { }
            };
            var controlador = $controller('focaAbmChoferesController', {
                $scope: scope,
                focaAbmChoferService: {
                    transportistaSeleccionado: function() { }
                },
                $location: {},
                $uibModal: {},
                focaModalService: focaModalService,
                focaBotoneraLateralService: {},
                $timeout: function() { return; }
            });
            console.info(controlador);

            //act
            spyOn(focaModalService, 'modal').and.returnValue({ then: function() { }});
            scope.seleccionarTransportista();

            //assert
            expect(focaModalService.modal).toHaveBeenCalled();
        });
    });

    describe('Controlador focaAbmChoferController', function() {

        it('Existe el controlador focaAbmChoferController', function() {
            //arrange
            var controlador = $controller('focaAbmChoferController', {
                $scope: {},
                focaAbmChoferService: {
                    getTiposDocumento: function() {
                        return {
                            then: function() { }
                        };
                    },
                    getChofer: function() {
                        return {
                            then: function() { }
                        };
                    },
                    getTransportistas: function() {
                        return {
                            then: function() { }
                        };
                    }
                },
                $routeParams: {},
                $location: {},
                focaBotoneraLateralService: {},
                $timeout: function() { return; },
                focaModalService: {}
            });

            //assert
            expect(typeof controlador).toEqual('object');
        });

        it('$scope.cancelar lleva a la ruta correcta', function() {
            inject(function($location) {
                //arrange
                var scope = {};
                var controlador = $controller('focaAbmChoferController', {
                    $scope: scope,
                    focaAbmChoferService: {
                        getTiposDocumento: function() {
                            return {
                                then: function() { }
                            };
                        },
                        getChofer: function() {
                            return {
                                then: function() { }
                            };
                        },
                        getTransportistas: function() {
                            return {
                                then: function() { }
                            };
                        }
                    },
                    $routeParams: {},
                    $location: $location,
                    focaBotoneraLateralService: {},
                    $timeout: function() { return; },
                    focaModalService: {}
                });
                console.info(controlador);

                //act
                scope.cancelar();

                //assert
                expect($location.url()).toEqual('/chofer');
            });
        });

        it('$scope.guardar guarda chofer al validarDNI() da ok', function(done) {

            //arrange
            var scope = {};
            var focaAbmChoferService = {
                getTiposDocumento: function() {
                    return {
                        then: function() { }
                    };
                },
                getChofer: function() {
                    return {
                        then: function() { }
                    };
                },
                getTransportistas: function() {
                    return {
                        then: function() { }
                    };
                },
                guardarChofer: function() { },
                getChoferPorDni: function() { }
            };
            var controlador = $controller('focaAbmChoferController', {
                $scope: scope,
                focaAbmChoferService: focaAbmChoferService,
                $routeParams: {},
                $location: {},
                focaBotoneraLateralService: {},
                $timeout: function() { return; },
                focaModalService: {}
            });
            console.info(controlador);
            var resolveFake = { data: false };
            var promesaChoferPorDni = Promise.resolve(resolveFake);
            
            //act
            spyOn(focaAbmChoferService, 'guardarChofer').and.returnValue({ then: function() { }});
            spyOn(focaAbmChoferService, 'getChoferPorDni').and.returnValue(promesaChoferPorDni);
            scope.guardar(13);

            //assert
            promesaChoferPorDni.then(function() {
                setTimeout(function() {
                    expect(focaAbmChoferService.guardarChofer).toHaveBeenCalled();
                    done();
                });
            });
        });

        it('$scope.guardar da alerta chofer al validarDNI() da reject', function(done) {

            //arrange
            var scope = {};
            var focaModalService = {
                alert: function() { }
            };
            var focaAbmChoferService = {
                getTiposDocumento: function() {
                    return {
                        then: function() { }
                    };
                },
                getChofer: function() {
                    return {
                        then: function() { }
                    };
                },
                getTransportistas: function() {
                    return {
                        then: function() { }
                    };
                },
                getChoferPorDni: function() { }
            };
            var controlador = $controller('focaAbmChoferController', {
                $scope: scope,
                focaAbmChoferService: focaAbmChoferService,
                $routeParams: {},
                $location: {},
                focaBotoneraLateralService: {},
                $timeout: function() { return; },
                focaModalService: focaModalService
            });
            console.info(controlador);
            var resolveFake = { data: { id: true } };
            var promesaChoferPorDni = Promise.resolve(resolveFake);

            //act
            spyOn(focaAbmChoferService, 'getChoferPorDni').and.returnValue(promesaChoferPorDni);
            spyOn(focaModalService, 'alert');
            scope.chofer.id = 'dato prueba';
            scope.guardar(13);

            //assert
            promesaChoferPorDni.then(function() {
                //await sleep(100);
                setTimeout(function() {
                    expect(focaModalService.alert).toHaveBeenCalled();
                    done();
                });
            });
        });
    });
});