コード例 #1
0
        public async Task <IActionResult> UpdateItem(int id, [FromBody] SaveItemResource saveItemResource)
        {
            var currentItem = await _itemService.GetItemById(id);

            if (currentItem == null)
            {
                return(NotFound());
            }

            bool IsValid = await CheckIfUserIsItemSeller(id);

            if (!IsValid)
            {
                return(Unauthorized());
            }

            var validator            = new SaveItemResourceValidator();
            ValidationResult results = await validator.ValidateAsync(saveItemResource);

            if (!results.IsValid)
            {
                return(BadRequest(results.Errors));
            }

            Item modifiedItem = _mapper.Map <SaveItemResource, Item>(saveItemResource);

            await _itemService.UpdateItem(currentItem, modifiedItem);

            Item updatedItem = await _itemService.GetItemById(id);

            ItemResource updatedItemResource = _mapper.Map <Item, ItemResource>(updatedItem);

            return(Ok(updatedItemResource));
        }
コード例 #2
0
        public async Task <IActionResult> CreateItem([FromBody] SaveItemResource saveItemResource)
        {
            saveItemResource.SellerId = getUserId();

            var validator            = new SaveItemResourceValidator();
            ValidationResult results = validator.Validate(saveItemResource);

            if (!results.IsValid)
            {
                return(BadRequest(results.Errors));
            }

            Item itemToCreate = _mapper.Map <SaveItemResource, Item>(saveItemResource);

            var newItem = await _itemService.CreateItem(itemToCreate);

            if (newItem == null)
            {
                return(NotFound());
            }

            var item = await _itemService.GetItemById(newItem.Id);

            // map item to itemResource before returning in an OkResult object
            ItemResource itemResource = _mapper.Map <Item, ItemResource>(item);

            return(Ok(itemResource));
        }
コード例 #3
0
        public async Task UpdateItem_ReturnNotFoundObject_WhenGetItemByIdReturnsNull()
        {
            //Arrange
            var testItemId       = 1;
            var itemToBeUpdated  = GetTestItems().FirstOrDefault(i => i.Id == testItemId);
            var saveItemResource = new SaveItemResource()
            {
                Title     = "Item 1",
                Price     = 30.00m,
                Condition = "New",
                IsAuction = false,
                SellerId  = 1
            };

            _mockItemService.Setup(service => service.GetItemById(testItemId))
            .ReturnsAsync((Item)null);

            var controller = new ItemsController(_mockItemService.Object, _mapper);

            SetupHttpContextUser(controller, _user);

            // Act
            var result = await controller.UpdateItem(itemToBeUpdated.Id, saveItemResource);

            // Assert
            Assert.IsType <NotFoundResult>(result);
        }
コード例 #4
0
        public async Task UpdateItem_ReturnBadRequestResult_WhenSaveItemResourceIsInvalid()
        {
            //Arrange
            var userId           = 1;
            var itemId           = 1;
            var saveItemResource = new SaveItemResource()
            {
                Title    = null,
                SellerId = userId
            };
            var item = new Item()
            {
                SellerId = userId
            };

            _mockItemService.Setup(service => service.GetItemById(itemId))
            .ReturnsAsync(item);
            var controller = new ItemsController(_mockItemService.Object, _mapper);

            SetupHttpContextUser(controller, _user);

            // Act
            var actionResult = await controller.UpdateItem(itemId, saveItemResource);

            // Assert
            Assert.IsType <BadRequestObjectResult>(actionResult);
        }
コード例 #5
0
        public async Task UpdateItem_ReturnUnauthorizedResult_WhenUserIsNotTheItemSeller()
        {
            //Arrange
            var itemId           = 1;
            var saveItemResource = new SaveItemResource()
            {
                Title    = null,
                SellerId = 1
            };
            var item = new Item()
            {
                SellerId = 1
            };

            _mockItemService.Setup(service => service.GetItemById(itemId))
            .ReturnsAsync(item);
            var controller       = new ItemsController(_mockItemService.Object, _mapper);
            var unauthorizedUser = new ClaimsPrincipal(new ClaimsIdentity(
                                                           new Claim[]
            {
                new Claim(ClaimTypes.NameIdentifier, "2")
            }
                                                           , "TestAuthentication"));

            SetupHttpContextUser(controller, unauthorizedUser);

            // Act
            var actionResult = await controller.UpdateItem(itemId, saveItemResource);

            // Assert
            Assert.IsType <UnauthorizedResult>(actionResult);
        }
コード例 #6
0
        public async Task CreateItem_ReturnOkObjectResult_WhenCreateItemIsSuccess()
        {
            //Arrange
            var saveItemResource = new SaveItemResource()
            {
                Title       = "Item 1",
                Description = "Description",
                Price       = 30.00M,
                Condition   = "New",
                Quantity    = 1,
                IsAuction   = false
            };
            var newItem = _mapper.Map <SaveItemResource, Item>(saveItemResource);

            _mockItemService.Setup(service => service.CreateItem(It.IsAny <Item>()))
            .ReturnsAsync(newItem);

            var controller = new ItemsController(_mockItemService.Object, _mapper);

            SetupHttpContextUser(controller, _user);

            // Act
            var actionResult = await controller.CreateItem(saveItemResource);

            // Assert
            Assert.IsType <OkObjectResult>(actionResult);
        }
コード例 #7
0
        public async Task CreateItem_ReturnNotFoundObject_WhenCreateItemMethodReturnsNull()
        {
            //Arrange
            var saveItemResource = new SaveItemResource()
            {
                Title       = "Item 1",
                Description = "Description",
                Price       = 30.00M,
                Condition   = "New",
                IsAuction   = false,
                SellerId    = 1
            };
            var itemToCreate = _mapper.Map <SaveItemResource, Item>(saveItemResource);

            _mockItemService.Setup(service => service.CreateItem(itemToCreate))
            .ReturnsAsync((Item)null);

            var controller = new ItemsController(_mockItemService.Object, _mapper);

            SetupHttpContextUser(controller, _user);

            // Act
            var actionResult = await controller.CreateItem(saveItemResource);

            // Assert
            Assert.IsType <NotFoundResult>(actionResult);
        }
コード例 #8
0
        public IActionResult CreateItem([FromBody] SaveItemResource item)
        {
            var mappedItem = this.mapper.Map <SaveItemResource, TodoItem>(item);
            var domainItem = this.itemRepo.Create(mappedItem);
            var result     = this.mapper.Map <TodoItem, TodoItemResource>(domainItem);

            return(Ok(result));
        }
コード例 #9
0
        public async Task UpdateItem_ReturnItemResourceInOkObjectResult_WhenUpdateIsSuccess()
        {
            //Arrange
            var itemId           = 1;
            var saveItemResource = new SaveItemResource()
            {
                Title     = "Updated Item 1",
                Price     = 30.00M,
                Condition = "New",
                IsAuction = false,
                Quantity  = 1,
                SellerId  = 1
            };
            var currentItem = GetTestItems().FirstOrDefault(
                i => i.Id == itemId);
            var expectedItemResource = new ItemResource()
            {
                Id        = itemId,
                Title     = "Updated Item 1",
                Price     = 30.00M,
                Condition = "New",
                IsAuction = false,
                Quantity  = 1,
                SellerId  = 1,
                ImageUrl  = new List <FilePath>()
            };
            var updatedItem = _mapper.Map <ItemResource, Item>(expectedItemResource);

            // subsequent call to GetItemById method to return updatedItem
            bool firstCall = true;

            _mockItemService.Setup(service => service.GetItemById(itemId))
            .ReturnsAsync(() => {
                if (firstCall)
                {
                    firstCall = false;
                    return(currentItem);
                }
                return(updatedItem);
            });

            var controller = new ItemsController(_mockItemService.Object, _mapper);

            SetupHttpContextUser(controller, _user);

            // Act
            var result = await controller.UpdateItem(itemId, saveItemResource);

            var objectResult = result as OkObjectResult;
            var value        = objectResult.Value as ItemResource;

            // Assert
            Assert.IsType <OkObjectResult>(result);
            Assert.Equal(serializeObject(expectedItemResource), serializeObject(value));
        }
コード例 #10
0
        public async Task <IActionResult> PutAsync(int id, [FromBody] SaveItemResource resource)
        {
            var item   = _mapper.Map <SaveItemResource, Item>(resource);
            var result = await _itemService.UpdateAsync(id, item);

            if (!result.Success)
            {
                return(BadRequest(new ErrorResource(result.Message)));
            }

            var itemResource = _mapper.Map <Item, ItemResource>(result.Resource);

            return(Ok(itemResource));
        }
コード例 #11
0
        public async Task CreateItem_ReturnBadRequestResult_WhenSaveItemResourceIsInvalid()
        {
            //Arrange
            var saveItemResource = new SaveItemResource()
            {
                Title = null
            };
            var controller = new ItemsController(_mockItemService.Object, _mapper);

            SetupHttpContextUser(controller, _user);

            // Act
            var actionResult = await controller.CreateItem(saveItemResource);

            // Assert
            Assert.IsType <BadRequestObjectResult>(actionResult);
        }
コード例 #12
0
        public async Task <IActionResult> CreateItem([FromBody] SaveItemResource saveItemResource)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var item = mapper.Map <SaveItemResource, Item>(saveItemResource);

            item.DatePosted  = DateTime.Now;
            item.LastUpdated = DateTime.Now;

            context.Items.Add(item);
            await context.SaveChangesAsync();

            item = await context.Items.Include(i => i.Category)
                   .SingleOrDefaultAsync(i => i.Id == item.Id);

            var mappedItem = mapper.Map <Item, ItemResource>(item);

            return(Ok(mappedItem));
        }
コード例 #13
0
        public async Task <IActionResult> UpdateItem([FromBody] SaveItemResource saveItemResource, int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var itemInDb = await context.Items
                           .SingleOrDefaultAsync(i => i.Id == id);

            if (itemInDb == null)
            {
                return(NotFound());
            }

            saveItemResource.DatePosted = itemInDb.DatePosted;
            itemInDb.LastUpdated        = DateTime.Now;
            mapper.Map <SaveItemResource, Item>(saveItemResource, itemInDb);
            await context.SaveChangesAsync();

            var mappedItem = mapper.Map <Item, ItemResource>(itemInDb);

            return(Ok(mappedItem));
        }