public async Task UpdateAsync_OrderValidationFailed_ThrowsError() { // Arrange var fixture = new Fixture(); var order = new OrderUpdateModel(); var expected = fixture.Create <string>(); var bookGetService = new Mock <IBookGetService>(); bookGetService .Setup(x => x.ValidateAsync(order)) .Throws(new InvalidOperationException(expected)); var clientGetService = new Mock <IClientGetService>(); clientGetService.Setup(x => x.ValidateAsync(order)).Throws(new InvalidOperationException(expected)); var orderDataAccess = new Mock <IOrderDataAccess>(); var orderGetService = new OrderUpdateService(orderDataAccess.Object, bookGetService.Object, clientGetService.Object); // Act var action = new Func <Task>(() => orderGetService.UpdateAsync(order)); // Assert await action.Should().ThrowAsync <InvalidOperationException>().WithMessage(expected); orderDataAccess.Verify(x => x.UpdateAsync(order), Times.Never); }
public async Task UpdateAsync_OrderValidationSucceed_CreatesOrder() { // Arrange var order = new OrderUpdateModel(); var expected = new Order(); var bookGetService = new Mock <IBookGetService>(); bookGetService.Setup(x => x.ValidateAsync(order)); var clientGetService = new Mock <IClientGetService>(); clientGetService.Setup(x => x.ValidateAsync(order)); var orderDataAccess = new Mock <IOrderDataAccess>(); orderDataAccess.Setup(x => x.UpdateAsync(order)).ReturnsAsync(expected); var orderGetService = new OrderUpdateService(orderDataAccess.Object, bookGetService.Object, clientGetService.Object); // Act var result = await orderGetService.UpdateAsync(order); // Assert result.Should().Be(expected); }
public async Task <OrderDTO> Edit([FromRoute] int?id, [FromBody] OrderUpdateModel updateModel) { if (id.HasValue && id != updateModel.Id) { throw new InvalidDataException(nameof(id)); } return(Mapper.Map <OrderDTO>(await OrderUpdateService.UpdateAsync(Mapper.Map <OrderUpdateModel>(updateModel)))); }
public async Task <IActionResult> Edit(int id, OrderUpdateDTO orderUpdate) { if (id != orderUpdate.Id) { return(NotFound()); } var order = Mapper.Map <OrderDTO>(await OrderUpdateService.UpdateAsync(Mapper.Map <OrderUpdateModel>(orderUpdate))); return(Redirect($"/orders/{order.Id}")); }