public async Task ExecuteAsync_ChainsFiltersInOrderFollowedByInnerActionContinuation() { // Arrange HttpActionContext actionContextInstance = ContextUtil.CreateActionContext(); List <string> log = new List <string>(); Mock <IAuthorizationFilter> globalFilterMock = CreateAuthorizationFilterMock( (ctx, ct, continuation) => { log.Add("globalFilter"); return(continuation()); } ); Mock <IAuthorizationFilter> actionFilterMock = CreateAuthorizationFilterMock( (ctx, ct, continuation) => { log.Add("actionFilter"); return(continuation()); } ); Mock <IHttpActionResult> innerResultMock = new Mock <IHttpActionResult>(); innerResultMock .Setup(r => r.ExecuteAsync(It.IsAny <CancellationToken>())) .Returns( () => { log.Add("innerAction"); return(Task.FromResult <HttpResponseMessage>(null)); } ); IHttpActionResult innerResult = innerResultMock.Object; var filters = new IAuthorizationFilter[] { globalFilterMock.Object, actionFilterMock.Object, }; IHttpActionResult authorizationFilter = new AuthorizationFilterResult( actionContextInstance, filters, innerResult ); // Act await authorizationFilter.ExecuteAsync(CancellationToken.None); // Assert Assert.Equal(new[] { "globalFilter", "actionFilter", "innerAction" }, log.ToArray()); globalFilterMock.Verify(); actionFilterMock.Verify(); }
public void ExecuteAsync_ChainsFiltersInOrderFollowedByInnerActionContinuation() { // Arrange HttpActionContext actionContextInstance = ContextUtil.CreateActionContext(); List<string> log = new List<string>(); Mock<IAuthorizationFilter> globalFilterMock = CreateAuthorizationFilterMock((ctx, ct, continuation) => { log.Add("globalFilter"); return continuation(); }); Mock<IAuthorizationFilter> actionFilterMock = CreateAuthorizationFilterMock((ctx, ct, continuation) => { log.Add("actionFilter"); return continuation(); }); Mock<IHttpActionResult> innerResultMock = new Mock<IHttpActionResult>(); innerResultMock.Setup(r => r.ExecuteAsync(It.IsAny<CancellationToken>())).Returns(() => { log.Add("innerAction"); return Task.FromResult<HttpResponseMessage>(null); }); IHttpActionResult innerResult = innerResultMock.Object; var filters = new IAuthorizationFilter[] { globalFilterMock.Object, actionFilterMock.Object, }; IHttpActionResult authorizationFilter = new AuthorizationFilterResult(actionContextInstance, filters, innerResult); // Act Task<HttpResponseMessage> result = authorizationFilter.ExecuteAsync(CancellationToken.None); // Assert Assert.NotNull(result); result.WaitUntilCompleted(); Assert.Equal(new[] { "globalFilter", "actionFilter", "innerAction" }, log.ToArray()); globalFilterMock.Verify(); actionFilterMock.Verify(); }