public void The_clock_set_in_the_CommandContext_is_used_by_resulting_events() { var created = DateTimeOffset.Parse("2014-05-15 00:00:00"); var addItem = new AddItem { ProductName = "Widget", Price = 3.99m }; Order order; using (CommandContext.Establish(addItem, Clock.Create(() => created))) { order = new Order(new CreateOrder(Any.FullName())); order.Apply(addItem); } order.Events() .Count() .Should() .Be(3); order.Events() .Should() .OnlyContain(e => e.Timestamp == created); }
public void The_event_Actor_is_set_from_the_Command_Principal() { // arrange var customer = new Customer(Any.FullName()); var serviceRepresentative = new CustomerServiceRepresentative { Name = Any.FullName() }; var command = new SpecifyShippingInfo { Principal = serviceRepresentative }; var order = new Order(new CreateOrder(customer.Name) { Principal = customer }); // act order.Apply(command); // assert order.Events() .OfType<Order.Created>() .Single() .Actor() .Should() .Be(customer.Name); order.Events() .OfType<Order.ShippingMethodSelected>() .Single() .Actor() .Should() .Be(serviceRepresentative.Name); }
public void When_one_command_triggers_another_command_within_EnactCommand_then_the_second_command_uses_the_CommandContext_clock() { var clockTime = DateTimeOffset.Parse("2014-05-13 09:28:42 AM"); var shipOn = new ShipOn(DateTimeOffset.Parse("2014-06-01 00:00:00")); Order order; using (CommandContext.Establish(shipOn, Clock.Create(() => clockTime))) { order = new Order().Apply(shipOn); } order.Events() .OfType<CommandScheduled<Order>>() .Single() .Timestamp .Should() .Be(clockTime); }
public void UseDependencies_can_be_used_to_set_dependencies_using_an_application_owned_container() { var applicationsContainer = new PocketContainer() .Register<IPaymentService>(_ => new CreditCardPaymentGateway(chargeLimit: 1)); var configuration = new Configuration() .UseDependencies(type => { if (applicationsContainer.Any(reg => reg.Key == type)) { return () => applicationsContainer.Resolve(type); } return null; }); using (ConfigurationContext.Establish(configuration)) { var order = new Order(new CreateOrder(Any.FullName())) .Apply(new AddItem { Price = 5m, ProductName = Any.Word() }) .Apply(new Ship()) .Apply(new ChargeAccount { AccountNumber = Any.PositiveInt().ToString() }); order.Events() .Last() .Should() .BeOfType<Order.PaymentConfirmed>(); } }