public async Task A_pipeline_can_be_used_to_continue_on_exceptions() { var aggregator = Aggregator .Create<BalanceProjection, IDomainEvent>((projection, events) => { Task.Run(() => { throw new Exception("DRAT!"); }); }) .Pipeline(async (projection, events, next) => { try { return await next(projection, events); } catch (Exception) { return projection; } }); var balanceProjection = new BalanceProjection(); var returnedProjection = await aggregator.Aggregate(balanceProjection, null); balanceProjection.Should().BeSameAs(returnedProjection); }
public async Task An_aggregator_can_be_short_circuited_using_Pipeline_and_returning_rather_than_calling_next() { var wasCalled = false; var aggregator = Aggregator.Create<BalanceProjection, IDomainEvent>((projection, events) => wasCalled = true) .Pipeline(async (projection, events, next) => projection); var balanceProjection = new BalanceProjection(); var returnedProjection = await aggregator.Aggregate(balanceProjection, null); wasCalled.Should().BeFalse(); balanceProjection.Should().BeSameAs(returnedProjection); }