예제 #1
0
        public void ReadHistoricalParkingHouseStatus_MiddleOfSimulation()
        {
            // Arrange.
            var       client1 = NewClient();
            var       client2 = NewClient();
            const int hoursClient1SpendsInParkingHouse = 2;
            const int hoursToReplay           = 2;
            const int totalNumberOfCarsParked = 2;
            DateTime  replayUntil             = InitialDateTime.Add(TimeStepPerAction.Multiply(hoursToReplay));

            // Act.
            _messageDispatcher.SendCommand(new EnterParkingHouse {
                Id = _id, Client = client1
            });                                                                                     // 00:00 ENTERED
            _messageDispatcher.SendCommand(new EnterParkingHouse {
                Id = _id, Client = client2
            });                                                                                     // 02:00 ENTERED <== WE ARE GOING TO REPLAY TILL THAT POINT
            _messageDispatcher.SendCommand(new PayParkingBill                                       // 03:00 PAID PARKING BILL
            {
                Id     = _id,
                Client = client1,
                Amount = hoursClient1SpendsInParkingHouse * ParkingHouseInformation.HourlyRate
            });
            _messageDispatcher.SendCommand(new LeaveParkingHouse {
                Id = _id, Client = client1
            });                                                                                     // 04:00 LEFT

            // Recreate read model and republish events only until a certain point in time.
            _parkingHouseStatus = new ParkingHouseStatus(_id);
            _messageDispatcher.ScanInstance(_parkingHouseStatus);
            _messageDispatcher.RepublishEventsUntil <ParkingHouse>(_id, replayUntil);

            // Assert.
            Assert.AreEqual(0, _parkingHouseStatus.AmountOfMoneyReceived);
            Assert.AreEqual(totalNumberOfCarsParked, _parkingHouseStatus.TotalNumberOfCarsParked);
            Assert.True(_parkingHouseStatus.ClientsInParkingHouse.Any(client => client == client1));
            Assert.True(_parkingHouseStatus.ClientsInParkingHouse.Any(client => client == client2));
            Assert.False(_parkingHouseStatus.ClientsWhoHaveLeftParkingHouse.Any(client => client == client1));
            Assert.False(_parkingHouseStatus.ClientsWhoHaveLeftParkingHouse.Any(client => client == client2));
        }
예제 #2
0
 public void Setup()
 {
     _id = Guid.NewGuid();
     _parkingHouseStatus = new ParkingHouseStatus(_id);
     _messageDispatcher.ScanInstance(_parkingHouseStatus);
 }