public async Task do_not_throw_target_invocation_exception_upon_failure() { var container = Substitute.For <IContainer>(); var scope = Substitute.For <IContainerScope>(); var query = new TestQuery(); var handler = Substitute.For <IQueryHandler <TestQuery, string> >(); Exception actual = null; container.CreateScope().Returns(scope); handler.When(x => x.ExecuteAsync(query)).Do(x => { throw new DataException(); }); scope.ResolveAll(null).ReturnsForAnyArgs(new[] { handler }); var sut = new IocQueryBus(container); try { await sut.QueryAsync(query); } catch (Exception exception) { actual = exception; } actual.Should().BeOfType <DataException>(); }
public IQueryBus CreateQueryBus(IContainer container) { var bus = new IocQueryBus(container); bus.QueryExecuted += (sender, args) => { CloseUnitOfWorks(args.Scope); }; return(bus); }
/// <summary> /// Initializes a new instance of the <see cref="IocBusBuilder" /> class. /// </summary> /// <param name="container">The container.</param> public IocBusBuilder(IContainer container) { if (container == null) throw new ArgumentNullException("container"); _container = container; CommandBus = new IocCommandBus(_container); RequestBus = new IocRequestReplyBus(container); EventBus = new IocEventBus(container); QueryBus = new IocQueryBus(container); }
public void must_have_one_handler_to_be_able_to_execute_query() { var container = Substitute.For <IContainer>(); var scope = Substitute.For <IContainerScope>(); container.CreateScope().Returns(scope); scope.ResolveAll(null).ReturnsForAnyArgs(new IQueryHandler <TestQuery, string> [0]); var sut = new IocQueryBus(container); Action x = () => sut.QueryAsync(new TestQuery()).Wait(); x.Should().Throw <CqsHandlerMissingException>(); }
public async Task handler_is_being_invoked() { var container = Substitute.For <IContainer>(); var scope = Substitute.For <IContainerScope>(); var handler = Substitute.For <IQueryHandler <TestQuery, string> >(); var query = new TestQuery(); container.CreateScope().Returns(scope); scope.ResolveAll(null).ReturnsForAnyArgs(new[] { handler }); var sut = new IocQueryBus(container); await sut.QueryAsync(query); handler.Received().ExecuteAsync(query); }
public async Task should_dispose_scope_when_done() { var container = Substitute.For <IContainer>(); var scope = Substitute.For <IContainerScope>(); container.CreateScope().Returns(scope); scope.ResolveAll(null).ReturnsForAnyArgs(new[] { Substitute.For <IQueryHandler <TestQuery, string> >(), }); var sut = new IocQueryBus(container); await sut.QueryAsync(new TestQuery()); scope.Received().Dispose(); }
public void may_only_have_one_query_handler_to_avoid_ambiguity() { var container = Substitute.For <IContainer>(); var scope = Substitute.For <IContainerScope>(); container.CreateScope().Returns(scope); scope.ResolveAll(null).ReturnsForAnyArgs(new[] { Substitute.For <IQueryHandler <TestQuery, string> >(), Substitute.For <IQueryHandler <TestQuery, string> >() }); var sut = new IocQueryBus(container); Action x = () => sut.QueryAsync(new TestQuery()).Wait(); x.Should().Throw <OnlyOneHandlerAllowedException>(); }