public Task ServeItemsShouldReturnProperHypermediaLinks(Guid tabId, MenuItem[] menuItems, Fixture fixture) => _apiHelper.InTheContextOfAWaiter( waiter => async httpClient => { // Arrange await _tabHelper.AddMenuItems(menuItems); var tableNumber = waiter.ServedTables[0].Number; await _tabHelper.OpenTabOnTable(tabId, tableNumber); await _tabHelper.OrderMenuItems(tabId, menuItems); var serveItemsCommand = new ServeMenuItems { TabId = tabId, ItemNumbers = menuItems.Select(i => i.Number).ToList() }; // Act var response = await httpClient .PutAsJsonAsync(TabRoute("serve"), serveItemsCommand); // Assert var expectedLinks = new List <string> { LinkNames.Self, LinkNames.Tab.GetTab, LinkNames.Tab.OrderItems, LinkNames.Tab.Close }; await response.ShouldBeAResource <ServeMenuItemsResource>(expectedLinks); }, fixture);
public async Task CanServeAllMenuItems(Guid tabId, int tableNumber, MenuItem[] itemsToServe) { // Arrange await _helper.AddMenuItems(itemsToServe); await _helper.OpenTabOnTable(tabId, tableNumber); await _helper.OrderMenuItems(tabId, itemsToServe); var serveMenuItemsCommand = new ServeMenuItems { TabId = tabId, ItemNumbers = itemsToServe.Select(i => i.Number).ToArray() }; // Act var result = await _fixture.SendAsync(serveMenuItemsCommand); // Assert await _helper.AssertTabExists( tabId, t => t.OutstandingMenuItems.Count == 0 && itemsToServe.All(i => t.ServedMenuItems.Any(si => i.Number == si.Number)) && t.ServedItemsValue == itemsToServe.Sum(i => i.Price)); }
public async Task CanServeOneMenuItemTwiceInARow(Guid tabId, int tableNumber, MenuItem[] menuItems) { // Arrange await _helper.AddMenuItems(menuItems); await _helper.OpenTabOnTable(tabId, tableNumber); var menuItemToServe = menuItems.First(); // We intentionally order it twice in order to be able to assert that only one was served await _helper.OrderMenuItems(tabId, menuItemToServe); await _helper.OrderMenuItems(tabId, menuItemToServe); // Act var serveItemsCommand = new ServeMenuItems { TabId = tabId, ItemNumbers = new[] { menuItemToServe.Number } }; await _fixture.SendAsync(serveItemsCommand); await _fixture.SendAsync(serveItemsCommand); // Assert await _helper.AssertTabExists( tabId, tab => tab.ServedMenuItems.Count == 2 && tab.ServedMenuItems.All(i => i.Number == menuItemToServe.Number)); }
public async Task ServeMenuItems(Guid tabId, params MenuItem[] items) { var itemNumbers = items.Select(i => i.Number).ToList(); var serveItems = new ServeMenuItems { TabId = tabId, ItemNumbers = itemNumbers }; await _fixture.SendAsync(serveItems); }
public async Task CannotServeUnexistingItems(Guid tabId, int tableNumber, MenuItem[] itemsToServe) { // Arrange // Purposefully skipping adding the items to the db await _helper.OpenTabOnTable(tabId, tableNumber); await _helper.OrderMenuItems(tabId, itemsToServe); var serveMenuItemsCommand = new ServeMenuItems { TabId = tabId, ItemNumbers = itemsToServe.Select(i => i.Number).ToArray() }; // Act var result = await _fixture.SendAsync(serveMenuItemsCommand); // Assert result.ShouldHaveErrorOfType(ErrorType.NotFound); }
public async Task CannotServeOnAClosedTab(Guid tabId, int tableNumber, MenuItem[] itemsToServe) { // Arrange await _helper.AddMenuItems(itemsToServe); await _helper.OpenTabOnTable(tabId, tableNumber); await _helper.OrderMenuItems(tabId, itemsToServe); await _helper.CloseTab(tabId, itemsToServe.Sum(i => i.Price)); var serveMenuItemsCommand = new ServeMenuItems { TabId = tabId, ItemNumbers = itemsToServe.Select(i => i.Number).ToArray() }; // Act var result = await _fixture.SendAsync(serveMenuItemsCommand); // Assert result.ShouldHaveErrorOfType(ErrorType.Validation); }
public async Task CanServeOneMenuItem(Guid tabId, int tableNumber, MenuItem[] menuItems) { // Arrange await _helper.AddMenuItems(menuItems); await _helper.OpenTabOnTable(tabId, tableNumber); var menuItemToServe = menuItems.First(); var serveItemsCommand = new ServeMenuItems { TabId = tabId, ItemNumbers = new[] { menuItemToServe.Number } }; // Act await _fixture.SendAsync(serveItemsCommand); // Assert await _helper.AssertTabExists( tabId, tab => tab.ServedMenuItems.Count == 1 && tab.ServedMenuItems.First().Number == menuItemToServe.Number); }
public async Task <IActionResult> ServeMenuItems([FromBody] ServeMenuItems command) => (await Mediator.Send(command) .MapAsync(_ => ToEmptyResourceAsync <ServeMenuItemsResource>(x => x.TabId = command.TabId))) .Match(Ok, Error);