public async Task SaveEvents_fails_if_version_of_first_event_not_follows_aggregate() { // Arrange var userId = Guid.NewGuid(); using (var db = new FakeEventStoreDbContext(_dbContextOptions)) { var aggregate = new Aggregate { AggregateId = userId, AggregateType = typeof(FakeUser).FullName, Version = 1, }; db.Aggregates.Add(aggregate); await db.SaveChangesAsync(); } var usernameChanged = new FakeUsernameChanged(); usernameChanged.Raise(userId, 2); var sut = new SqlEventStore( () => new FakeEventStoreDbContext(_dbContextOptions), new JsonMessageSerializer()); // Act Func <Task> action = () => sut.SaveEvents <FakeUser>(new[] { usernameChanged }); // Assert action.ShouldThrow <ArgumentException>().Where(x => x.ParamName == "events"); }
public async Task FlushPendingEvents_sends_events_correctly() { // Arrange var created = new FakeUserCreated(); var usernameChanged = new FakeUsernameChanged(); var sourceId = Guid.NewGuid(); var events = new DomainEvent[] { created, usernameChanged }; events.Raise(sourceId); var envelopes = new List <Envelope>(); using (var db = new FakeEventStoreDbContext(_dbContextOptions)) { var serializer = new JsonMessageSerializer(); foreach (DomainEvent e in events) { var envelope = new Envelope( messageId: Guid.NewGuid(), correlationId: Guid.NewGuid(), contributor: Guid.NewGuid().ToString(), message: e); envelopes.Add(envelope); db.PendingEvents.Add(PendingEvent.FromEnvelope <FakeUser>(envelope, serializer)); } await db.SaveChangesAsync(); } var messageBus = new MessageBus(); var sut = new SqlEventPublisher( () => new FakeEventStoreDbContext(_dbContextOptions), new JsonMessageSerializer(), messageBus); // Act await sut.FlushPendingEvents <FakeUser>(sourceId, CancellationToken.None); // Assert messageBus.Sent.ShouldAllBeEquivalentTo(envelopes, opts => opts.RespectingRuntimeTypes()); }
public async Task FlushPendingEvents_deletes_pending_events() { // Arrange var sourceId = Guid.NewGuid(); var created = new FakeUserCreated(); var usernameChanged = new FakeUsernameChanged(); var events = new DomainEvent[] { created, usernameChanged }; events.Raise(sourceId); using (var db = new FakeEventStoreDbContext(_dbContextOptions)) { var serializer = new JsonMessageSerializer(); foreach (DomainEvent e in events) { var envelope = new Envelope(e); db.PendingEvents.Add(PendingEvent.FromEnvelope <FakeUser>(envelope, serializer)); } await db.SaveChangesAsync(); } var sut = new SqlEventPublisher( () => new FakeEventStoreDbContext(_dbContextOptions), new JsonMessageSerializer(), Mock.Of <IMessageBus>()); // Act await sut.FlushPendingEvents <FakeUser>(sourceId); // Assert using (var db = new FakeEventStoreDbContext(_dbContextOptions)) { bool actual = await db .PendingEvents .Where(e => e.AggregateId == sourceId) .AnyAsync(); actual.Should().BeFalse(); } }
public async Task SaveEvents_updates_Aggregate_correctly_for_existing_aggregate_id() { // Arrange var userId = Guid.NewGuid(); using (var db = new FakeEventStoreDbContext(_dbContextOptions)) { var aggregate = new Aggregate { AggregateId = userId, AggregateType = typeof(FakeUser).FullName, Version = 1, }; db.Aggregates.Add(aggregate); await db.SaveChangesAsync(); } var usernameChanged = new FakeUsernameChanged(); usernameChanged.Raise(userId, 1); var sut = new SqlEventStore( () => new FakeEventStoreDbContext(_dbContextOptions), new JsonMessageSerializer()); // Act await sut.SaveEvents <FakeUser>(new[] { usernameChanged }); // Assert using (var db = new FakeEventStoreDbContext(_dbContextOptions)) { Aggregate actual = await db .Aggregates .Where(a => a.AggregateId == userId) .SingleOrDefaultAsync(); actual.Version.Should().Be(usernameChanged.Version); } }