Esempio n. 1
0
        public async Task AddKitchenIngredient_DuplicateKitchenIngredient_Returns405Result()
        {
            KitchenUser kitchenUser   = _userManager.TestUser.KitchenUser.FirstOrDefault();
            Ingredient  newIngredient = InMemoryDataGenerator.AddNewRandomIngredient(_context, _userManager.TestUser);

            if (kitchenUser == null || newIngredient == null)
            {
                throw new Exception("not setup for testing");
            }

            KitchenIngredientDto kitchenIngredient = new KitchenIngredientDto()
            {
                KitchenId            = kitchenUser.Kitchen.KitchenId,
                IngredientId         = newIngredient.IngredientId,
                AddedByKitchenUserId = kitchenUser.KitchenUserId
            };

            // add it once
            await _controller.AddKitchenIngredientAsync(kitchenIngredient);

            // add it again
            ActionResult <KitchenIngredientDto> actualResult = await _controller.AddKitchenIngredientAsync(kitchenIngredient);


            Assert.IsType <ObjectResult>(actualResult.Result);
            Assert.Equal(StatusCodes.Status405MethodNotAllowed, (actualResult.Result as ObjectResult).StatusCode);
        }
Esempio n. 2
0
        public async Task UpdateKitchenIngredientAsync_ValidKitchenIngredient_ReturnsOkAndOnlyUpdatesQty()
        {
            KitchenUser       kitchenUser        = _userManager.TestUser.KitchenUser.FirstOrDefault();
            KitchenIngredient ingredientToUpdate = kitchenUser?.Kitchen.KitchenIngredient.FirstOrDefault();

            if (ingredientToUpdate == null)
            {
                throw new Exception("not setup for testing");
            }

            KitchenIngredientDto updateDto = new KitchenIngredientDto(ingredientToUpdate);

            string noteBeforeUpdate = ingredientToUpdate.Note;
            int    expectedQty      = 5;

            updateDto.Note     = null;
            updateDto.Quantity = expectedQty;
            DateTime timeBeforeUpdate = DateTime.UtcNow;


            var updateResult = await _controller.UpdateKitchenIngredientAsync(updateDto.KitchenIngredientId, updateDto);

            KitchenIngredient updatedIngredient = _context.KitchenIngredient.Where(ki => ki.KitchenIngredientId == updateDto.KitchenIngredientId).FirstOrDefault();

            Assert.IsType <OkResult>(updateResult);
            Assert.Equal(noteBeforeUpdate, updatedIngredient.Note);
            Assert.Equal(expectedQty, updatedIngredient.Quantity);
            Assert.True(updatedIngredient.LastUpdated >= timeBeforeUpdate);
        }
Esempio n. 3
0
        public async Task AddKitchenIngredient_ValidKitchenIngredient_ReturnsOkAndNewKitchenIngredient()
        {
            KitchenUser kitchenUser   = _userManager.TestUser.KitchenUser.FirstOrDefault();
            Ingredient  newIngredient = InMemoryDataGenerator.AddNewRandomIngredient(_context, _userManager.TestUser);

            if (kitchenUser == null || newIngredient == null)
            {
                throw new Exception("not setup for testing");
            }

            KitchenIngredientDto kitchenIngredient = new KitchenIngredientDto()
            {
                KitchenId            = kitchenUser.Kitchen.KitchenId,
                IngredientId         = newIngredient.IngredientId,
                AddedByKitchenUserId = kitchenUser.KitchenUserId
            };

            ActionResult <KitchenIngredientDto> actualResult = await _controller.AddKitchenIngredientAsync(kitchenIngredient);

            Assert.IsType <OkObjectResult>(actualResult.Result);

            var actualIngredientsInKitchen = (actualResult.Result as OkObjectResult).Value;

            Assert.IsType <KitchenIngredientDto>(actualIngredientsInKitchen);
        }
        public async Task <ActionResult <List <KitchenIngredientDto> > > GetIngredientsForKitchenByCategory(long kitchenId, long categoryId)
        {
            PantryPlannerUser user;

            try
            {
                user = await _userManager.GetUserFromCookieOrJwtAsync(this.User);

                List <KitchenIngredient> ingredientsInKitchen = _service.GetKitchenIngredientsByCategory(kitchenId, categoryId, user);

                return(Ok(KitchenIngredientDto.ToList(ingredientsInKitchen)));
            }
            catch (ArgumentNullException e)
            {
                return(BadRequest(e.Message));
            }
            catch (KitchenNotFoundException e)
            {
                return(NotFound(e.Message));
            }
            catch (CategoryNotFoundException e)
            {
                return(NotFound(e.Message));
            }
            catch (PermissionsException e)
            {
                return(Unauthorized(e.Message));
            }
            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, e.Message));
            }
        }
        public async Task <ActionResult> UpdateKitchenIngredientAsync(long id, [FromBody] KitchenIngredientDto kitchenIngredient)
        {
            PantryPlannerUser user;

            try
            {
                if (id != kitchenIngredient?.KitchenIngredientId)
                {
                    return(BadRequest("The ID specified does not match"));
                }

                user = await _userManager.GetUserFromCookieOrJwtAsync(this.User);


                await _service.UpdateKitchenIngredientAsync(kitchenIngredient, user);

                return(Ok());
            }
            catch (ArgumentNullException e)
            {
                return(BadRequest(e.Message));
            }
            catch (IngredientNotFoundException e)
            {
                return(NotFound(e.Message));
            }
            catch (PermissionsException e)
            {
                return(Unauthorized(e.Message));
            }
            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, e.Message));
            }
        }
        public async Task <ActionResult <KitchenIngredientDto> > AddKitchenIngredientAsync([FromBody] KitchenIngredientDto kitchenIngredient)
        {
            PantryPlannerUser user;

            try
            {
                user = await _userManager.GetUserFromCookieOrJwtAsync(this.User);

                KitchenIngredient kitchenIngredientToAdd = KitchenIngredientDto.Create(kitchenIngredient);

                KitchenIngredient newIngredient = _service.AddKitchenIngredient(kitchenIngredientToAdd, user);
                return(Ok(new KitchenIngredientDto(newIngredient)));
            }
            catch (ArgumentNullException e)
            {
                return(BadRequest(e.Message));
            }
            catch (UserNotFoundException e)
            {
                return(NotFound(e.Message));
            }
            catch (InvalidOperationException e)
            {
                return(StatusCode(StatusCodes.Status405MethodNotAllowed, e.Message));
            }
            catch (PermissionsException e)
            {
                return(Unauthorized(e.Message));
            }
            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, e.Message));
            }
        }
        public async Task <ActionResult <KitchenIngredientDto> > GetKitchenIngredient(long id)
        {
            PantryPlannerUser user;

            try
            {
                user = await _userManager.GetUserFromCookieOrJwtAsync(this.User);

                KitchenIngredientDto kitchenIngredient = new KitchenIngredientDto(_service.GetKitchenIngredientById(id, user));
                return(Ok(kitchenIngredient));
            }
            catch (ArgumentNullException e)
            {
                return(BadRequest(e.Message));
            }
            catch (IngredientNotFoundException e)
            {
                return(NotFound(e.Message));
            }
            catch (PermissionsException e)
            {
                return(Unauthorized(e.Message));
            }
            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, e.Message));
            }
        }
Esempio n. 8
0
        public async Task UpdateKitchenIngredientAsync_KitchenIngredientNotExists_ReturnsNotFound()
        {
            KitchenUser       kitchenUser        = _userManager.TestUser.KitchenUser.FirstOrDefault();
            KitchenIngredient ingredientToUpdate = kitchenUser?.Kitchen.KitchenIngredient.FirstOrDefault();

            if (ingredientToUpdate == null)
            {
                throw new Exception("not setup for testing");
            }

            KitchenIngredientDto updateDto = new KitchenIngredientDto(ingredientToUpdate);

            updateDto.KitchenIngredientId = -5;

            var updateResult = await _controller.UpdateKitchenIngredientAsync(updateDto.KitchenIngredientId, updateDto);

            Assert.IsType <NotFoundObjectResult>(updateResult);
        }
Esempio n. 9
0
        public async Task UpdateKitchenIngredientAsync_UserNoRightsToKitchenIngredient_ReturnsUnauthorized()
        {
            List <long>       myKitchenIds       = _userManager.TestUser.KitchenUser.Select(k => k.KitchenId).ToList();
            Kitchen           notMyKitchen       = _context.Kitchen.Where(k => myKitchenIds.Contains(k.KitchenId) == false).FirstOrDefault();
            KitchenIngredient ingredientToUpdate = notMyKitchen.KitchenIngredient.FirstOrDefault();

            if (ingredientToUpdate == null)
            {
                throw new Exception("not setup for testing");
            }

            KitchenIngredientDto updateDto = new KitchenIngredientDto(ingredientToUpdate);

            updateDto.Note     = "froopyland is real";
            updateDto.Quantity = 3;

            var updateResult = await _controller.UpdateKitchenIngredientAsync(updateDto.KitchenIngredientId, updateDto);

            Assert.IsType <UnauthorizedObjectResult>(updateResult);
        }