コード例 #1
0
        public async Task Get_carrinho_cliente_carrinho_not_found()
        {
            //arrange
            string          clienteId    = "123";
            CarrinhoCliente carrinhoFake = GetCarrinhoClienteFake(clienteId);

            _carrinhoRepositoryMock
            .Setup(r => r.GetCarrinhoAsync(clienteId))
            .ReturnsAsync((CarrinhoCliente)null)
            .Verifiable();

            var controller =
                new CarrinhoController(_carrinhoRepositoryMock.Object,
                                       _identityServiceMock.Object, _serviceBusMock.Object);

            //act
            IActionResult actionResult = await controller.Get(clienteId);

            //assert
            OkObjectResult  okObjectResult  = Assert.IsType <OkObjectResult>(actionResult);
            CarrinhoCliente carrinhoCliente = Assert.IsAssignableFrom <CarrinhoCliente>(okObjectResult.Value);

            Assert.Equal(clienteId, carrinhoCliente.ClienteId);
            _carrinhoRepositoryMock.Verify();
        }
コード例 #2
0
        public async Task Get_carrinho_cliente_sucesso()
        {
            //Arrange
            var fakeClienteId = "1";
            var carrinhoFake  = GetCarrinhoClienteFake(fakeClienteId);

            _carrinhoRepositoryMock
            .Setup(x => x.GetCarrinhoAsync(It.IsAny <string>()))
            .Returns(Task.FromResult(carrinhoFake))
            .Verifiable();
            _identityServiceMock.Setup(x => x.GetUserIdentity()).Returns(fakeClienteId);
            _serviceBusMock.Setup(x => x.Publish(It.IsAny <CheckoutEvent>(), null));

            //Act
            var carrinhoController = new CarrinhoController(
                _carrinhoRepositoryMock.Object,
                _identityServiceMock.Object,
                _serviceBusMock.Object);

            var actionResult = await carrinhoController.Get(fakeClienteId) as OkObjectResult;

            //Assert
            OkObjectResult  okObjectResult  = Assert.IsType <OkObjectResult>(actionResult);
            CarrinhoCliente carrinhoCliente = Assert.IsAssignableFrom <CarrinhoCliente>(okObjectResult.Value);

            Assert.Equal(fakeClienteId, carrinhoCliente.ClienteId);
            Assert.Equal(carrinhoFake.Itens[0].ProdutoId, carrinhoCliente.Itens[0].ProdutoId);
            Assert.Equal(carrinhoFake.Itens[1].ProdutoId, carrinhoCliente.Itens[1].ProdutoId);
            Assert.Equal(carrinhoFake.Itens[2].ProdutoId, carrinhoCliente.Itens[2].ProdutoId);
            _carrinhoRepositoryMock.Verify();
            _identityServiceMock.Verify();
            _serviceBusMock.Verify();
        }
コード例 #3
0
        public async Task AddItem_success()
        {
            //arrange
            var          clienteId = "123";
            var          carrinho  = GetCarrinhoClienteFake(clienteId);
            ItemCarrinho input     = new ItemCarrinho("004", "004", "produto 004", 45.67m, 4);
            var          itens     = carrinho.Itens;

            itens.Add(input);
            _carrinhoRepositoryMock
            .Setup(c => c.AddCarrinhoAsync(clienteId, It.IsAny <ItemCarrinho>()))
            .ReturnsAsync(new CarrinhoCliente
            {
                ClienteId = clienteId,
                Itens     = itens
            })
            .Verifiable();

            var controller = new CarrinhoController(
                _carrinhoRepositoryMock.Object,
                _identityServiceMock.Object,
                _serviceBusMock.Object);

            //act
            ActionResult <CarrinhoCliente> actionResult = await controller.AddItem(clienteId, input);

            //assert
            OkObjectResult  okObjectResult  = Assert.IsType <OkObjectResult>(actionResult.Result);
            CarrinhoCliente carrinhoCliente = Assert.IsAssignableFrom <CarrinhoCliente>(okObjectResult.Value);

            Assert.Equal(4, carrinhoCliente.Itens.Count());
            _carrinhoRepositoryMock.Verify();
            _identityServiceMock.Verify();
            _serviceBusMock.Verify();
        }
        private async Task <CarrinhoItem> ObterItemCarrinhoValidado(Guid produtoId, CarrinhoCliente carrinho, CarrinhoItem item = null)
        {
            if (item != null && produtoId != item.ProdutoId)
            {
                AdicionarErroProcessamento("O item não corresponde ao informado");
                return(null);
            }

            if (carrinho == null)
            {
                AdicionarErroProcessamento("Carrinho não encontrado");
                return(null);
            }

            var itemCarrinho = await _context.CarrinhoItens
                               .FirstOrDefaultAsync(i => i.CarrinhoId == carrinho.Id && i.ProdutoId == produtoId);

            if (itemCarrinho == null || !carrinho.CarrinhoItemExistente(itemCarrinho))
            {
                AdicionarErroProcessamento("O item não está no carrinho");
                return(null);
            }

            return(itemCarrinho);
        }
        public async Task <UpdateQuantidadeOutput> UpdateItemCarrinhoAsync(string customerId, UpdateQuantidadeInput item)
        {
            if (item == null)
            {
                throw new ArgumentNullException();
            }

            if (string.IsNullOrWhiteSpace(item.Id))
            {
                throw new ArgumentException();
            }

            if (item.Quantity < 0)
            {
                throw new ArgumentOutOfRangeException();
            }

            var basket = await GetCarrinhoAsync(customerId);

            ItemCarrinho itemDB = basket.Itens.Where(i => i.ProdutoId == item.Id).SingleOrDefault();

            itemDB.Quantidade = item.Quantity;
            if (item.Quantity == 0)
            {
                basket.Itens.Remove(itemDB);
            }
            CarrinhoCliente customerBasket = await UpdateCarrinhoAsync(basket);

            return(new UpdateQuantidadeOutput(itemDB, customerBasket));
        }
        private void ManipularNovoCarrinho(CarrinhoItem item)
        {
            var carrinho = new CarrinhoCliente(_user.ObterUserId());

            carrinho.AdicionarItem(item);

            _context.CarrinhoCliente.Add(carrinho);
        }
コード例 #7
0
        private async Task ManipularNovoCarinho(CarrinhoItem item)
        {
            var carrinho = new CarrinhoCliente(_user.ObterUserId());

            carrinho.AdicionarItem(item);

            ValidarCarrinho(carrinho);
            await _carrinhoRepository.Adicionar(carrinho);
        }
コード例 #8
0
 private static void PrintCarrinho(CarrinhoCliente carrinhoCliente)
 {
     foreach (var item in carrinhoCliente.Itens)
     {
         System.Console.WriteLine(
             $"Id: {item.Id}, PrecoUnitario: {item.PrecoUnitario}, ProdutoId: {item.ProdutoId}, ProdutoNome: {item.ProdutoNome}, Quantidade: {item.Quantidade}, UrlImagem: {item.UrlImagem}"
             );
     }
 }
コード例 #9
0
        private bool ValidarCarrinho(CarrinhoCliente carrinho)
        {
            if (carrinho.EhValido())
            {
                return(true);
            }

            AdicionarErroProcessamento(carrinho.ValidationResult);
            return(false);
        }
        private bool ValidarCarrinho(CarrinhoCliente carrinho)
        {
            if (carrinho.EhValido())
            {
                return(true);
            }

            carrinho.ValidationResult.Errors.ToList().ForEach(e => AdicionarErroProcessamento(e.ErrorMessage));
            return(false);
        }
        public async Task <CarrinhoCliente> UpdateCarrinhoAsync(CarrinhoCliente carrinho)
        {
            var criado = await _database.StringSetAsync(carrinho.ClienteId, JsonConvert.SerializeObject(carrinho));

            if (!criado)
            {
                _logger.LogError("Erro ao atualizar o carrinho.");
                return(null);
            }
            return(await GetCarrinhoAsync(carrinho.ClienteId));
        }
コード例 #12
0
        public async Task <IActionResult> AdicionarAoCarrinho([FromBody] string codigo)
        {
            if (string.IsNullOrWhiteSpace(codigo))
            {
                return(NotFound(codigo));
            }

            CarrinhoCliente carrinho = await AdicionarProdutoAsync(codigo);

            return(base.Ok(carrinho));
        }
コード例 #13
0
        private void ManipularCarrinhoExistente(CarrinhoCliente carrinho, CarrinhoItem item)
        {
            var produtoItemExistente = carrinho.CarrinhoItemExistente(item);

            carrinho.AdicionarItem(item);
            ValidarCarrinho(carrinho);
            if (produtoItemExistente)
            {
                context.CarrinhoItens.Update(carrinho.ObterPorProdutoId(item.ProdutoId));
            }
            else
            {
                context.CarrinhoItens.Add(item);
            }
            context.CarrinhoCliente.Update(carrinho);
        }
コード例 #14
0
        private async Task ManipularCarinhoExistente(CarrinhoCliente carrinho, CarrinhoItem item)
        {
            var carrinhoItemExiste = carrinho.CarrinhoItemExiste(item);

            carrinho.AdicionarItem(item);

            if (carrinhoItemExiste)
            {
                _carrinhoRepository.AtualizarItem(carrinho.ObterProdutoPorId(item.ProdutoId));
            }
            else
            {
                await _carrinhoRepository.AdicionarItem(item);
            }

            ValidarCarrinho(carrinho);
            _carrinhoRepository.Atualizar(carrinho);
        }
コード例 #15
0
        public async Task <IActionResult> Post([FromBody] CarrinhoCliente input)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(input));
            }

            try
            {
                var carrinho = await _repository.UpdateCarrinhoAsync(input);

                return(Ok(carrinho));
            }
            catch (KeyNotFoundException)
            {
                return(NotFound());
            }
        }
コード例 #16
0
        public async Task <IActionResult> Post([FromBody] CarrinhoCliente input)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(input));
            }

            try
            {
                var carrinho = await _repository.UpdateCarrinhoAsync(input);

                await this._connection
                .InvokeAsync("UpdateUserBasketCount", $"{input.ClienteId}", carrinho.Itens.Count);

                return(Ok(carrinho));
            }
            catch (KeyNotFoundException)
            {
                return(NotFound());
            }
        }
コード例 #17
0
        protected async override Task ExecutarPlayground()
        {
            carrinhoClient = new Carrinho.Generated.Client(ApiConfiguration.BaseUrlCarrinho, httpClient);

            System.Console.WriteLine("ApiCarrinhoPostAsync...");
            CarrinhoCliente carrinho = new CarrinhoCliente
            {
                ClienteId = usuarioInput.UsuarioId,
                Itens     = new ObservableCollection <ItemCarrinho>(new List <ItemCarrinho>
                {
                    new ItemCarrinho {
                        Id = "1", PrecoUnitario = 49.90, ProdutoId = "001", ProdutoNome = "ASP.NET Core MVC", Quantidade = 2, UrlImagem = "http:\\img1.images.com}"
                    },
                    new ItemCarrinho {
                        Id = "2", PrecoUnitario = 49.90, ProdutoId = "002", ProdutoNome = "Construct 2", Quantidade = 3, UrlImagem = "http:\\img2.images.com}"
                    }
                })
            };

            await carrinhoClient.ApiCarrinhoPostAsync(carrinho);

            System.Console.WriteLine("ApiCarrinhoByIdGetAsync...");
            var carrinhoCliente = await carrinhoClient.ApiCarrinhoByIdGetAsync(usuarioInput.UsuarioId);

            PrintCarrinho(carrinhoCliente);

            System.Console.WriteLine("ApiCarrinhoPostAsync...");
            carrinho.Itens[0].Quantidade = 4;
            carrinho.Itens[1].Quantidade = 5;
            await carrinhoClient.ApiCarrinhoPostAsync(carrinho);

            carrinhoCliente = await carrinhoClient.ApiCarrinhoByIdGetAsync(usuarioInput.UsuarioId);

            PrintCarrinho(carrinhoCliente);

            System.Console.WriteLine("ApiCarrinhoCheckoutPostAsync...");
            Guid guid = Guid.NewGuid();
            await carrinhoClient.ApiCarrinhoCheckoutPostAsync(carrinhoCliente, guid.ToString());
        }
コード例 #18
0
        private async Task <CarrinhoItem> ObterItemCarrinhoValidado(Guid produtoId, CarrinhoCliente carrinho, CarrinhoItem item = null)
        {
            if (item != null && produtoId != item.ProdutoId)
            {
                AdicionarErroProcessamento("O item não corresponde ao id informado!");
                return(null);
            }

            if (carrinho is null)
            {
                AdicionarErroProcessamento("Carrinho não encontrado!");
                return(null);
            }

            var itemCarrinho = await _carrinhoRepository.ObterCarrinhoItem(carrinho.Id, produtoId);

            if (itemCarrinho is null)
            {
                AdicionarErroProcessamento("O item não está no carrinho!");
            }

            return(itemCarrinho);
        }
コード例 #19
0
        private static CarrinhoClienteResponse MapCarrinhoClienteToResponse(CarrinhoCliente carrinho)
        {
            var carrinhoProto = new CarrinhoClienteResponse
            {
                Id               = carrinho.Id.ToString(),
                Clienteid        = carrinho.ClienteId.ToString(),
                Valortotal       = (double)carrinho.ValorTotal,
                Desconto         = (double)carrinho.Desconto,
                Voucherutilizado = carrinho.VoucherUtilizado
            };

            if (carrinho.Voucher != null)
            {
                carrinhoProto.Voucher = new VoucherResponse
                {
                    Codigo        = carrinho.Voucher.Codigo,
                    Percentual    = (double?)carrinho.Voucher.Percentual ?? 0,
                    Valordesconto = (double?)carrinho.Voucher.ValorDesconto ?? 0,
                    Tipodesconto  = (int)carrinho.Voucher.TipoDesconto,
                };
            }

            foreach (var item in carrinho.Itens)
            {
                carrinhoProto.Itens.Add(new CarrinhoItemResponse
                {
                    Id         = item.Id.ToString(),
                    Nome       = item.Nome,
                    Imagem     = item.Imagem,
                    Produtoid  = item.ProdutoId.ToString(),
                    Quantidade = item.Quantidade,
                    Valor      = (double)item.Valor
                });
            }

            return(carrinhoProto);
        }
コード例 #20
0
 public Task AtualizarCarrinho(CarrinhoCliente carrinhoCliente)
 {
     throw new System.NotImplementedException();
 }
 public UpdateQuantidadeOutput(ItemCarrinho basketItem, CarrinhoCliente customerBasket)
 {
     BasketItem     = basketItem;
     CustomerBasket = customerBasket;
 }
コード例 #22
0
 public UpdateQuantidadeOutput(ItemCarrinho itemPedido, CarrinhoCliente carrinhoCliente)
 {
     ItemPedido      = itemPedido;
     CarrinhoCliente = carrinhoCliente;
 }
コード例 #23
0
 public async Task Adicionar(CarrinhoCliente carrinhoCliente)
 {
     await _context.CarrinhoCliente.AddAsync(carrinhoCliente);
 }
コード例 #24
0
 public void Atualizar(CarrinhoCliente carrinhoCliente)
 {
     _context.CarrinhoCliente.Update(carrinhoCliente);
 }
コード例 #25
0
        private async Task PublicarEventoFechamentoDoCarrinho(string clienteId, CadastroViewModel input, CarrinhoCliente carrinho)
        {
            var itens = carrinho.Itens.Select(i =>
                                              new CheckoutEventItem(i.Id, i.ProdutoId, i.ProdutoNome, i.PrecoUnitario, i.Quantidade)).ToList();

            var checkoutEvent
                = new CheckoutEvent
                      (clienteId, input.Nome, input.Email, input.Telefone
                      , input.Endereco, input.Complemento, input.Bairro
                      , input.Municipio, input.UF, input.CEP
                      , Guid.NewGuid()
                      , itens);

            // Assim que fazemos a finalização, envia um evento de integração para
            // API OrdemDeCompra converter o carrinho em pedido e continuar com
            // processo de criação de pedido
            await _bus.Publish(checkoutEvent);

            _logger.LogInformation(eventId: EventId_Checkout, message: "Evento de check out foi enviado: {CheckoutEvent}", args: checkoutEvent);
        }
コード例 #26
0
 public UpdateQuantidadeOutput(ItemCarrinho itemCarrinho, CarrinhoCliente carrinho)
 {
     ItemCarrinho = itemCarrinho;
     Carrinho     = carrinho;
 }