diff --git a/src/RdbmsEventStore.EntityFramework.Tests/EventStoreTests/WriteEventTests.cs b/src/RdbmsEventStore.EntityFramework.Tests/EventStoreTests/WriteEventTests.cs index 53bb48f..c93f888 100644 --- a/src/RdbmsEventStore.EntityFramework.Tests/EventStoreTests/WriteEventTests.cs +++ b/src/RdbmsEventStore.EntityFramework.Tests/EventStoreTests/WriteEventTests.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using RdbmsEventStore.EntityFramework.Tests.Infrastructure; using RdbmsEventStore.EntityFramework.Tests.TestData; +using Moq; using Xunit; @@ -34,6 +35,25 @@ public async Task CommittingWithOutOfSyncDataThrowsConflictException() await Assert.ThrowsAsync(() => store.Append(stream, 0, new[] { new FooEvent { Foo = "Qux" } })); } + [Fact] + public async Task CommittingNoEventsExitsEarly() { + var context = new Mock>(MockBehavior.Strict); + var set = new Mock>(MockBehavior.Strict); + context.Setup(c => c.Set()).Returns(set.Object); + var stream = Guid.NewGuid(); + + var store = _fixture.BuildEventStore(context.Object); + + try { + await store.Append(stream, 0, new object[] { }); + } catch (NotImplementedException) { + // Thrown by the mock DbSet if we try to query for existing events + // This indicates that we didn't exit early + + Assert.False(true, "Expected to exit early, but apparently didn't."); + } + } + [Fact] public async Task CommittingMultipleEventsStoresAllEventsInContext() { @@ -77,4 +97,4 @@ public async Task CommittingMultipleEventsIncrementsVersionForEachEvent() bar => Assert.Equal(2, bar.Version)); } } -} \ No newline at end of file +} diff --git a/src/RdbmsEventStore.EntityFramework.Tests/RdbmsEventStore.EntityFramework.Tests.csproj b/src/RdbmsEventStore.EntityFramework.Tests/RdbmsEventStore.EntityFramework.Tests.csproj index 5c8023b..4e24095 100644 --- a/src/RdbmsEventStore.EntityFramework.Tests/RdbmsEventStore.EntityFramework.Tests.csproj +++ b/src/RdbmsEventStore.EntityFramework.Tests/RdbmsEventStore.EntityFramework.Tests.csproj @@ -11,6 +11,7 @@ + diff --git a/src/RdbmsEventStore.EntityFramework/EntityFrameworkEventStore.cs b/src/RdbmsEventStore.EntityFramework/EntityFrameworkEventStore.cs index 3b0c165..d15837c 100644 --- a/src/RdbmsEventStore.EntityFramework/EntityFrameworkEventStore.cs +++ b/src/RdbmsEventStore.EntityFramework/EntityFrameworkEventStore.cs @@ -45,6 +45,10 @@ public async Task> Events(Func, I public async Task Append(TStreamId streamId, long versionBefore, IEnumerable payloads) { + if (!payloads.Any()) { + return; + } + using (await _writeLock.Aquire(streamId)) { var highestVersionNumber = await _context.Events