Exemplo n.º 1
0
        public void ClientSideValidationRules_Helper_Passes_ActiveRuleProvider_Output_To_Formatter()
        {
            // Arrange
            var html = new HtmlHelperMocks<object>().HtmlHelper;
            var arbitraryType = typeof (DateTime);
            var ruleProvider = new Moq.Mock<IRulesProvider>();
            var rules = new RuleSet(new[] { "someProperty" }.ToLookup(x => x, x => (Rule)new RequiredRule()));
            ruleProvider.Expect(x => x.GetRulesFromType(arbitraryType)).Returns(rules);
            ActiveRuleProviders.Providers.Clear();
            ActiveRuleProviders.Providers.Add(ruleProvider.Object);

            // Capture params passed to mockFormatter
            var mockFormatter = new Moq.Mock<IValidationConfigFormatter>(MockBehavior.Strict);
            RuleSet passedRules = null;
            Action<RuleSet> callback = x =>
            {
                passedRules = x;
            };
            mockFormatter.Expect(x => x.FormatRules(It.IsAny<RuleSet>()))
                .Callback(callback)
                .Returns("ok");
            ValidationInfo.Formatter = mockFormatter.Object;

            // Act
            var result = html.ClientSideValidationRules(arbitraryType);

            // Assert
            Assert.Equal("ok", result.ToString());
            Assert.Equal(1, passedRules.Keys.Count());
            Assert.Same(rules["someProperty"].Single(), passedRules["someProperty"].First());
        }
Exemplo n.º 2
0
        public void ShouldEscapeQuery(string query, string expected)
        {
            var mocks = ConfigureMockReactEnvironment();

            ConfigureMockConfiguration();
            ConfigureReactIdGenerator();

            mocks.Engine.Setup(x => x.Evaluate <string>("JSON.stringify(context);"))
            .Returns("{ status: 200 }");

            var requestMock = new Mock <HttpRequestBase>();

            requestMock.SetupGet(x => x.Path).Returns("/test");
            var queryStringMock = new Mock <NameValueCollection>();

            queryStringMock.Setup(x => x.ToString()).Returns(query);
            requestMock.SetupGet(x => x.QueryString).Returns(queryStringMock.Object);

            var htmlHelperMock = new HtmlHelperMocks(requestMock.Object);

            var result = HtmlHelperExtensions.ReactRouter(
                htmlHelper: htmlHelperMock.htmlHelper.Object,
                componentName: "ComponentName",
                props: new { },
                path: null,
                contextHandler: (response, context) => response.StatusCode = context.status.Value
                );

            htmlHelperMock.httpResponse.VerifySet(x => x.StatusCode = 200);

            mocks.Engine.Verify(x => x.Evaluate <string>(@"ReactDOMServer.renderToString(React.createElement(ComponentName, Object.assign({}, { location: ""/test" + expected + @""", context: context })))"));
        }
Exemplo n.º 3
0
        public void ClientSideValidationRules_Helper_Passes_Ruleset_Name_To_Formatter()
        {
            // Arrange
            var arbitraryType = typeof(DateTime);
            var html = new HtmlHelperMocks<object>().HtmlHelper;
            var mockFormatter = new Moq.Mock<IValidationConfigFormatter>(MockBehavior.Strict);
            mockFormatter.Expect(x => x.FormatRules(It.IsAny<RuleSet>()))
                .Returns("ok");
            ValidationInfo.Formatter = mockFormatter.Object;

            // Act
            var result = html.ClientSideValidationRules(arbitraryType);

            // Assert
            Assert.Equal("ok", result.ToString());
        }
Exemplo n.º 4
0
        public void ClientSideValidationRules_Can_Take_Explicit_RuleSet_And_Passes_It_To_Formatter()
        {
            // Arrange
            var html = new HtmlHelperMocks<object>().HtmlHelper;
            var rules = new RuleSet(new[] { "someProperty" }.ToLookup(x => x, x => (Rule)new RequiredRule()));

            // Capture params passed to mockFormatter
            var mockFormatter = new Moq.Mock<IValidationConfigFormatter>(MockBehavior.Strict);
            mockFormatter.Expect(x => x.FormatRules(rules)).Returns("ok");

            ValidationInfo.Formatter = mockFormatter.Object;

            // Act
            var result = html.ClientSideValidationRules(rules);

            // Assert
            Assert.Equal("ok", result.ToString());
        }
        public void ShouldRedirectPermanent()
        {
            var mocks = ConfigureMockReactEnvironment();

            ConfigureMockConfiguration();

            mocks.Engine.Setup(x => x.Evaluate <string>("JSON.stringify(context);"))
            .Returns(@"{ status: 301, url: ""/foo"" }");

            var htmlHelperMock = new HtmlHelperMocks();

            HtmlHelperExtensions.ReactRouterWithContext(
                htmlHelper: htmlHelperMock.htmlHelper.Object,
                componentName: "ComponentName",
                props: new { },
                path: "/"
                );
            htmlHelperMock.httpResponse.Verify(x => x.RedirectPermanent(It.IsAny <string>()));
        }
        public void ShouldModifyStatusCode()
        {
            var mocks = ConfigureMockReactEnvironment();

            ConfigureMockConfiguration();

            mocks.Engine.Setup(x => x.Evaluate <string>("JSON.stringify(context);"))
            .Returns("{ status: 200 }");

            var htmlHelperMock = new HtmlHelperMocks();

            HtmlHelperExtensions.ReactRouterWithContext(
                htmlHelper: htmlHelperMock.htmlHelper.Object,
                componentName: "ComponentName",
                props: new { },
                path: "/"
                );
            htmlHelperMock.httpResponse.VerifySet(x => x.StatusCode = 200);
        }
        public void ReactWithServerOnlyTrueShouldCallRenderHtmlWithTrue()
        {
            var config = ConfigureMockConfiguration();

            var htmlHelperMock = new HtmlHelperMocks();
            var environment    = ConfigureMockEnvironment();
            var routerMocks    = new ReactRouterMocks(config, environment);

            var result = HtmlHelperExtensions.ReactRouterWithContext(
                htmlHelper: htmlHelperMock.htmlHelper.Object,
                componentName: "ComponentName",
                props: new { },
                path: "/",
                htmlTag: "span",
                clientOnly: false,
                serverOnly: true
                );

            routerMocks.component.Verify(x => x.RenderRouterWithContext(It.Is <bool>(y => y == false), It.Is <bool>(z => z == true)), Times.Once);
        }
        public void EngineIsReturnedToPoolAfterRender()
        {
            var config         = ConfigureMockConfiguration();
            var environment    = ConfigureMockEnvironment();
            var routerMocks    = new ReactRouterMocks(config, environment);
            var htmlHelperMock = new HtmlHelperMocks();

            environment.Verify(x => x.ReturnEngineToPool(), Times.Never);
            var result = HtmlHelperExtensions.ReactRouterWithContext(
                htmlHelper: htmlHelperMock.htmlHelper.Object,
                componentName: "ComponentName",
                props: new { },
                path: "/",
                htmlTag: "span",
                clientOnly: true,
                serverOnly: true
                );

            environment.Verify(x => x.ReturnEngineToPool(), Times.Once);
        }
        public void ShouldFailRedirectWithNoUrl()
        {
            var mocks = ConfigureMockReactEnvironment();

            ConfigureMockConfiguration();

            mocks.Engine.Setup(x => x.Evaluate <string>("JSON.stringify(context);"))
            .Returns("{ status: 301 }");

            var htmlHelperMock = new HtmlHelperMocks();

            Assert.Throws <ReactRouterException>(() =>

                                                 HtmlHelperExtensions.ReactRouterWithContext(
                                                     htmlHelper: htmlHelperMock.htmlHelper.Object,
                                                     componentName: "ComponentName",
                                                     props: new { },
                                                     path: "/"
                                                     )
                                                 );
        }
Exemplo n.º 10
0
        public void ShouldRunCustomContextHandler()
        {
            var mocks = ConfigureMockReactEnvironment();

            ConfigureMockConfiguration();
            ConfigureReactIdGenerator();

            mocks.Engine.Setup(x => x.Evaluate <string>("JSON.stringify(context);"))
            .Returns("{ status: 200 }");

            var htmlHelperMock = new HtmlHelperMocks();

            HtmlHelperExtensions.ReactRouter(
                htmlHelper: htmlHelperMock.htmlHelper.Object,
                componentName: "ComponentName",
                props: new { },
                path: "/",
                contextHandler: (response, context) => response.StatusCode = context.status.Value
                );
            htmlHelperMock.httpResponse.VerifySet(x => x.StatusCode = 200);
        }
Exemplo n.º 11
0
        public void ClientSideValidation_Can_Suppress_Script_Tags()
        {
            // Arrange
            var html = new HtmlHelperMocks<object>().HtmlHelper;

            // Capture params passed to mockFormatter
            var mockFormatter = new Moq.Mock<IValidationConfigFormatter>(MockBehavior.Strict);
            mockFormatter.Expect(x => x.FormatRules(RuleSet.Empty)).Returns("{rulesWouldGoHere}");

            ValidationInfo.Formatter = mockFormatter.Object;

            // Act
            var result = html.ClientSideValidation("my.prefix", RuleSet.Empty);
            result.SuppressScriptTags();
            var formattedAsString = result.ToString();

            // Assert
            Assert.Equal(@"xVal.AttachValidator(""my.prefix"", {rulesWouldGoHere}, {})", formattedAsString);
        }
Exemplo n.º 12
0
        public void ClientSideValidation_Wraps_Output_From_Rule_Formatter()
        {
            // Arrange
            var html = new HtmlHelperMocks<object>().HtmlHelper;

            // Capture params passed to mockFormatter
            var mockFormatter = new Moq.Mock<IValidationConfigFormatter>(MockBehavior.Strict);
            mockFormatter.Expect(x => x.FormatRules(RuleSet.Empty)).Returns("{rulesWouldGoHere}");

            ValidationInfo.Formatter = mockFormatter.Object;

            // Act
            var result = html.ClientSideValidation("my.prefix", RuleSet.Empty);
            var formattedAsString = result.ToString();

            // Assert
            Assert.Equal(@"<script type=""text/javascript"">xVal.AttachValidator(""my.prefix"", {rulesWouldGoHere}, {})</script>", formattedAsString);
        }
Exemplo n.º 13
0
        public void ClientSideValidation_Includes_ValidationSummaryConfig()
        {
            // Arrange
            var html = new HtmlHelperMocks<object>().HtmlHelper;

            // Mock away the formatter so it doesn't affect this test
            var mockFormatter = new Moq.Mock<IValidationConfigFormatter>();
            mockFormatter.Expect(x => x.FormatRules(It.IsAny<RuleSet>())).Returns("rules");
            ValidationInfo.Formatter = mockFormatter.Object;

            // Act
            var result = html.ClientSideValidation("my.prefix", RuleSet.Empty);
            result.SuppressScriptTags().UseValidationSummary("testElementId", "Here's the validation summary message");
            var formattedAsString = result.ToString();

            // Assert
            Assert.Equal(@"xVal.AttachValidator(""my.prefix"", rules, {""ValidationSummary"":{""ElementID"":""testElementId"",""HeaderMessage"":""Here\u0027s the validation summary message""}})", formattedAsString);
        }