public void OrderPostSavePipelineHooksByOrderThenByNameReversed() { var pipelineHooks = new PipelineHook[] { new PipelineHookC(), new PipelineHookA(), new PipelineHookB() }; var aggregateStore = new HookableAggregateStore(new Mock<IStoreAggregates>().Object, pipelineHooks); var postSaveHooks = aggregateStore.PostSaveHooks.AsList(); Assert.IsType(typeof(PipelineHookA), postSaveHooks[0]); Assert.IsType(typeof(PipelineHookC), postSaveHooks[1]); Assert.IsType(typeof(PipelineHookB), postSaveHooks[2]); }
public void OrderPostSavePipelineHooksByOrderThenByNameReversed() { var pipelineHooks = new PipelineHook[] { new PipelineHookC(), new PipelineHookA(), new PipelineHookB() }; var aggregateStore = new HookableAggregateStore(new Mock <IStoreAggregates>().Object, pipelineHooks); var postSaveHooks = aggregateStore.PostSaveHooks.AsList(); Assert.IsType(typeof(PipelineHookA), postSaveHooks[0]); Assert.IsType(typeof(PipelineHookC), postSaveHooks[1]); Assert.IsType(typeof(PipelineHookB), postSaveHooks[2]); }
public void CanCallDisposeMoreThanOnce() { var pipelineHook = new DisposablePipelineHook(); var pipelineHooks = new PipelineHook[] { pipelineHook }; var aggregateStore = new HookableAggregateStore(new Mock <IStoreAggregates>().Object, pipelineHooks); aggregateStore.Dispose(); aggregateStore.Dispose(); Assert.True(pipelineHook.Disposed); }
public void ReturnAggregateIfNoExceptionsThrown() { var id = Guid.NewGuid(); var type = typeof(Aggregate); var aggregate = new Mock <Aggregate>(); var pipelineHook = new Mock <PipelineHook>(); var decoratedAggregateStore = new Mock <IStoreAggregates>(); var aggregateStore = new HookableAggregateStore(decoratedAggregateStore.Object, new[] { pipelineHook.Object }); decoratedAggregateStore.Setup(mock => mock.Get(type, id)).Returns(aggregate.Object); Assert.Same(aggregate.Object, aggregateStore.Get(type, id)); }
public void InvokePreGetHooksBeforeDecoratedGet() { var id = Guid.NewGuid(); var type = typeof(Aggregate); var pipelineHook = new Mock <PipelineHook>(); var decoratedAggregateStore = new Mock <IStoreAggregates>(); var aggregateStore = new HookableAggregateStore(decoratedAggregateStore.Object, new[] { pipelineHook.Object }); pipelineHook.Setup(mock => mock.PreGet(type, id)).Throws(new InvalidOperationException()); Assert.Throws <InvalidOperationException>(() => aggregateStore.Get(type, id)); decoratedAggregateStore.Verify(mock => mock.Get(type, id), Times.Never()); }
public void ReturnSaveResultIfNoExceptionsThrown() { var aggregate = new Mock <Aggregate>(); var pipelineHook = new Mock <PipelineHook>(); var decoratedAggregateStore = new Mock <IStoreAggregates>(); var commit = (Commit)FormatterServices.GetUninitializedObject(typeof(Commit)); var aggregateStore = new HookableAggregateStore(decoratedAggregateStore.Object, new[] { pipelineHook.Object }); var saveResult = new SaveResult(aggregate.Object, commit); // ReSharper disable AccessToDisposedClosure using (var context = new CommandContext(Guid.NewGuid(), HeaderCollection.Empty, CommandEnvelope.Empty)) { decoratedAggregateStore.Setup(mock => mock.Save(aggregate.Object, context)).Returns(saveResult); Assert.Same(saveResult, aggregateStore.Save(aggregate.Object, context)); } // ReSharper restore AccessToDisposedClosure }
public void InvokePostSaveHooksIfDecoratedSaveThrowsException() { var aggregate = new Mock <Aggregate>(); var pipelineHook = new Mock <PipelineHook>(); var error = new InvalidOperationException(); var decoratedAggregateStore = new Mock <IStoreAggregates>(); var aggregateStore = new HookableAggregateStore(decoratedAggregateStore.Object, new[] { pipelineHook.Object }); // ReSharper disable AccessToDisposedClosure using (var context = new CommandContext(Guid.NewGuid(), HeaderCollection.Empty, CommandEnvelope.Empty)) { decoratedAggregateStore.Setup(mock => mock.Save(aggregate.Object, context)).Throws(error); Assert.Throws <InvalidOperationException>(() => aggregateStore.Save(aggregate.Object, context)); pipelineHook.Verify(mock => mock.PostSave(aggregate.Object, null, error), Times.Once()); } // ReSharper restore AccessToDisposedClosure }
public void InvokePostSaveHooksAfterDecoratedSave() { var aggregate = new Mock <Aggregate>(); var pipelineHook = new Mock <PipelineHook>(); var decoratedAggregateStore = new Mock <IStoreAggregates>(); var commit = (Commit)FormatterServices.GetUninitializedObject(typeof(Commit)); var aggregateStore = new HookableAggregateStore(decoratedAggregateStore.Object, new[] { pipelineHook.Object }); // ReSharper disable AccessToDisposedClosure using (var context = new CommandContext(Guid.NewGuid(), HeaderCollection.Empty, CommandEnvelope.Empty)) { decoratedAggregateStore.Setup(mock => mock.Save(aggregate.Object, context)).Returns(new SaveResult(aggregate.Object, commit)); pipelineHook.Setup(mock => mock.PostSave(aggregate.Object, commit, null)).Throws(new InvalidOperationException()); Assert.Throws <InvalidOperationException>(() => aggregateStore.Save(aggregate.Object, context)); decoratedAggregateStore.Verify(mock => mock.Save(aggregate.Object, context), Times.Once()); } // ReSharper restore AccessToDisposedClosure }
public void CanCallDisposeMoreThanOnce() { var pipelineHook = new DisposablePipelineHook(); var pipelineHooks = new PipelineHook[] { pipelineHook }; var aggregateStore = new HookableAggregateStore(new Mock<IStoreAggregates>().Object, pipelineHooks); aggregateStore.Dispose(); aggregateStore.Dispose(); Assert.True(pipelineHook.Disposed); }
public void ReturnSaveResultIfNoExceptionsThrown() { var aggregate = new Mock<Aggregate>(); var pipelineHook = new Mock<PipelineHook>(); var decoratedAggregateStore = new Mock<IStoreAggregates>(); var commit = (Commit)FormatterServices.GetUninitializedObject(typeof(Commit)); var aggregateStore = new HookableAggregateStore(decoratedAggregateStore.Object, new[] { pipelineHook.Object }); var saveResult = new SaveResult(aggregate.Object, commit); // ReSharper disable AccessToDisposedClosure using (var context = new CommandContext(Guid.NewGuid(), HeaderCollection.Empty, CommandEnvelope.Empty)) { decoratedAggregateStore.Setup(mock => mock.Save(aggregate.Object, context)).Returns(saveResult); Assert.Same(saveResult, aggregateStore.Save(aggregate.Object, context)); } // ReSharper restore AccessToDisposedClosure }
public void InvokePostSaveHooksIfDecoratedSaveThrowsException() { var aggregate = new Mock<Aggregate>(); var pipelineHook = new Mock<PipelineHook>(); var error = new InvalidOperationException(); var decoratedAggregateStore = new Mock<IStoreAggregates>(); var aggregateStore = new HookableAggregateStore(decoratedAggregateStore.Object, new[] { pipelineHook.Object }); // ReSharper disable AccessToDisposedClosure using (var context = new CommandContext(Guid.NewGuid(), HeaderCollection.Empty, CommandEnvelope.Empty)) { decoratedAggregateStore.Setup(mock => mock.Save(aggregate.Object, context)).Throws(error); Assert.Throws<InvalidOperationException>(() => aggregateStore.Save(aggregate.Object, context)); pipelineHook.Verify(mock => mock.PostSave(aggregate.Object, null, error), Times.Once()); } // ReSharper restore AccessToDisposedClosure }
public void InvokePostSaveHooksAfterDecoratedSave() { var aggregate = new Mock<Aggregate>(); var pipelineHook = new Mock<PipelineHook>(); var decoratedAggregateStore = new Mock<IStoreAggregates>(); var commit = (Commit)FormatterServices.GetUninitializedObject(typeof(Commit)); var aggregateStore = new HookableAggregateStore(decoratedAggregateStore.Object, new[] { pipelineHook.Object }); // ReSharper disable AccessToDisposedClosure using (var context = new CommandContext(Guid.NewGuid(), HeaderCollection.Empty, CommandEnvelope.Empty)) { decoratedAggregateStore.Setup(mock => mock.Save(aggregate.Object, context)).Returns(new SaveResult(aggregate.Object, commit)); pipelineHook.Setup(mock => mock.PostSave(aggregate.Object, commit, null)).Throws(new InvalidOperationException()); Assert.Throws<InvalidOperationException>(() => aggregateStore.Save(aggregate.Object, context)); decoratedAggregateStore.Verify(mock => mock.Save(aggregate.Object, context), Times.Once()); } // ReSharper restore AccessToDisposedClosure }
public void ReturnAggregateIfNoExceptionsThrown() { var id = Guid.NewGuid(); var type = typeof(Aggregate); var aggregate = new Mock<Aggregate>(); var pipelineHook = new Mock<PipelineHook>(); var decoratedAggregateStore = new Mock<IStoreAggregates>(); var aggregateStore = new HookableAggregateStore(decoratedAggregateStore.Object, new[] { pipelineHook.Object }); decoratedAggregateStore.Setup(mock => mock.Get(type, id)).Returns(aggregate.Object); Assert.Same(aggregate.Object, aggregateStore.Get(type, id)); }
public void InvokePostGetHooksAfterDecoratedGet() { var id = Guid.NewGuid(); var type = typeof(Aggregate); var aggregate = new Mock<Aggregate>(); var pipelineHook = new Mock<PipelineHook>(); var decoratedAggregateStore = new Mock<IStoreAggregates>(); var aggregateStore = new HookableAggregateStore(decoratedAggregateStore.Object, new[] { pipelineHook.Object }); decoratedAggregateStore.Setup(mock => mock.Get(type, id)).Returns(aggregate.Object); pipelineHook.Setup(mock => mock.PostGet(aggregate.Object)).Throws(new InvalidOperationException()); Assert.Throws<InvalidOperationException>(() => aggregateStore.Get(type, id)); decoratedAggregateStore.Verify(mock => mock.Get(type, id), Times.Once()); }