public void CanMakeAnOrderForItemWithReturnable() { //Given var orderAndContext = AnOrderWithItemAndReturnable(); var order = orderAndContext.Sale; var context = orderAndContext.Context; var builder = new OrderEnvelopeBuilder(order, new MainOrderEnvelopeBuilder(context)); //When var result = builder.Build(); //Then AssertCommonEnvelopeChecks(result, context); var documentCommands = ExtractDocumentCommands(result); var createOrder = documentCommands.OfType<CreateMainOrderCommand>().First(); CheckReference("O", createOrder.DocumentReference, context.User.Username); var addMainOrderLineItems = documentCommands.OfType<AddMainOrderLineItemCommand>().ToList(); CheckOrderLineCommand(order.LineItems[0], addMainOrderLineItems[0]); CheckOrderLineCommand(order.ReturnableLineItems[0], addMainOrderLineItems[1]); }
public Result<object> Process(Sale sale, IEnvelopeContext context) { var envelopeBuilder = new OrderEnvelopeBuilder(sale, new MainOrderEnvelopeBuilder(context, new ExternalDocRefEnvelopeBuilder(context, new PaymentNoteEnvelopeBuilder(context, new OutletVisitNoteEnvelopeBuilder(context))))); return new Transactor(database).Transact(() => { envelopeBuilder.Build().ForEach(e => envelopeRouter.RouteCommandEnvelope(e)); sale.OrderReference = context.OrderSaleReference(); sale.ConfirmNewPayments(); sale.ProcessingStatus = ProcessingStatus.Submitted; saleRepository.Save(sale); }); }