public Task CompleteShouldReturnProperHypermediaLinks(Guid orderId, MenuItem[] menuItems, Fixture fixture) => _apiHelper.InTheContextOfABarista( barista => async httpClient => { // Arrange await _orderHelper.CreateConfirmedOrder(orderId, menuItems); var command = new CompleteToGoOrder { OrderId = orderId, BaristaId = barista.Id.Some() }; // Act var response = await httpClient .PutAsJsonAsync(OrderRoute("complete"), command); // Assert var expectedLinks = new List <string> { LinkNames.Self, LinkNames.Order.Get, LinkNames.Order.GetAll }; await response.ShouldBeAResource <CompleteToGoOrderResource>(expectedLinks); }, fixture);
public async Task CompletedOrderIsAssignedToTheCompletingBarista(Guid orderId, Barista barista, MenuItem[] items) { // Arrange await _helper.AddBarista(barista); await _helper.CreateConfirmedOrder(orderId, items); var commandToTest = new CompleteToGoOrder { OrderId = orderId, BaristaId = barista.Id.Some <Guid>() }; // Act var result = await _fixture.SendAsync(commandToTest); // Assert var updatedBarista = await _fixture.ExecuteDbContextAsync(dbContext => dbContext .Baristas .Include(b => b.CompletedOrders) .FirstOrDefaultAsync(b => b.Id == barista.Id)); updatedBarista.CompletedOrders.ShouldContain(o => o.Id == orderId); }
public async Task <IActionResult> CompleteToGoOrder([FromBody] CompleteToGoOrder command) { command.BaristaId = BaristaId; var result = (await Mediator.Send(command) .MapAsync(_ => ToEmptyResourceAsync <CompleteToGoOrderResource>(x => x.OrderId = command.OrderId))) .Match(Ok, Error); return(result); }
public async Task CannotCompleteAnOrderWithAnInvalidBaristaId(Guid orderId, MenuItem[] items) { // Arrange // Purposefully not adding a barista await _helper.CreateConfirmedOrder(orderId, items); var commandToTest = new CompleteToGoOrder { OrderId = orderId, BaristaId = Guid.NewGuid().Some() // It will not exist }; // Act, Assert await Assert.ThrowsAsync <InvalidOperationException>(() => _fixture.SendAsync(commandToTest)); }
public async Task CannotCompleteUnexistingOrder(Guid orderId) { // Arrange // Purposefully not creating any orders var commandToTest = new CompleteToGoOrder { OrderId = orderId, BaristaId = Option.None <Guid>() }; // Act var result = await _fixture.SendAsync(commandToTest); // Assert result.ShouldHaveErrorOfType(ErrorType.NotFound); }
public async Task CannotCompleteUnconfirmedOrder(Guid orderId, MenuItem[] items) { // Arrange await _helper.OrderToGo(orderId, items); // Purposefully not confirming the order var commandToTest = new CompleteToGoOrder { OrderId = orderId, BaristaId = Option.None <Guid>() }; // Act var result = await _fixture.SendAsync(commandToTest); // Assert result.ShouldHaveErrorOfType(ErrorType.Validation); }
public async Task CanCompleteToGoOrder(Guid orderId, MenuItem[] items) { // Arrange await _helper.CreateConfirmedOrder(orderId, items); var commandToTest = new CompleteToGoOrder { OrderId = orderId, BaristaId = Option.None <Guid>() }; // Act var result = await _fixture.SendAsync(commandToTest); // Assert await _helper.AssertOrderExists( orderId, order => order.Status == ToGoOrderStatus.Completed); }
public async Task CannotCompleteAnOrderTwice(Guid orderId, MenuItem[] items) { // Arrange await _helper.CreateConfirmedOrder(orderId, items); var confirmOrderCommand = new CompleteToGoOrder { OrderId = orderId, BaristaId = Option.None <Guid>() }; await _fixture.SendAsync(confirmOrderCommand); var commandToTest = new CompleteToGoOrder { OrderId = confirmOrderCommand.OrderId, // Notice the id is the same }; // Act var result = await _fixture.SendAsync(commandToTest); // Assert result.ShouldHaveErrorOfType(ErrorType.Validation); }