public async Task Send_returnsAnotherResponse_serverSideHandlerChanged() { // global arrange using var fixture = new MessagingClientFixtureBuilder() .AddWebHandler <TestSuccessFailureMessageHandler>()// to have at least one handler configured .ClearInterceptors() .Create(); // arrange 1 fixture.ReplaceHandlers(new TestMessageHandler <TestScenarioMessage, TestResponse>(new TestResponse(true))); // act 1 var response1 = await fixture.Client.RequestObject(new TestScenarioMessage(1)); // assert 1 response1.Should().BeEquivalentTo(new TestResponse(true)); // arrange 2 fixture.ReplaceHandlers(new TestMessageHandler <TestScenarioMessage, TestResponse>(new TestResponse(false))); // act 2 var response2 = await fixture.Client.RequestObject(new TestScenarioMessage(2)); // assert 2 response2.Should().BeEquivalentTo(new TestResponse(false)); }
public void PublishObject_throwsInterruptingKindOfException_thrownNoException(Type exceptionType) { using var fixture = new MessagingClientFixtureBuilder() .AddWebHandler <TestSuccessFailureMessageHandler>() .ClearInterceptors() .Create(); fixture.Client.Awaiting(x => x.PublishObject(new TestSuccessFailureMessage(exceptionType.AssemblyQualifiedName))) .Should().NotThrowAsync(); }
public async Task RequestObject_returnsResponse() { using var fixture = new MessagingClientFixtureBuilder() .AddWebHandler <TestScenarioMessageHandler>() .Create(); var response = await fixture.Client.RequestObject(new TestScenarioMessage(0)); response.Should().Be(new TestResponse(false)); }
public async Task Post_returnsStatusAccepted_thrownInterruptingKindOfException(Type exceptionType) { using var fixture = new MessagingClientFixtureBuilder() .AddWebHandler <TestFailMessageHandler>() .ClearInterceptors() .Create(); var response = await fixture.Request(new TestFailMessage(exceptionType.AssemblyQualifiedName)); response.Should().BeEquivalentTo(new { StatusCode = HttpStatusCode.Accepted }); }
public void RequestObject_throwsMessageNotRegisteredException_NoLocalHandler() { using var fixture = new MessagingClientFixtureBuilder() .AddWebHandler <TestSuccessFailureMessageHandler>() .Create(); fixture.Client.Awaiting(x => x.RequestObject(new TestScenarioMessage(0))) .Should().ThrowExactlyAsync <MessageNotRegisteredException>() .WithMessage($"Message '{nameof(TestScenarioMessage)}' wasn't registered.") .Result.Which.InnerException.Should().BeNull(); }
public async Task Send_returnsResponse() { using var fixture = new MessagingClientFixtureBuilder() .UseMongo(ConnectionString, Database) .AddMongoHandler <TestScenarioMessageHandler>() .Create(); var response = await fixture.Client.RequestObject(new TestScenarioMessage(0)); response.Should().Be(new TestResponse(false)); }
public void RequestObject_throwsInterruptingKindOfException_thrownMessageDeferredException(Type exceptionType) { using var fixture = new MessagingClientFixtureBuilder() .AddWebHandler <TestSuccessFailureMessageHandler>() .ClearInterceptors() .Create(); fixture.Client.Awaiting(x => x.RequestObject(new TestSuccessFailureMessage(exceptionType.AssemblyQualifiedName))) .Should().ThrowExactlyAsync <MessageDeferredException>() .Result.Which.InnerException.Should().BeNull(); }
public void PublishObject_throwsMessageFailedException_thrownMessageFailedException() { using var fixture = new MessagingClientFixtureBuilder() .AddWebHandler <TestScenarioMessageHandler>() .Create(); fixture.Client.Awaiting(x => x.PublishObject(new TestScenarioMessage(2))) .Should().ThrowExactlyAsync <MessageFailedException>() .WithMessage("2") .Result.Which.InnerException.Should().BeNull(); }
public void RequestObject_throwsMessageFailedException_thrownInvalidOperationException() { using var fixture = new MessagingClientFixtureBuilder() .AddWebHandler <TestScenarioMessageHandler>() .Create(); fixture.Client.Awaiting(x => x.RequestObject(new TestScenarioMessage(1))) .Should().ThrowExactlyAsync <MessageFailedException>() .WithMessage("Message handling has failed.") .Result.Which.InnerException.Should().BeNull(); }
public async Task PublishObject_returnsResponse() { var handler = new TestMessageHandler <TestScenarioMessage, TestResponse>(new TestResponse(false)); using var fixture = new MessagingClientFixtureBuilder() .AddWebHandler(handler) .Create(); await fixture.Client.PublishObject(new TestScenarioMessage(0)); handler.Message.Should().Be(new TestScenarioMessage(0)); }
public void Send_throwsInterruptingKindOfException_thrownMessageDeferredException(Type exceptionType) { using var fixture = new MessagingClientFixtureBuilder() .UseMongo(ConnectionString, Database) .AddMongoHandler <TestSuccessFailureMessageHandler>() .Create(); fixture.Client.Awaiting(x => x.RequestObject(new TestSuccessFailureMessage(exceptionType.AssemblyQualifiedName))) .Should().ThrowExactlyAsync <MessageDeferredException>() .WithMessage("No response from server in defined amount of time.") .Result.Which.InnerException.Should().BeNull(); }
public void Send_throwsMessageFailedException_thrownMessageFailedException() { using var fixture = new MessagingClientFixtureBuilder() .UseMongo(ConnectionString, Database) .AddMongoHandler <TestScenarioMessageHandler>() .Create(); fixture.Client.Awaiting(x => x.RequestObject(new TestScenarioMessage(2))) .Should().ThrowExactlyAsync <MessageFailedException>() .WithMessage("2") .Result.Which.InnerException.Should().BeNull(); }
public void RequestObject_throwsMessageFailedException_thrownMessageFailedExceptionWithInnerException() { using var fixture = new MessagingClientFixtureBuilder() .AddWebHandler <TestScenarioMessageHandler>() .Create(); fixture.Client.Awaiting(x => x.RequestObject(new TestScenarioMessage(3))) .Should().ThrowExactlyAsync <MessageFailedException>() .WithMessage("3") .Result.WithInnerExceptionExactly <MessageFailedException>() .Which.InnerException?.Message.Should().Be("inner"); }
public void Send_throwsMessageNotRegisteredException_NoRemoteHandler() { using var fixture = new MessagingClientFixtureBuilder() .UseMongo(ConnectionString, Database) .AddMongoMessageRegistrationOnly <TestScenarioMessage>() .AddMongoHandler <TestSuccessFailureMessageHandler>()// to have at least one handler configured .Create(); fixture.Client.Awaiting(x => x.RequestObject(new TestScenarioMessage(0))) .Should().ThrowExactlyAsync <MessageNotRegisteredException>() .WithMessage($"Message '{nameof(TestScenarioMessage)}' wasn't registered.") .Result.Which.InnerException.Should().BeNull(); }
public async Task Post_returnsStatusNotFound_thrownMessageNotRegisteredException() { var exceptionType = typeof(MessageNotRegisteredException); using var fixture = new MessagingClientFixtureBuilder() .AddWebHandler <TestFailMessageHandler>() .Create(); var response = await fixture.Request(new TestFailMessage(exceptionType.AssemblyQualifiedName)); response.Should().BeEquivalentTo(new { StatusCode = HttpStatusCode.NotFound }); var responseObject = await fixture.ReadObject <MessageException>(response); responseObject.Should().BeOfType <MessageNotRegisteredException>(); }
public async Task Send_onceCallsHandler_concurrently(int concurrencyCount) { var handler = new TestScenarioMessageHandler(); using var fixture = new MessagingClientFixtureBuilder() .UseMongo(ConnectionString, Database) .AddMongoHandler(handler) .Create(); var tasks = Enumerable.Range(1, concurrencyCount).Select( _ => fixture.Client.RequestObject(new TestScenarioMessage(0))); await Task.WhenAll(tasks); handler.CallCount.Should().Be(1); }
public async Task Post_returnsStatusInternalServerError_throwAnyOtherMessageException() { var exceptionType = typeof(TestMessageException); using var fixture = new MessagingClientFixtureBuilder() .AddWebHandler <TestFailMessageHandler>() .Create(); var response = await fixture.Request(new TestFailMessage(exceptionType.AssemblyQualifiedName)); response.Should().BeEquivalentTo(new { StatusCode = HttpStatusCode.InternalServerError }); var responseObject = await fixture.ReadObject <MessageException>(response); responseObject.Should().BeOfType <TestMessageException>(); }