public void Ctor__EmitsNewBookEvent(
            TrackingId trackingId,
            RouteSpecification routeSpec
            )
        {
            // ACT
            var sut = new Domain.Shipping.Cargo.Cargo(trackingId, routeSpec);

            // ASSERT
            Assert.Equal(routeSpec, sut.RouteSpec);
            Assert.Equal(routeSpec, sut.Delivery.RouteSpec);

            sut.Events[0].Should().BeEquivalentTo(new Events.NewBooked(trackingId, routeSpec));
        }
        public void ChangeRoute__EmitsAssignedToItineraryEvent_and_EmitsDeliveryStateChangedEvent(
            Domain.Shipping.Cargo.Cargo sut,
            RouteSpecification routeSpec
            )
        {
            // ACT
            sut.ChangeRoute(routeSpec);

            // ASSERT
            Assert.Equal(routeSpec, sut.RouteSpec);
            Assert.Equal(routeSpec, sut.Delivery.RouteSpec);

            sut.Events[1].Should().BeEquivalentTo(new Events.RouteChanged(sut.TrackingId, routeSpec));
            sut.Events[2].Should().BeEquivalentTo(new Events.DeliveryStateChanged(sut.TrackingId, sut.Delivery));
        }
        public void RegisterHandlingEvent__EmitsHandlingEventRegisteredEvent_and_EmitsDeliveryStateChangedEvent(
            Domain.Shipping.Cargo.Cargo sut,
            HandlingEvent @event
            )
        {
            // ACT
            sut.RegisterHandlingEvent(@event);

            // ASSERT
            Assert.Equal(@event, sut.LastHandlingEvent);
            Assert.Equal(@event, sut.Delivery.LastHandlingEvent);

            sut.Events[1].Should().BeEquivalentTo(new Events.HandlingEventRegistered(@event));
            sut.Events[2].Should().BeEquivalentTo(new Events.DeliveryStateChanged(sut.TrackingId, sut.Delivery));
        }
        public void AssignToItinerary__EmitsAssignedToItineraryEvent_and_EmitsDeliveryStateChanged(
            Domain.Shipping.Cargo.Cargo sut
            )
        {
            // ARRANGE
            var itinerary = new Fixture().Customize(new DefaultItineraryCustomization()).Create <Itinerary>();

            // ACT
            sut.AssignToItinerary(itinerary);

            // ASSERT
            Assert.Equal(itinerary, sut.Itinerary);
            Assert.Equal(itinerary, sut.Delivery.Itinerary);

            sut.Events[1].Should().BeEquivalentTo(new Events.AssignedToItinerary(sut.TrackingId, itinerary));
            sut.Events[2].Should().BeEquivalentTo(new Events.DeliveryStateChanged(sut.TrackingId, sut.Delivery));
        }
 public void ChangeRoute__NoRouteSpecGiven__ThrowsArgumentNullException(
     Domain.Shipping.Cargo.Cargo sut
     )
 {
     Assert.Throws <ArgumentNullException>(() => sut.ChangeRoute(null));
 }
 public void AssignToItinerary__NoItineraryGiven__ThrowsArgumentNullException(
     Domain.Shipping.Cargo.Cargo sut
     )
 {
     Assert.Throws <ArgumentNullException>(() => sut.AssignToItinerary(null));
 }