public void Retrieving_an_aggregate_with_expected_version_greater_than_the_actual_version_should_throw_a_concurrency_exception() { var aggregate = new TestAggregate(_aggregateIdUnderTest); for (var i = 0; i < 5; i++) { var eventId = Guid.NewGuid(); _storedEvents.Add(eventId); aggregate.GenerateEvent(eventId); } RepoUnderTest.Save(aggregate); Assert.Throws <AggregateVersionException>(() => RepoUnderTest.GetAggregateFromRepository <TestAggregate>(_aggregateIdUnderTest, 10)); }
public void Retreiving_a_nonexistant_aggregate_id_should_throw_an_exception() { var aggregate = new TestAggregate(_aggregateIdUnderTest); for (var i = 0; i < 2; i++) { var eventId = Guid.NewGuid(); _storedEvents.Add(eventId); aggregate.GenerateEvent(eventId); } RepoUnderTest.Save(aggregate); Assert.Throws <AggregateNotFoundException>(() => RepoUnderTest.GetAggregateFromRepository <TestAggregate>(Guid.NewGuid().ToString())); }
public void Saving_new_events_to_an_existing_aggregate_should_correctly_persist_events() { var aggregate = new TestAggregate(_aggregateIdUnderTest); RepoUnderTest.Save(aggregate); _retrievedAggregate = RepoUnderTest.GetAggregateFromRepository <TestAggregate>(_aggregateIdUnderTest); var eventId = Guid.NewGuid(); _retrievedAggregate.GenerateEvent(eventId); RepoUnderTest.Save(_retrievedAggregate); var actualAggregate = RepoUnderTest.GetAggregateFromRepository <TestAggregate>(_aggregateIdUnderTest); Assert.AreEqual(1, actualAggregate.EventsApplied.Count); Assert.AreEqual(_aggregateIdUnderTest, actualAggregate.Id); Assert.AreEqual(eventId, actualAggregate.EventsApplied[0]); }
public void Retrieving_an_aggregate_with_events_when_specifying_a_version_reconstructs_the_entity_correctly() { var aggregate = new TestAggregate(_aggregateIdUnderTest); for (var i = 0; i < 5; i++) { var eventId = Guid.NewGuid(); _storedEvents.Add(eventId); aggregate.GenerateEvent(eventId); } RepoUnderTest.Save(aggregate); _retrievedAggregate = RepoUnderTest.GetAggregateFromRepository <TestAggregate>(_aggregateIdUnderTest, 6); Assert.AreEqual(_aggregateIdUnderTest, _retrievedAggregate.Id); Assert.AreEqual(_storedEvents.Count, _retrievedAggregate.EventsApplied.Count); foreach (var id in _storedEvents) { Assert.Contains(id, _retrievedAggregate.EventsApplied); } }