public async Task UpdatePurchaseOrderItemAsync_Throws_ConflictException()
        {
            //Arrange
            var id = 2;

            _fixture.MockPurchaseOrderItemService.Setup(x => x.GetPurchaseOrderItemAsync(It.IsAny <Expression <Func <PurchaseOrderItem, bool> > >()))
            .Returns <Expression <Func <PurchaseOrderItem, bool> > >(expression => Task.FromResult(_fixture.PurchaseOrderItems.AsQueryable().FirstOrDefault(expression)));

            _fixture.MockPurchaseOrderItemService.Setup(x => x.UpdatePurchaseOrderItemAsync(It.IsAny <PurchaseOrderItem>()));

            var repository = new PurchaseOrderItemRepository(AutoMapperSingleton.Mapper, _fixture.MockPurchaseOrderItemService.Object);

            //Act
            var exception = await Assert.ThrowsAsync <RestException>(() => repository.UpdatePurchaseOrderItemAsync(id, new EditPurchaseOrderItemDto
            {
                PurchaseOrderId = 202,
                ItemId          = 20024,
                ItemUnitPrice   = 260,
                Quantity        = 6
            }));

            //Assert
            exception.ErrorCode.Should().Be(HttpStatusCode.Conflict);
            exception.ErrorMessage.Should().Be("Item already available for this purchase request.");
            exception.ErrorType.Should().Be(HttpStatusCode.Conflict.ToString());
        }
        public async Task UpdatePurchaseOrderItemAsync_Throws_NotFoundException()
        {
            //Arrange
            var id = 201;

            _fixture.MockPurchaseOrderItemService.Setup(x => x.GetPurchaseOrderItemAsync(It.IsAny <Expression <Func <PurchaseOrderItem, bool> > >()))
            .Returns <Expression <Func <PurchaseOrderItem, bool> > >(expression => Task.FromResult(_fixture.PurchaseOrderItems.AsQueryable().FirstOrDefault(expression)));

            _fixture.MockPurchaseOrderItemService.Setup(x => x.UpdatePurchaseOrderItemAsync(It.IsAny <PurchaseOrderItem>()));

            var repository = new PurchaseOrderItemRepository(AutoMapperSingleton.Mapper, _fixture.MockPurchaseOrderItemService.Object);

            //Act
            var exception = await Assert.ThrowsAsync <RestException>(() => repository.UpdatePurchaseOrderItemAsync(id, _fixture.EditPurchaseOrderItemDto));

            //Assert
            exception.ErrorCode.Should().Be(HttpStatusCode.NotFound);
            exception.ErrorMessage.Should().Be("Purchase order item not found.");
            exception.ErrorType.Should().Be(HttpStatusCode.NotFound.ToString());
        }
        public async Task UpdatePurchaseOrderItemAsync_Returns_Updated_GetPurchaseOrderItemDto()
        {
            //Arrange
            var id = 1;

            _fixture.MockPurchaseOrderItemService.Setup(x => x.GetPurchaseOrderItemAsync(It.IsAny <Expression <Func <PurchaseOrderItem, bool> > >()))
            .Returns <Expression <Func <PurchaseOrderItem, bool> > >(expression => Task.FromResult(_fixture.PurchaseOrderItems.AsQueryable().FirstOrDefault(expression)));

            _fixture.MockPurchaseOrderItemService.Setup(x => x.UpdatePurchaseOrderItemAsync(It.IsAny <PurchaseOrderItem>()));

            var repository = new PurchaseOrderItemRepository(AutoMapperSingleton.Mapper, _fixture.MockPurchaseOrderItemService.Object);

            //Act
            var result = await repository.UpdatePurchaseOrderItemAsync(id, _fixture.EditPurchaseOrderItemDto);

            //Assert
            result.Should().BeOfType(typeof(GetPurchaseOrderItemDto));
            result.Id.Should().Be(id);
            result.ItemTypeName.Should().Be("Grocery");
            result.ItemName.Should().Be("Rice");
            result.ItemUnitPrice.Should().Be(650);
            result.Quantity.Should().Be(7);
        }