public async Task ProcessRequestAsync_IfExceptionIsNotHttpResponseException_DisposesRequest() { // Arrange using (HttpRequestMessage request = CreateRequest()) using (SpyDisposable spy = new SpyDisposable()) { request.RegisterForDispose(spy); ExceptionDispatchInfo exceptionInfo = CreateExceptionInfo(CreateException()); Mock <IExceptionLogger> loggerMock = new Mock <IExceptionLogger>(MockBehavior.Strict); loggerMock .Setup(l => l.LogAsync(It.IsAny <ExceptionLoggerContext>(), It.IsAny <CancellationToken>())) .Returns(Task.FromResult(0)); Mock <IExceptionHandler> handlerMock = new Mock <IExceptionHandler>(MockBehavior.Strict); handlerMock .Setup(h => h.HandleAsync(It.IsAny <ExceptionHandlerContext>(), It.IsAny <CancellationToken>())) .Returns(Task.FromResult(0)); HttpRouteExceptionHandler product = CreateProductUnderTest(exceptionInfo, loggerMock.Object, handlerMock.Object); Mock <HttpResponseBase> responseBaseMock = new Mock <HttpResponseBase>(); responseBaseMock.SetupGet(r => r.Cache).Returns(() => new Mock <HttpCachePolicyBase>().Object); HttpResponseBase responseBase = responseBaseMock.Object; HttpContextBase contextBase = CreateStubContextBase(responseBase); contextBase.SetHttpRequestMessage(request); // Act & Assert await Assert.ThrowsAsync <Exception>(() => product.ProcessRequestAsync(contextBase)); Assert.True(spy.Disposed); Assert.ThrowsObjectDisposed(() => request.Method = HttpMethod.Get, typeof(HttpRequestMessage).FullName); } }
public void ProcessRequestAsync_IfExceptionIsNotHttpResponseException_DisposesRequest() { // Arrange using (HttpRequestMessage request = CreateRequest()) using (SpyDisposable spy = new SpyDisposable()) { request.RegisterForDispose(spy); ExceptionDispatchInfo exceptionInfo = CreateExceptionInfo(CreateException()); IExceptionLogger logger = CreateDummyLogger(); IExceptionHandler handler = CreateDummyHandler(); HttpRouteExceptionHandler product = CreateProductUnderTest(exceptionInfo, logger, handler); Mock <HttpResponseBase> responseBaseMock = new Mock <HttpResponseBase>(); responseBaseMock.SetupGet(r => r.Cache).Returns(() => new Mock <HttpCachePolicyBase>().Object); HttpResponseBase responseBase = responseBaseMock.Object; HttpContextBase contextBase = CreateStubContextBase(responseBase); contextBase.SetHttpRequestMessage(request); // Act Task task = product.ProcessRequestAsync(contextBase); // Assert Assert.NotNull(task); task.WaitUntilCompleted(); Assert.Equal(TaskStatus.Faulted, task.Status); Assert.True(spy.Disposed); Assert.ThrowsObjectDisposed(() => request.Method = HttpMethod.Get, typeof(HttpRequestMessage).FullName); } }
public async Task ProcessRequestAsync_IfExceptionIsHttpResponseException_DisposesRequestAndResponse() { // Arrange using (HttpResponseMessage response = CreateResponse()) using (HttpRequestMessage request = CreateRequest()) using (SpyDisposable spy = new SpyDisposable()) { request.RegisterForDispose(spy); ExceptionDispatchInfo exceptionInfo = CreateExceptionInfo(new HttpResponseException(response)); IExceptionLogger logger = CreateDummyLogger(); IExceptionHandler handler = CreateDummyHandler(); HttpRouteExceptionHandler product = CreateProductUnderTest(exceptionInfo, logger, handler); Mock <HttpResponseBase> responseBaseMock = new Mock <HttpResponseBase>(); responseBaseMock.SetupGet(r => r.Cache).Returns(() => new Mock <HttpCachePolicyBase>().Object); HttpResponseBase responseBase = responseBaseMock.Object; HttpContextBase contextBase = CreateStubContextBase(responseBase); contextBase.SetHttpRequestMessage(request); // Act await product.ProcessRequestAsync(contextBase); // Assert Assert.True(spy.Disposed); Assert.ThrowsObjectDisposed(() => request.Method = HttpMethod.Get, typeof(HttpRequestMessage).FullName); Assert.ThrowsObjectDisposed(() => response.StatusCode = HttpStatusCode.OK, typeof(HttpResponseMessage).FullName); } }
public void ProcessRequestAsync_IfExceptionIsNotHttpResponseException_DisposesRequest() { // Arrange using (HttpRequestMessage request = CreateRequest()) using (SpyDisposable spy = new SpyDisposable()) { request.RegisterForDispose(spy); ExceptionDispatchInfo exceptionInfo = CreateExceptionInfo(CreateException()); IExceptionLogger logger = CreateDummyLogger(); IExceptionHandler handler = CreateDummyHandler(); HttpRouteExceptionHandler product = CreateProductUnderTest(exceptionInfo, logger, handler); Mock<HttpResponseBase> responseBaseMock = new Mock<HttpResponseBase>(); responseBaseMock.SetupGet(r => r.Cache).Returns(() => new Mock<HttpCachePolicyBase>().Object); HttpResponseBase responseBase = responseBaseMock.Object; HttpContextBase contextBase = CreateStubContextBase(responseBase); contextBase.SetHttpRequestMessage(request); // Act Task task = product.ProcessRequestAsync(contextBase); // Assert Assert.NotNull(task); task.WaitUntilCompleted(); Assert.Equal(TaskStatus.Faulted, task.Status); Assert.True(spy.Disposed); Assert.ThrowsObjectDisposed(() => request.Method = HttpMethod.Get, typeof(HttpRequestMessage).FullName); } }