Exemplo n.º 1
0
        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);
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }