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)); }
public void Setup() { _id = Guid.NewGuid(); _parkingHouseStatus = new ParkingHouseStatus(_id); _messageDispatcher.ScanInstance(_parkingHouseStatus); }