コード例 #1
0
ファイル: TabControllerTests.cs プロジェクト: vanbinh85/cafe
        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);
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
ファイル: TabTestsHelper.cs プロジェクト: vanbinh85/cafe
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
ファイル: TabController.cs プロジェクト: vanbinh85/cafe
 public async Task <IActionResult> ServeMenuItems([FromBody] ServeMenuItems command) =>
 (await Mediator.Send(command)
  .MapAsync(_ => ToEmptyResourceAsync <ServeMenuItemsResource>(x => x.TabId = command.TabId)))
 .Match(Ok, Error);