public bool IsSameAs(MiddlewareDetail other) { var result = Object.ReferenceEquals(this, other); if (!result) { result = Object.ReferenceEquals(Target, other.Target) && String.Equals(AppFuncMethodName, other.AppFuncMethodName); } return(result); }
public void StandardPipeline_Adds_Standard_Middleware_With_Correct_Priorities() { var actualStreamManipulators = new List <IStreamManipulator>(); _ResponseStreamWrapper.Setup(r => r.Initialise(It.IsAny <IEnumerable <IStreamManipulator> >())).Callback((IEnumerable <IStreamManipulator> manipulators) => { actualStreamManipulators.AddRange(manipulators); }); var webAppConfiguration = Factory.Singleton.Resolve <IWebAppConfiguration>(); _StandardPipeline.Register(webAppConfiguration); var actualTargets = new List <MiddlewareDetail>(); MiddlewareDetail targetBeforeWebApiAdded = null; var mockAppBuilder = TestUtilities.CreateMockInstance <IAppBuilder>(); mockAppBuilder.Setup(r => r.Use(It.IsAny <object>(), It.IsAny <object[]>())).Callback((object middlewareAbstract, object[] parameters) => { if (middlewareAbstract is Func <AppFunc, AppFunc> middleware) { actualTargets.Add(new MiddlewareDetail() { Target = middleware.Target, AppFuncMethodName = middleware.Method.Name, }); } else if ((middlewareAbstract as Type)?.FullName.StartsWith("System.Web.Http.") ?? false) { if (targetBeforeWebApiAdded == null) { targetBeforeWebApiAdded = actualTargets.Count > 0 ? actualTargets[actualTargets.Count - 1] : new MiddlewareDetail(); } } }); webAppConfiguration.Configure(mockAppBuilder.Object); // All middleware was added in correct order Assert.AreEqual(_ExpectedMiddleware.Count, actualTargets.Count); for (var i = 0; i < _ExpectedMiddleware.Count; ++i) { var expected = _ExpectedMiddleware[i]; var actual = actualTargets[i]; Assert.IsTrue(expected.IsSameAs(actual), $"Expected {expected}, got {actual}"); } // The web api was initialised at the right point in the chain Assert.IsTrue(_LastMiddlewareBeforeWebApiInit.IsSameAs(targetBeforeWebApiAdded), $"Web API should have been initialised after {_LastMiddlewareBeforeWebApiInit}, was actually after {targetBeforeWebApiAdded}"); // The response stream wrapper was initialised correctly Assert.IsTrue(_ExpectedStreamManipulators.SequenceEqual(actualStreamManipulators)); }
public void TestInitialise() { _Snapshot = Factory.TakeSnapshot(); _ExpectedMiddleware = new List <MiddlewareDetail>(); _ExceptionHandler = CreateMockMiddleware <IExceptionHandler>(nameof(IExceptionHandler.HandleRequest)); _AccessFilter = CreateMockMiddleware <IAccessFilter>(nameof(IAccessFilter.FilterRequest)); _BasicAuthenticationFilter = CreateMockMiddleware <IBasicAuthenticationFilter>(nameof(IBasicAuthenticationFilter.FilterRequest)); _RedirectionFilter = CreateMockMiddleware <IRedirectionFilter>(nameof(IRedirectionFilter.FilterRequest)); _CorsHandler = CreateMockMiddleware <ICorsHandler>(nameof(ICorsHandler.HandleRequest)); _ResponseStreamWrapper = CreateMockMiddleware <IResponseStreamWrapper>(nameof(IResponseStreamWrapper.WrapResponseStream)); _LastMiddlewareBeforeWebApiInit = _ExpectedMiddleware[_ExpectedMiddleware.Count - 1]; _BundlerServer = CreateMockMiddleware <IBundlerServer>(nameof(IBundlerServer.HandleRequest)); _FileSystemServer = CreateMockMiddleware <IFileSystemServer>(nameof(IFileSystemServer.HandleRequest)); _ImageServer = CreateMockMiddleware <IImageServer>(nameof(IImageServer.HandleRequest)); _AudioServer = CreateMockMiddleware <IAudioServer>(nameof(IAudioServer.HandleRequest)); _HtmlManipulatorConfiguration = TestUtilities.CreateMockImplementation <IHtmlManipulatorConfiguration>(); _ExpectedStreamManipulators = new List <IStreamManipulator>(); _JavascriptManipulator = CreateMockStreamManipulator <IJavascriptManipulator>(); _HtmlManipulator = CreateMockStreamManipulator <IHtmlManipulator>(); _StandardPipeline = Factory.Singleton.Resolve <IStandardPipeline>(); }