예제 #1
0
        public void OnRequest()
        {
            var settings = new PesudoStaticSettings();

            using (Application.OverrideIoc()) {
                var configManagerMock = Substitute.For <GenericConfigManager>();
                configManagerMock.GetData <PesudoStaticSettings>().Returns(settings);
                Application.Ioc.Unregister <GenericConfigManager>();
                Application.Ioc.RegisterInstance(configManagerMock);
                var testUrl = new Func <string, string>(url => {
                    string parsedUrl = null;
                    var handlerMock  = Substitute.For <IHttpRequestHandler>();
                    handlerMock.When(h => h.OnRequest()).Do(callInfo => {
                        if (parsedUrl == null)
                        {
                            var request = HttpManager.CurrentContext.Request;
                            parsedUrl   = request.Path + request.QueryString;
                        }
                    });
                    Application.Ioc.Unregister <IHttpRequestHandler>();
                    Application.Ioc.RegisterInstance(handlerMock);
                    Application.Ioc.RegisterMany <PesudoStaticHandler>(ReuseType.Singleton);
                    using (var context = HttpManager.OverrideContext(url, "GET")) {
                        var handlers = Application.Ioc.ResolveMany <IHttpRequestHandler>().Reverse();
                        foreach (var handler in handlers)
                        {
                            handler.OnRequest();
                        }
                    }
                    return(parsedUrl);
                });

                Assert.Equals(testUrl("/"), "/");
                Assert.Equals(testUrl("/login.html"), "/login");
                Assert.Equals(testUrl("/user/login.html"), "/user/login");
                Assert.Equals(testUrl("/example/view-1.html"), "/example/view?id=1");
                Assert.Equals(testUrl("/example/view-abc.html"), "/example/view?id=abc");
                Assert.Equals(testUrl("/example/view-key-asd.html"), "/example/view?key=asd");

                var result = testUrl("/example/view-name-john.html?key=%26");
                Assert.IsTrueWith(
                    (result == "/example/view?name=john&key=%26" ||
                     result == "/example/view?key=%26&name=john"), result);
                result = testUrl("/example/view-name-john-age-50.html");
                Assert.IsTrueWith(
                    (result == "/example/view?name=john&age=50" ||
                     result == "/example/view?age=50&name=john"), result);
                Assert.Equals(testUrl("/test-param-nums-error.html"), "/test-param-nums-error.html");
            }
        }
        public void Filter()
        {
            var settings = new PesudoStaticSettings();

            settings.IncludeUrlPaths.Add("/include/me");
            settings.ExcludeUrlPaths.Add("/exclude/me");
            using (Application.OverrideIoc()) {
                var filter            = new PesudoStaticUrlFilter();
                var configManagerMock = Substitute.For <GenericConfigManager>();
                configManagerMock.GetData <PesudoStaticSettings>().Returns(settings);
                Application.Ioc.Unregister <GenericConfigManager>();
                Application.Ioc.RegisterInstance(configManagerMock);
                var testUrl = new Func <string, string>(url => { filter.Filter(ref url); return(url); });

                Assert.Equals(testUrl(""), "");
                Assert.Equals(testUrl("/"), "/");
                Assert.Equals(testUrl("#abc"), "#abc");
                Assert.Equals(testUrl("http://localhost/"), "http://localhost/");
                Assert.Equals(testUrl("ftp://localhost/"), "ftp://localhost/");

                Assert.Equals(testUrl("/test/abc.jpg"), "/test/abc.jpg");
                Assert.Equals(testUrl("/test/abc/"), "/test/abc/");
                Assert.Equals(testUrl("/test/abc/a-b?id=1"), "/test/abc/a-b?id=1");
                Assert.Equals(testUrl("/test/a-bc/ab?id=1"), "/test/a-bc/ab-1.html");

                Assert.Equals(testUrl("/exclude/me"), "/exclude/me");
                settings.PesudoStaticPolicy = PesudoStaticPolicies.WhiteListPolicy;
                Assert.Equals(testUrl("/include/me"), "/include/me.html");
                Assert.Equals(testUrl("/otherwise"), "/otherwise");
                settings.PesudoStaticPolicy = PesudoStaticPolicies.BlackListPolicy;

                settings.EnablePesudoStatic = false;
                Assert.Equals(testUrl("/no_enabled"), "/no_enabled");
                settings.EnablePesudoStatic = true;
                Assert.Equals(testUrl("/enabled"), "/enabled.html");

                Assert.Equals(testUrl("login"), "login.html");
                Assert.Equals(testUrl("/example/view?id=1"), "/example/view-1.html");
                Assert.Equals(testUrl("/example/view?Id=1"), "/example/view-Id-1.html");

                var result = testUrl("/example/view?tag=123&key=asd");
                Assert.IsTrueWith(
                    (result == "/example/view-tag-123-key-asd.html" ||
                     result == "/example/view-key-asd-tag-123.html"), result);
                Assert.Equals(testUrl("view?name=john&key=1-1"), "view-name-john.html?key=1-1");
                Assert.Equals(testUrl("view?name=john&key=%26"), "view-name-john.html?key=%26");
            }
        }
        public void Filter()
        {
            var settings = new PesudoStaticSettings();

            settings.IncludeUrlPaths.Add("/include/me");
            settings.ExcludeUrlPaths.Add("/exclude/me");
            using (Application.OverrideIoc()) {
                var filter = new PesudoStaticUrlFilter();
                Application.Ioc.Unregister <GenericConfigManager>();
                Application.Ioc.RegisterInstance <GenericConfigManager>(
                    new PesudoStaticHandlerTest.GenericConfigManagerMock(settings));
                var testUrl = new Func <string, string>(url => { filter.Filter(ref url); return(url); });

                Assert.Equals(testUrl(""), "");
                Assert.Equals(testUrl("/"), "/");
                Assert.Equals(testUrl("#abc"), "#abc");
                Assert.Equals(testUrl("http://localhost/"), "http://localhost/");
                Assert.Equals(testUrl("ftp://localhost/"), "ftp://localhost/");

                Assert.Equals(testUrl("/test/abc.jpg"), "/test/abc.jpg");
                Assert.Equals(testUrl("/test/abc/"), "/test/abc/");
                Assert.Equals(testUrl("/test/abc/a.b?id=1"), "/test/abc/a.b?id=1");
                Assert.Equals(testUrl("/test/a-bc/ab?id=1"), "/test/a-bc/ab.1.html");

                Assert.Equals(testUrl("/exclude/me"), "/exclude/me");
                settings.PesudoStaticPolicy = PesudoStaticPolicies.WhiteListPolicy;
                Assert.Equals(testUrl("/include/me"), "/include/me.html");
                Assert.Equals(testUrl("/otherwise"), "/otherwise");
                settings.PesudoStaticPolicy = PesudoStaticPolicies.BlackListPolicy;

                settings.EnablePesudoStatic = false;
                Assert.Equals(testUrl("/no_enabled"), "/no_enabled");
                settings.EnablePesudoStatic = true;
                Assert.Equals(testUrl("/enabled"), "/enabled.html");

                Assert.Equals(testUrl("login"), "login.html");
                Assert.Equals(testUrl("/example/view?id=1"), "/example/view.1.html");
                Assert.Equals(testUrl("/example/view?Id=1"), "/example/view.Id.1.html");

                var result = testUrl("/example/view?tag=123&key=asd");
                Assert.IsTrueWith(
                    (result == "/example/view.tag.123.key.asd.html" ||
                     result == "/example/view.key.asd.tag.123.html"), result);
                Assert.Equals(testUrl("view?name=john&key=1.1"), "view.name.john.html?key=1.1");
                Assert.Equals(testUrl("view?name=john&key=%26"), "view.name.john.html?key=%26");
            }
        }
예제 #4
0
        public void OnRequest()
        {
            var settings = new PesudoStaticSettings();

            using (Application.OverrideIoc()) {
                var configManagerMock = Substitute.For <GenericConfigManager>();
                configManagerMock.GetData <PesudoStaticSettings>().Returns(settings);
                Application.Ioc.Unregister <GenericConfigManager>();
                Application.Ioc.RegisterInstance(configManagerMock);
                var testUrl = new Func <string, string>(url => {
                    string parsedUrl = null;
                    var wrapper      = new PesudoStaticHandlerWrapper();
                    using (HttpManager.OverrideContext(url, HttpMethods.GET)) {
                        wrapper.WrapHandlerAction(() => {
                            var request = HttpManager.CurrentContext.Request;
                            parsedUrl   = request.Path + request.QueryString;
                        })();
                    }
                    return(parsedUrl);
                });

                Assert.Equals(testUrl("/"), "/");
                Assert.Equals(testUrl("/login.html"), "/login");
                Assert.Equals(testUrl("/user/login.html"), "/user/login");
                Assert.Equals(testUrl("/example/view.1.html"), "/example/view?id=1");
                Assert.Equals(testUrl("/example/view.abc.html"), "/example/view?id=abc");
                Assert.Equals(testUrl("/example/view.key.asd.html"), "/example/view?key=asd");

                var result = testUrl("/example/view.name.john.html?key=%26");
                Assert.IsTrueWith(
                    (result == "/example/view?name=john&key=%26" ||
                     result == "/example/view?key=%26&name=john"), result);
                result = testUrl("/example/view.name.john.age.50.html");
                Assert.IsTrueWith(
                    (result == "/example/view?name=john&age=50" ||
                     result == "/example/view?age=50&name=john"), result);
                Assert.Equals(testUrl("/test.param.nums.error.html"), "/test.param.nums.error.html");
            }
        }
 public GenericConfigManagerMock(PesudoStaticSettings settings)
 {
     _settings = settings;
 }