Exemplo n.º 1
0
        public void WhenSupplierRequestsDifferentQuantity_ShouldCreateBookOrderLineConflict()
        {
            var sut = CreateSut();

            BookOrder bookOrder = BookOrder.CreateNew(
                "SupplierBar",
                Guid.NewGuid());

            bookOrder.AddBookRequest(
                a.BookTitleOrder
                .ForSupplier("SupplierBar")
                .ForTitle("The Hobbit")
                .WithPrice(20)
                .WithQuantity(10)
                );

            _bookOrderRepository.Store(bookOrder);

            var supplierBookOrderUpdateRequest = new SupplierBookOrderUpdateRequest(
                bookOrder.Id,
                new List <SupplierBookOrderLineUpdateRequest>()
            {
                new SupplierBookOrderLineUpdateRequest(
                    bookOrder.OrderLines[0].Id,
                    price: 20, quantity: 9)
            });

            sut.Execute(supplierBookOrderUpdateRequest);

            List <BookOrderLineConflict> conflicts =
                _bookOrderLineConflictRepository.GetForBookOrder(bookOrder.Id).ToList();

            conflicts.Count().Should().Be(1);
            conflicts[0].ConflictType.Should().Be(ConflictType.Quantity);
        }
Exemplo n.º 2
0
        public void Execute(SupplierBookOrderUpdateRequest supplierBookOrderUpdateRequest)
        {
            Logger.Information($"Execute {nameof(GetType)} for Id: {{BookOrderId}}", supplierBookOrderUpdateRequest.BookOrderId);

            var bookOrder = _bookOrderRepository.Get(supplierBookOrderUpdateRequest.BookOrderId);

            List <BookOrderLineConflict> conflicts =
                CalculateOrderLineConflicts(bookOrder, supplierBookOrderUpdateRequest);

            if (conflicts.Any())
            {
                _bookOrderLineConflictRepository.Store(conflicts);
            }
        }
Exemplo n.º 3
0
        public IHttpActionResult ReceiveSupplierUpdate([FromUri] Guid bookOrderId, [FromBody] SupplierBookOrderUpdateDto dto)
        {
            List <SupplierBookOrderLineUpdateRequest> orderlineUpdates = new List <SupplierBookOrderLineUpdateRequest>();

            foreach (var supplierBookOrderLineUpdateDto in dto.OrderLineUpdates)
            {
                orderlineUpdates.Add(new SupplierBookOrderLineUpdateRequest(
                                         supplierBookOrderLineUpdateDto.BookOrderLineId, supplierBookOrderLineUpdateDto.Price,
                                         supplierBookOrderLineUpdateDto.Quantity));
            }
            SupplierBookOrderUpdateRequest supplierBookOrderUpdateRequest =
                new SupplierBookOrderUpdateRequest(bookOrderId, orderlineUpdates);

            _supplierBookOrderUpdateUseCase.Execute(supplierBookOrderUpdateRequest);
            return(Ok());
        }
Exemplo n.º 4
0
        private List <BookOrderLineConflict> CalculateOrderLineConflicts(BookOrder bookOrder, SupplierBookOrderUpdateRequest supplierBookOrderUpdateRequest)
        {
            List <BookOrderLineConflict> conflicts = new List <BookOrderLineConflict>();

            var lineUpdates = supplierBookOrderUpdateRequest.OrderLineUpdates;

            foreach (var lineUpdate in lineUpdates)
            {
                var bookOrderLine = bookOrder.OrderLines.First(x => x.Id == lineUpdate.BookOrderLineId);

                if (bookOrderLine.Price != lineUpdate.Price)
                {
                    conflicts.Add(BookOrderLinePriceConflict.CreateNew(bookOrder.Id,
                                                                       bookOrderLine.Id, lineUpdate.Price));
                }

                if (bookOrderLine.Quantity != lineUpdate.Quantity)
                {
                    conflicts.Add(BookOrderLineQuantityConflict.CreateNew(bookOrder.Id,
                                                                          bookOrderLine.Id, lineUpdate.Quantity));
                }
            }

            return(conflicts);
        }