public void ShouldComposeSnapshotOfExactNumberOfEvents() { // ARRANGE var eventRepository = new SqliteEventRepository(_connectionString); var snapshotRepository = new SqliteSnapshotEventRepository(_connectionString); var factory = new DefaultAggregateFactory(); var aggregateStore = new AggregateRepository(eventRepository, factory, snapshotRepository); // Create a test aggregate. var aggregateId = CombGuid.Generate(); var aggregate = aggregateStore.GetById <IncrementingAggregate>(aggregateId); var snapshotSize = aggregate.SnapshotSize; var numberOfTestEvents = 2 * snapshotSize + 1; // Send test events to the aggregate. Enumerable.Range(1, numberOfTestEvents) .ToList() .ForEach(x => aggregate.Tell(new IncrementingAggregate.Increment())); // ACT var orderedEvents = aggregateStore.Save(aggregate); var snapshotVersion = snapshotRepository.GetVersionByAggregateId(aggregateId); var snapshotOffer = (SnapshotOffer)snapshotRepository .GetSnapshotEventByAggregateIdAndVersion(aggregateId, snapshotVersion ?? 0); var newAggregate = aggregateStore.GetById <IncrementingAggregate>(aggregateId); var newState = newAggregate.Ask <int>(new IncrementingAggregate.GetValue()); // ASSERT Assert.AreEqual(numberOfTestEvents, orderedEvents.Length); Assert.AreEqual(numberOfTestEvents - 1, snapshotOffer.Version); Assert.AreEqual(numberOfTestEvents - 1, snapshotOffer.State); Assert.AreEqual(numberOfTestEvents, newState); }
public void ShouldGetEvents() { // ARRANGE var repository = new SqliteEventRepository(_connectionString); // ACT var orderedEvents = repository.GetEventsByAggregateId(_aggregateId); // ASSERT }
public void ShouldClearEvents() { // ARRANGE var repository = new SqliteEventRepository(_connectionString); // ACT repository.ClearEvents(); // ASSERT }
public void ShouldSaveEvents() { // ARRANGE var repository = new SqliteEventRepository(_connectionString); var testEvent = new SqliteTestEvent { DummyPayload = "Hello, World!", }; var e = testEvent.ToEventData("TestAggregate", _aggregateId, 1); // ACT var events = repository.SaveEvents(new[] { e }); // ASSERT Assert.AreEqual(1, events.Length); Assert.AreNotEqual(0, events.First().Ordering); }
public void ShouldSaveMultipleEvents() { // ARRANGE var repository = new SqliteEventRepository(_connectionString); var testEvent = new SqliteTestEvent { DummyPayload = "Hello, World!", }; const int numberOfEvents = 100; var eventsToSave = Enumerable.Range(1, numberOfEvents) .Select(x => testEvent.ToEventData("TestAggregate", _aggregateId, x)) .ToArray(); // ACT var events = repository.SaveEvents(eventsToSave); // ASSERT Assert.AreEqual(numberOfEvents, events.Length); Assert.IsFalse(events.Any(x => x.Ordering == 0)); Assert.AreEqual(numberOfEvents, events.Select(x => x.Ordering).Distinct().Count()); }