예제 #1
0
        public async void ShouldCreateAShoppingListAndPutItemsOnIt()
        {
            var shoppingListRequest = new CreateShoppingListRequest
            {
                Name = "First list"
            };

            var shoppingList = await _client.CreateShoppingListAsync(shoppingListRequest);

            Assert.NotNull(shoppingList);

            var potatoItem = new AddShoppingListItemRequest
            {
                ShoppingListId = shoppingList.Id,
                Name           = "Potato",
                Amount         = 1,
                Unit           = Unit.Kg
            };

            var brocolliItem = new AddShoppingListItemRequest
            {
                ShoppingListId = shoppingList.Id,
                Name           = "Potato",
                Amount         = 1,
                Unit           = Unit.Kg
            };
            var actualPotato = await _client.AddShoppingListItemAsync(potatoItem);

            var actualBrocolli = await _client.AddShoppingListItemAsync(brocolliItem);

            var actualList = await _client.FindShoppingListAsync(new FindListsRequest { Id = shoppingList.Id });

            Assert.NotNull(actualPotato);
            Assert.NotNull(actualBrocolli);
            Assert.NotNull(actualList);
            Assert.Equal(shoppingList.Id, actualList.Id);
            var actualItems = actualList.Items.ToList();

            Assert.Equal(new List <ShoppingListItemReply> {
                actualPotato, actualBrocolli
            }, actualItems);
        }
        public override async Task <ShoppingListItemReply> AddShoppingListItem(AddShoppingListItemRequest request, ServerCallContext context)
        {
            var shoppingList = await _repository.Find(request.ShoppingListId);

            if (shoppingList == null)
            {
                throw new RpcException(new Status(StatusCode.NotFound, "Shopping list not found"));
            }

            shoppingList.Items.Add(new ShoppingListItem
            {
                Name   = request.Name,
                Amount = request.Amount,
                Unit   = (Domain.Unit)(int) request.Unit
            });

            await _repository.Save(shoppingList);

            return(AsReply(shoppingList.Items.LastOrDefault()));
        }