public async Task UpdateQuantidade_Invalid_ProdutoId()
        {
            //arrange
            var clienteId = "cliente_id";
            UpdateQuantidadeInput updateQuantidadeInput = new UpdateQuantidadeInput(null, 7);

            carrinhoServiceMock
            .Setup(c => c.UpdateItem(clienteId, It.IsAny <UpdateQuantidadeInput>()))
            .ReturnsAsync(new UpdateQuantidadeOutput(new ItemCarrinho(), new CarrinhoCliente()))
            .Verifiable();

            var controller = GetCarrinhoController();

            SetControllerUser(clienteId, controller);
            controller.ModelState.AddModelError("ProdutoId", "Required");

            //act
            var result = await controller.UpdateQuantidade(updateQuantidadeInput);

            //assert
            var badRequestObjectResult = Assert.IsType <BadRequestObjectResult>(result);

            Assert.IsType <SerializableError>(badRequestObjectResult.Value);
            catalogoServiceMock.Verify();
        }
Beispiel #2
0
        public async Task UpdateCarrinhoAsync_success()
        {
            //arrange
            var json1 = JsonConvert.SerializeObject(new CarrinhoCliente("123")
            {
                Itens = new List <ItemCarrinho> {
                    new ItemCarrinho("001", "001", "produto 001", 12.34m, 1)
                }
            });
            var json2 = JsonConvert.SerializeObject(new CarrinhoCliente("123")
            {
                Itens = new List <ItemCarrinho> {
                    new ItemCarrinho("001", "001", "produto 001", 12.34m, 2)
                }
            });

            string clienteId    = "123";
            var    databaseMock = new Mock <IDatabase>();

            databaseMock
            .Setup(d => d.StringSetAsync(
                       It.IsAny <RedisKey>(),
                       It.IsAny <RedisValue>(),
                       null,
                       When.Always,
                       CommandFlags.None
                       ))
            .ReturnsAsync(true)
            .Verifiable();
            databaseMock
            .SetupSequence(d => d.StringGetAsync(It.IsAny <RedisKey>(), It.IsAny <CommandFlags>()))
            .ReturnsAsync("")
            .ReturnsAsync(json1)
            .ReturnsAsync(json2);

            redisMock
            .Setup(r => r.GetDatabase(It.IsAny <int>(), It.IsAny <object>()))
            .Returns(databaseMock.Object)
            .Verifiable();

            var repository
                = new RedisCarrinhoRepository(loggerMock.Object, redisMock.Object);

            var item = new UpdateQuantidadeInput("001", 2);

            //act
            var output = await repository.UpdateCarrinhoAsync(clienteId, item);

            //assert
            Assert.Equal(clienteId, output.CarrinhoCliente.ClienteId);
            Assert.Collection(output.CarrinhoCliente.Itens,
                              i =>
            {
                Assert.Equal("001", i.ProdutoId);
                Assert.Equal(2, i.Quantidade);
            });

            databaseMock.Verify();
            redisMock.Verify();
        }
        public async Task <IActionResult> Post([FromBody] UpdateQuantidadeInput input)
        {
            if (input.ItemPedidoId <= 0)
            {
                return(BadRequest($"Id o item de pedido inválido: {input.ItemPedidoId}"));
            }

            return(Ok(await pedidoRepository.UpdateQuantidade(input)));
        }
        public async Task <IActionResult> UpdateQuantidade([FromBody] UpdateQuantidadeInput input)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            UpdateQuantidadeOutput value = await carrinhoService.UpdateItem(GetUserId(), input);

            if (value == null)
            {
                return(NotFound(input));
            }

            return(base.Ok(value));
        }
        public async Task UpdateQuantidade_ProdutoId_NotFound()
        {
            //arrange
            var clienteId = "cliente_id";
            UpdateQuantidadeInput updateQuantidadeInput = new UpdateQuantidadeInput("001", 7);

            carrinhoServiceMock
            .Setup(c => c.UpdateItem(clienteId, It.IsAny <UpdateQuantidadeInput>()))
            .ReturnsAsync((UpdateQuantidadeOutput)null)
            .Verifiable();

            var controller = GetCarrinhoController();

            SetControllerUser(clienteId, controller);

            //act
            var result = await controller.UpdateQuantidade(updateQuantidadeInput);

            //assert
            var notFoundObjectResult = Assert.IsType <NotFoundObjectResult>(result);

            Assert.Equal(updateQuantidadeInput, notFoundObjectResult.Value);
            catalogoServiceMock.Verify();
        }
        public async Task UpdateQuantidade_Success()
        {
            //arrange
            var clienteId  = "cliente_id";
            var controller = GetCarrinhoController();

            SetControllerUser(clienteId, controller);
            var itemCarrinho = GetFakeItemCarrinho();
            UpdateQuantidadeInput updateQuantidadeInput = new UpdateQuantidadeInput("001", 7);

            carrinhoServiceMock
            .Setup(c => c.UpdateItem(clienteId, It.IsAny <UpdateQuantidadeInput>()))
            .ReturnsAsync(new UpdateQuantidadeOutput(itemCarrinho, new CarrinhoCliente()))
            .Verifiable();

            //act
            var result = await controller.UpdateQuantidade(updateQuantidadeInput);

            //assert
            var okObjectResult = Assert.IsType <OkObjectResult>(result);

            Assert.IsType <UpdateQuantidadeOutput>(okObjectResult.Value);
            catalogoServiceMock.Verify();
        }
Beispiel #7
0
        public async Task <UpdateQuantidadeOutput> UpdateQuantidade(UpdateQuantidadeInput input)
        {
            var itemPedidoDB = await itemPedidoRepository.GetItemPedido(input.ItemPedidoId);

            if (itemPedidoDB != null)
            {
                itemPedidoDB.AtualizaQuantidade(input.Quantidade);

                if (input.Quantidade == 0)
                {
                    await itemPedidoRepository.RemoveItemPedido(input.ItemPedidoId);
                }

                await contexto.SaveChangesAsync();

                var pedido = await GetPedido();

                var carrinhoViewModel = new CarrinhoViewModel(pedido.Id, pedido.Itens);

                return(new UpdateQuantidadeOutput(itemPedidoDB, carrinhoViewModel));
            }

            throw new ArgumentException("ItemPedido não encontrado");
        }
        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));
        }
Beispiel #9
0
        public async Task <ActionResult <UpdateQuantidadeOutput> > UpdateItem(string clienteId, [FromBody] UpdateQuantidadeInput input)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

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

                return(Ok(carrinho));
            }
            catch (KeyNotFoundException)
            {
                return(NotFound(clienteId));
            }
        }
Beispiel #10
0
        public async Task <UpdateQuantidadeOutput> UpdateItem(string clienteId, UpdateQuantidadeInput input)
        {
            var uri = $"{CarrinhoUris.UpdateItem}/{clienteId}";

            return(await PutAsync <UpdateQuantidadeOutput>(uri, input));
        }
Beispiel #11
0
        public async Task <ActionResult <UpdateQuantidadeResponse> > UpdateQuantidade([FromBody] UpdateQuantidadeInput input)
        {
            //return await carrinhoRepository.UpdateQuantidadeAsync(itemPedido);

            string clienteId = userManager.GetUserId(this.User);

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                var output = await carrinhoRepository.UpdateItemCarrinhoAsync(clienteId, input);

                return(Ok(output));
            }
            catch (KeyNotFoundException)
            {
                return(NotFound(clienteId));
            }
        }
Beispiel #12
0
        public async Task <ActionResult <UpdateQuantidadeOutput> > UpdateItem(string clienteId, [FromBody] UpdateQuantidadeInput input)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                var output = await _repository.UpdateCarrinhoAsync(clienteId, input);

                await this._connection
                .InvokeAsync("UpdateUserBasketCount", $"{clienteId}", output.CarrinhoCliente.Itens.Count);

                return(Ok(output));
            }
            catch (KeyNotFoundException)
            {
                return(NotFound(clienteId));
            }
        }