示例#1
0
        public void Drone_ValidarCapacidaDeSobra_DeveRetornarResultadoEsperado(double capacidadeDrone, double capacidadeOcupadaDrone, double pesoNovoPedido, bool resultadoEsperado)
        {
            // Arrange

            var latitudeOrigem  = -23.5880684;
            var longitudeOrigem = -46.6564195;
            var drone           = Drone.Criar(capacidadeDrone, 3, 35, 100, DroneStatus.Livre);

            var usuario = Usuario.Criar("test", "*****@*****.**", -23.5950753, -46.645421, UsuarioRole.Cliente);

            //Calcular tempo entrega
            var calcularTempoEntrega = new Mock <ICalcularTempoEntrega>();

            calcularTempoEntrega.Setup(p => p.ObterTempoEntregaEmMinutosIda(latitudeOrigem, longitudeOrigem, usuario.Latitude, usuario.Longitude, drone.Velocidade));

            var pedido = Pedido.Criar(Guid.NewGuid(), capacidadeOcupadaDrone, 1000, usuario);

            pedido.AtualizarStatusPedido(PedidoStatus.EmEntrega);
            drone.AdicionarPedido(pedido, calcularTempoEntrega.Object, latitudeOrigem, longitudeOrigem);

            // Act
            var resultado = drone.ValidarCapacidadeSobra(pesoNovoPedido);

            // Assert
            Assert.Equal(resultadoEsperado, resultado);
        }
示例#2
0
        public void Drone_ValidarAutonomiaDeSobra_DeveRetornarResultadoEsperado(double autonomia, double carga, double autonomiaUtilizada, double tempoDeIda, double tempoDeVolta, bool resultadoEsperado)
        {
            // Arrange
            var drone = Drone.Criar(12000, 3, autonomia, carga, DroneStatus.Livre);

            var usuario = Usuario.Criar("test", "*****@*****.**", It.IsAny <double>(), It.IsAny <double>(), UsuarioRole.Cliente);

            var calcularTempoEntrega = new Mock <ICalcularTempoEntrega>();

            calcularTempoEntrega.Setup(p => p.ObterTempoEntregaEmMinutosIda(It.IsAny <double>(), It.IsAny <double>(), It.IsAny <double>(), It.IsAny <double>(), It.IsAny <double>()));

            var pedido = Pedido.Criar(Guid.NewGuid(), 1000, 1000, usuario);

            pedido.AtualizarStatusPedido(PedidoStatus.EmEntrega);
            drone.AdicionarPedido(pedido, calcularTempoEntrega.Object, It.IsAny <double>(), It.IsAny <double>());

            calcularTempoEntrega.SetupSequence(p => p.ObterTempoEntregaEmMinutosIda(It.IsAny <double>(), It.IsAny <double>(), It.IsAny <double>(), It.IsAny <double>(), It.IsAny <double>()))
            .Returns(autonomiaUtilizada)
            .Returns(tempoDeIda)
            .Returns(tempoDeVolta);

            // Act
            var resultado = drone.ValidarAutonomiaSobraPorPontoEntrega(calcularTempoEntrega.Object, It.IsAny <double>(), It.IsAny <double>(), It.IsAny <double>(), It.IsAny <double>());

            // Assert
            Assert.Equal(resultadoEsperado, resultado);
        }
        public async Task Pedido_QuandoExistiremHistoricosPedidosEmUmDrone_DeveRetornarDoBancoDados()
        {
            //Arrange
            var usuario = Usuario.Criar("test", "test@email", 0, 0, UsuarioRole.Cliente);

            usuario.AdicionarPassword("password");
            usuario.AdicionarRefreshToken("refreshToken", DateTime.Now.AddDays(1));
            await _context.AddAsync(usuario);

            var drone = Drone.Criar(12000, 5, 40, 100, DroneStatus.EmEntrega);
            await _context.AddAsync(drone);

            var pedido = Pedido.Criar(123, 1000, usuario);

            pedido.AssociarDrone(drone);
            await _context.AddAsync(pedido);

            var historicoPedido = HistoricoPedido.Criar(drone.Id, pedido.Id);
            await _context.AddAsync(historicoPedido);

            await _context.SaveChangesAsync();


            //Act
            var historicoDrone = await _pedidoRepository.ObterHistoricoPedidosDoDroneAsync(drone.Id);

            //Assert
            Assert.True(historicoDrone.Count(x => x.DroneId == drone.Id) == 1);
        }
示例#4
0
        private void Seed()
        {
            using var context = new DroneDbContext(ContextOptions);
            context.Database.EnsureDeleted();
            context.Database.EnsureCreated();

            var usuario = Usuario.Criar("test", "*****@*****.**", -23.35566, -46.36554, UsuarioRole.Cliente);

            usuario.AdicionarPassword("123");
            usuario.AdicionarRefreshToken("refreshtoken", DateTime.Now.AddDays(1));
            context.Add(usuario);

            var drone1 = Drone.Criar(12000, 3, 35, 100, DroneStatus.Livre);
            var drone2 = Drone.Criar(10000, 4, 35, 50, DroneStatus.Livre);

            context.Add(drone1);
            context.Add(drone2);

            context.SaveChanges();


            var pedido = Pedido.Criar(Guid.NewGuid(), 5000, 1000, usuario);

            var mongoContext = new DroneMongoDbContext(MongoOptions);

            mongoContext.Pedidos.InsertOne(pedido);
        }
示例#5
0
        public async Task Pedido_AtualizarPedidoENaoRelacionarAUmDrone_Retornar200OK()
        {
            // Arrange
            var latitudeOrigem  = -23.5880684;
            var longitudeOrigem = -46.6564195;

            var latitudeUsuario  = -23.5950753;
            var longitudeUsuario = -46.645421;

            var velocidadeDrone = 3.333;

            IEnumerable <Drone> drones = new List <Drone> {
                Drone.Criar(12000, velocidadeDrone, 35, 100, DroneStatus.EmManutencao)
            };


            var usuario = Usuario.Criar("test", "*****@*****.**", 0, 0, UsuarioRole.Cliente);

            //obter pedido
            var pedido = Pedido.Criar(Guid.NewGuid(), 1000, 1000, usuario);

            pedido.CarregarUsuario(usuario);
            pedido.AtualizarStatusPedido(PedidoStatus.AguardandoPagamento);
            _mocker.GetMock <IUnitOfWork>()
            .Setup(p => p.Pedidos.ObterPorIdAsync(pedido.Id))
            .Returns(Task.FromResult(pedido));

            //Calcular tempo entrega
            _mocker.GetMock <ICalcularTempoEntrega>()
            .Setup(p => p.ObterTempoEntregaEmMinutosIda(latitudeOrigem, longitudeOrigem, latitudeUsuario, longitudeUsuario, velocidadeDrone));

            //Obter ponto inicial do drone
            _mocker.GetMock <IOptions <DronePontoInicialConfig> >()
            .Setup(p => p.Value)
            .Returns(new DronePontoInicialConfig {
                Latitude = latitudeOrigem, Longitude = longitudeOrigem
            });

            //Criar lista de drones
            _mocker.GetMock <IUnitOfWork>()
            .Setup(p => p.Drones.ObterTodosAsync())
            .Returns(Task.FromResult(drones));

            //adicionar pedido
            _mocker.GetMock <IUnitOfWork>()
            .Setup(p => p.Pedidos.AdicionarAsync(It.IsAny <Pedido>()))
            .Returns(Task.CompletedTask);


            var command = new AtualizarPedidoStatusCommand(pedido.Id, PedidoStatus.AguardandoPagamento);

            // Act
            var result = await _handler.Handle(command, CancellationToken.None);

            // Assert
            Assert.False(result.HasFails);
            _mocker.GetMock <IUnitOfWork>().Verify(o => o.Pedidos.AtualizarAsync(pedido), Times.Once);
        }
示例#6
0
        public void ResponseResult_InserirObjeto_DeveRetornarObjetonoData()
        {
            //arrange
            var drone = Drone.Criar(12000, 3, 35, 100, DroneStatus.EmManutencao);

            //Act
            var response = new ResponseResult(drone);

            //Arrange
            Assert.True(((Drone)response.Data).Id == drone.Id);
        }
示例#7
0
        public void Drone_ValidarCapacidaDeSobra_RetornarTrueSeDroneAceitaOPesoDoNovoPedido()
        {
            // Arrange
            var drone = Drone.Criar(12000, 3, 35, 100, DroneStatus.Livre);

            // Act
            var resultado = drone.ValidarCapacidadeSobra(5000);


            // Assert
            Assert.True(resultado);
        }
示例#8
0
        public void Drone_CriarDrone_DeveCriarUmDrone()
        {
            // Arrange
            // Act
            var drone = Drone.Criar(12000, 3, 35, 100, DroneStatus.Livre);

            // Assert
            Assert.Equal(12000, drone.Capacidade);
            Assert.Equal(3, drone.Velocidade);
            Assert.Equal(35, drone.Autonomia);
            Assert.Equal(100, drone.Carga);
            Assert.Equal(DroneStatus.Livre, drone.Status);
        }
示例#9
0
        public async Task Drone_QuandoSalvarDrone_DeveExistirNoBancoDados()
        {
            //Arrange
            var drone = Drone.Criar(8000, 1, 20, 50, DroneStatus.Livre);

            //Act
            await _droneRepository.AdicionarAsync(drone);

            await _context.SaveChangesAsync();

            //Assert
            Assert.True(_context.Set <Drone>().Any(x => x.Capacidade == 8000));
            Assert.True(_context.Set <Drone>().Any(x => x.Velocidade == 1));
            Assert.True(_context.Set <Drone>().Any(x => x.Autonomia == 20));
            Assert.True(_context.Set <Drone>().Any(x => x.Carga == 50));
        }
        public MappingProfile()
        {
            //Commands
            CreateMap <CriarDroneCommand, Drone>()
            .ConstructUsing(c => Drone.Criar(c.Capacidade, c.Velocidade, c.Autonomia, c.Carga, DroneStatus.Livre));

            //Domain to Model
            CreateMap <Drone, DroneDto>()
            .ForMember(d => d.Status, opts => opts.MapFrom(x => x.Status.ToString()));
            CreateMap <Pedido, PedidoDto>();

            CreateMap <Pedido, DronePedidoDto>();
            CreateMap <Usuario, UsuarioDto>();

            CreateMap <Drone, DroneSituacaoDto>()
            .ForMember(d => d.Situacao, opts => opts.MapFrom(x => x.Status.ToString()))
            .ForMember(d => d.Pedidos, opts => opts.MapFrom(x => x.Pedidos));
        }
        public async Task Drone_SolicitarTodosDrones_RetornarListaDeDrones()
        {
            // Arrange
            var query = new DronesQuery();

            IEnumerable <Drone> drones = new List <Drone>
            {
                Drone.Criar(12000, 3, 35, 100, DroneStatus.Livre)
            };

            _mocker.GetMock <IUnitOfWork>()
            .Setup(p => p.Drones.ObterTodosAsync())
            .Returns(Task.FromResult(drones));


            // Act
            var result = await _handler.Handle(query, CancellationToken.None);

            // Assert
            Assert.False(result.HasFails);
            _mocker.GetMock <IUnitOfWork>().Verify(o => o.Drones.ObterTodosAsync(), Times.Once);
        }