コード例 #1
0
        public void AddValidation_WithActionControllerArea_CallsUrlHelperWithExpectedValues()
        {
            // Arrange
            var attribute = new RemoteAttribute("Action", "Controller", "Test")
            {
                HttpMethod = "POST",
            };
            var url       = "/Test/Controller/Action";
            var urlHelper = new MockUrlHelper(url, routeName: null);
            var context   = GetValidationContext(urlHelper);

            // Act
            attribute.AddValidation(context);

            // Assert
            Assert.Collection(
                context.Attributes,
                kvp => { Assert.Equal("data-val", kvp.Key); Assert.Equal("true", kvp.Value); },
                kvp => { Assert.Equal("data-val-remote", kvp.Key); Assert.Equal("'Length' is invalid.", kvp.Value); },
                kvp =>
            {
                Assert.Equal("data-val-remote-additionalfields", kvp.Key);
                Assert.Equal("*.Length", kvp.Value);
            },
                kvp => { Assert.Equal("data-val-remote-type", kvp.Key); Assert.Equal("POST", kvp.Value); },
                kvp => { Assert.Equal("data-val-remote-url", kvp.Key); Assert.Equal(url, kvp.Value); });

            var routeDictionary = Assert.IsType <RouteValueDictionary>(urlHelper.RouteValues);

            Assert.Equal(3, routeDictionary.Count);
            Assert.Equal("Action", routeDictionary["action"] as string);
            Assert.Equal("Controller", routeDictionary["controller"] as string);
            Assert.Equal("Test", routeDictionary["area"] as string);
        }
コード例 #2
0
        public void GetClientValidationRules_WithActionControllerArea_CallsUrlHelperWithExpectedValues()
        {
            // Arrange
            var attribute = new RemoteAttribute("Action", "Controller", "Test")
            {
                HttpMethod = "POST",
            };
            var url       = "/Test/Controller/Action";
            var urlHelper = new MockUrlHelper(url, routeName: null);
            var context   = GetValidationContext(urlHelper);

            // Act & Assert
            var rule = Assert.Single(attribute.GetClientValidationRules(context));

            Assert.Equal("remote", rule.ValidationType);
            Assert.Equal("'Length' is invalid.", rule.ErrorMessage);

            Assert.Equal(3, rule.ValidationParameters.Count);
            Assert.Equal("*.Length", rule.ValidationParameters["additionalfields"]);
            Assert.Equal("POST", rule.ValidationParameters["type"]);
            Assert.Equal(url, rule.ValidationParameters["url"]);

            var routeDictionary = Assert.IsType <RouteValueDictionary>(urlHelper.RouteValues);

            Assert.Equal(3, routeDictionary.Count);
            Assert.Equal("Action", routeDictionary["action"] as string);
            Assert.Equal("Controller", routeDictionary["controller"] as string);
            Assert.Equal("Test", routeDictionary["area"] as string);
        }
コード例 #3
0
    public void GetUrl_WhenUrlHelperReturnsNull_Throws()
    {
        // Arrange
        var testableAttribute = new TestablePageRemoteAttribute
        {
            PageName    = "Foo",
            PageHandler = "Bar"
        };

        var ambientValues = new RouteValueDictionary
        {
            ["page"] = "/Page"
        };

        var routeData = new RouteData(ambientValues)
        {
            Routers = { Mock.Of <IRouter>() }
        };

        var urlHelper = new MockUrlHelper(url: null)
        {
            ActionContext = GetActionContext(new ServiceCollection().BuildServiceProvider(), routeData)
        };

        var validationContext = GetValidationContext(urlHelper);

        // Act && Assert
        ExceptionAssert.Throws <InvalidOperationException>(
            () => testableAttribute.InvokeGetUrl(validationContext),
            Resources.RemoteAttribute_NoUrlFound);
    }
コード例 #4
0
    public void GetUrl_WhenPageNameIsNotSet_WillUsePageNameFromAmbientValues()
    {
        // Arrange
        var testableAttribute = new TestablePageRemoteAttribute()
        {
            PageHandler = "Handler"
        };

        var ambientValues = new RouteValueDictionary
        {
            ["page"] = "/Page"
        };

        var routeData = new RouteData(ambientValues)
        {
            Routers = { Mock.Of <IRouter>() }
        };

        var urlHelper = new MockUrlHelper(url: "/Page?handler=Handler")
        {
            ActionContext = GetActionContext(new ServiceCollection().BuildServiceProvider(), routeData)
        };

        var validationContext = GetValidationContext(urlHelper);

        // Act
        var actualUrl = testableAttribute.InvokeGetUrl(validationContext);

        // Assert
        Assert.Equal("/Page?handler=Handler", actualUrl);
    }
コード例 #5
0
        private static ClientModelValidationContext GetValidationContext(
            string url,
            IModelMetadataProvider metadataProvider = null)
        {
            var urlHelper = new MockUrlHelper(url, routeName: null);

            return(GetValidationContext(urlHelper, localizerFactory: null, metadataProvider: metadataProvider));
        }
        protected override void Given()
        {
            var url = "Home/Index";
            UrlActionContext actualContext = null;

            MockUrlHelper.Setup(h => h.Action(It.IsAny <UrlActionContext>())).Returns(url).Callback <UrlActionContext>(c => actualContext = c).Verifiable("Url.Action was never called");

            _mockReportService.Setup(s => s.GetReport(It.IsAny <string>(), It.IsAny <string>())).Throws(new Exception("get report Error"));
        }
コード例 #7
0
        private static ClientModelValidationContext GetValidationContextWithLocalizerFactory(
            string url,
            IModelMetadataProvider metadataProvider = null)
        {
            var urlHelper        = new MockUrlHelper(url, routeName: null);
            var localizerFactory = new Mock <IStringLocalizerFactory>(MockBehavior.Strict);

            return(GetValidationContext(urlHelper, localizerFactory.Object, metadataProvider));
        }
コード例 #8
0
        public void ForgotPasswordTest()
        {
            var controller = new AccountController();

            controller.Settings = new Models.Settings();
            var mockUrlHelper = new MockUrlHelper(MockRequestContext());

            mockUrlHelper.ActionCallback = (a, c, r, p) => {
                return(string.Format("{0}://{1}/{2}/{3}/{4}", p, c, a, r["userId"], r["code"]));
            };
            controller.Url = mockUrlHelper;
            var context = CreateMockContext(controller, "ForgotPassword");
            var user    = new ApplicationUser {
                Id    = NewGuid(),
                Email = "*****@*****.**"
            };
            var    token         = Extensions.String.Random();
            string resultUserId  = null;
            string resultSubject = null;
            string resultBody    = null;

            controller.SignInManager = MockApplicationSignInManager();
            controller.RoleManager   = CreateRoleManager();
            controller.UserManager   = MockApplicationUserManager((mock) => {
                mock.Setup(x => x.FindByEmailAsync(It.IsAny <string>())).ReturnsAsync(user);
                mock.Setup(x => x.IsEmailConfirmedAsync(It.IsAny <string>())).ReturnsAsync(true);
                mock.Setup(x => x.GeneratePasswordResetTokenAsync(It.IsAny <string>())).ReturnsAsync(token);
                mock.Setup(x => x.SendEmailAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
                .Returns(Task.FromResult(user))
                .Callback <string, string, string>((userId, subject, body) => {
                    resultUserId  = userId;
                    resultSubject = subject;
                    resultBody    = body;
                });
            });

            var model = new ForgotPasswordViewModel {
                Email = user.Email
            };

            var asyncresult = controller.ForgotPassword(model);

            var result = asyncresult.Result;

            Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
            var redirResult = (RedirectToRouteResult)result;

            Assert.AreEqual("ForgotPasswordConfirmation", redirResult.RouteValues["action"]);
            Assert.AreEqual(user.Id, resultUserId);
            Assert.AreEqual("Reset Password", resultSubject);
            Assert.IsTrue(resultBody.Contains(token));
            Assert.IsTrue(resultBody.Contains(user.Email));
        }
コード例 #9
0
        protected override void Given()
        {
            base.Given();

            MockUrlHelper
            .Setup(
                m =>
                m.Action(
                    It.Is <UrlActionContext>(
                        ctx =>
                        ctx.Action.Equals("Edit", StringComparison.OrdinalIgnoreCase) &&
                        ctx.Controller.Equals("Report", StringComparison.OrdinalIgnoreCase))
                    ))
            .Returns(
                ExpectedUrl);
        }
コード例 #10
0
        public void GetUrl_WithRoute_CallsUrlHelperWithExpectedValues()
        {
            // Arrange
            var routeName = "RouteName";
            var testableRemoteAttribute = new TestableRemoteAttribute(routeName);
            var url       = "/my/URL";
            var urlHelper = new MockUrlHelper(url, routeName);
            var context   = GetValidationContext(urlHelper);

            // Act
            var actualUrl = testableRemoteAttribute.InvokeGetUrl(context);

            // Assert
            Assert.Equal(url, actualUrl);

            var routeDictionary = Assert.IsType <RouteValueDictionary>(urlHelper.RouteValues);

            Assert.Empty(routeDictionary);
        }
コード例 #11
0
        public void GetUrl_WithActionController_CallsUrlHelperWithExpectedValues()
        {
            // Arrange
            var testableRemoteAttribute = new TestableRemoteAttribute("Action", "Controller");
            var url       = "/Controller/Action";
            var urlHelper = new MockUrlHelper(url, routeName: null);
            var context   = GetValidationContext(urlHelper);

            // Act
            var actualUrl = testableRemoteAttribute.InvokeGetUrl(context);

            // Assert
            Assert.Equal(url, actualUrl);

            var routeDictionary = Assert.IsType <RouteValueDictionary>(urlHelper.RouteValues);

            Assert.Equal(2, routeDictionary.Count);
            Assert.Equal("Action", routeDictionary["action"] as string);
            Assert.Equal("Controller", routeDictionary["controller"] as string);
        }
コード例 #12
0
        public void GetClientValidationRules_WithRoute_CallsUrlHelperWithExpectedValues()
        {
            // Arrange
            var routeName = "RouteName";
            var attribute = new RemoteAttribute(routeName);
            var url       = "/my/URL";
            var urlHelper = new MockUrlHelper(url, routeName);
            var context   = GetValidationContext(urlHelper);

            // Act & Assert
            var rule = Assert.Single(attribute.GetClientValidationRules(context));

            Assert.Equal("remote", rule.ValidationType);
            Assert.Equal("'Length' is invalid.", rule.ErrorMessage);

            Assert.Equal(2, rule.ValidationParameters.Count);
            Assert.Equal("*.Length", rule.ValidationParameters["additionalfields"]);
            Assert.Equal(url, rule.ValidationParameters["url"]);

            var routeDictionary = Assert.IsType <RouteValueDictionary>(urlHelper.RouteValues);

            Assert.Empty(routeDictionary);
        }
コード例 #13
0
        public void AddValidation_WithRoute_CallsUrlHelperWithExpectedValues()
        {
            // Arrange
            var routeName = "RouteName";
            var attribute = new RemoteAttribute(routeName);
            var url       = "/my/URL";
            var urlHelper = new MockUrlHelper(url, routeName);
            var context   = GetValidationContext(urlHelper);

            // Act
            attribute.AddValidation(context);

            // Assert
            Assert.Collection(
                context.Attributes,
                kvp => { Assert.Equal("data-val", kvp.Key); Assert.Equal("true", kvp.Value); },
                kvp => { Assert.Equal("data-val-remote", kvp.Key); Assert.Equal("'Length' is invalid.", kvp.Value); },
                kvp => { Assert.Equal("data-val-remote-additionalfields", kvp.Key); Assert.Equal("*.Length", kvp.Value); },
                kvp => { Assert.Equal("data-val-remote-url", kvp.Key); Assert.Equal(url, kvp.Value); });

            var routeDictionary = Assert.IsType <RouteValueDictionary>(urlHelper.RouteValues);

            Assert.Empty(routeDictionary);
        }
コード例 #14
0
    public void GetUrl_CallsUrlHelperWithExpectedValues()
    {
        // Arrange
        var testableAttribute = new TestablePageRemoteAttribute
        {
            PageName    = "Foo",
            PageHandler = "Bar"
        };

        var ambientValues = new RouteValueDictionary()
        {
            ["page"] = "/Foo"
        };

        var routeData = new RouteData(ambientValues)
        {
            Routers = { Mock.Of <IRouter>() }
        };

        var urlHelper = new MockUrlHelper(url: "/Foo?handler=Bar")
        {
            ActionContext = GetActionContext(new ServiceCollection().BuildServiceProvider(), routeData)
        };

        var validationContext = GetValidationContext(urlHelper);

        // Act
        testableAttribute.InvokeGetUrl(validationContext);

        // Assert
        var routeDictionary = Assert.IsType <RouteValueDictionary>(urlHelper.RouteValues);

        Assert.Equal(2, routeDictionary.Count);
        Assert.Equal("/Foo", routeDictionary["page"] as string);
        Assert.Equal("Bar", routeDictionary["handler"] as string);
    }
コード例 #15
0
        public void GetClientValidationRules_WithActionControllerArea_CallsUrlHelperWithExpectedValues()
        {
            // Arrange
            var attribute = new RemoteAttribute("Action", "Controller", "Test")
            {
                HttpMethod = "POST",
            };
            var url = "/Test/Controller/Action";
            var urlHelper = new MockUrlHelper(url, routeName: null);
            var context = GetValidationContext(urlHelper);

            // Act & Assert
            var rule = Assert.Single(attribute.GetClientValidationRules(context));
            Assert.Equal("remote", rule.ValidationType);
            Assert.Equal("'Length' is invalid.", rule.ErrorMessage);

            Assert.Equal(3, rule.ValidationParameters.Count);
            Assert.Equal("*.Length", rule.ValidationParameters["additionalfields"]);
            Assert.Equal("POST", rule.ValidationParameters["type"]);
            Assert.Equal(url, rule.ValidationParameters["url"]);

            var routeDictionary = Assert.IsType<RouteValueDictionary>(urlHelper.RouteValues);
            Assert.Equal(3, routeDictionary.Count);
            Assert.Equal("Action", routeDictionary["action"] as string);
            Assert.Equal("Controller", routeDictionary["controller"] as string);
            Assert.Equal("Test", routeDictionary["area"] as string);
        }
コード例 #16
0
        public void GetClientValidationRules_WithRoute_CallsUrlHelperWithExpectedValues()
        {
            // Arrange
            var routeName = "RouteName";
            var attribute = new RemoteAttribute(routeName);
            var url = "/my/URL";
            var urlHelper = new MockUrlHelper(url, routeName);
            var context = GetValidationContext(urlHelper);

            // Act & Assert
            var rule = Assert.Single(attribute.GetClientValidationRules(context));
            Assert.Equal("remote", rule.ValidationType);
            Assert.Equal("'Length' is invalid.", rule.ErrorMessage);

            Assert.Equal(2, rule.ValidationParameters.Count);
            Assert.Equal("*.Length", rule.ValidationParameters["additionalfields"]);
            Assert.Equal(url, rule.ValidationParameters["url"]);

            var routeDictionary = Assert.IsType<RouteValueDictionary>(urlHelper.RouteValues);
            Assert.Empty(routeDictionary);
        }
コード例 #17
0
        private static ClientModelValidationContext GetValidationContext(string url)
        {
            var urlHelper = new MockUrlHelper(url, routeName: null);

            return(GetValidationContext(urlHelper));
        }
コード例 #18
0
ファイル: RemoteAttributeTest.cs プロジェクト: ymd1223/Mvc
 private static ClientModelValidationContext GetValidationContext(
     string url,
     IModelMetadataProvider metadataProvider = null)
 {
     var urlHelper = new MockUrlHelper(url, routeName: null);
     return GetValidationContext(urlHelper, localizerFactory: null, metadataProvider: metadataProvider);
 }
コード例 #19
0
ファイル: RemoteAttributeTest.cs プロジェクト: ymd1223/Mvc
        public void AddValidation_WithRoute_CallsUrlHelperWithExpectedValues()
        {
            // Arrange
            var routeName = "RouteName";
            var attribute = new RemoteAttribute(routeName);
            var url = "/my/URL";
            var urlHelper = new MockUrlHelper(url, routeName);
            var context = GetValidationContext(urlHelper);

            // Act
            attribute.AddValidation(context);

            // Assert
            Assert.Collection(
                context.Attributes,
                kvp => { Assert.Equal("data-val", kvp.Key); Assert.Equal("true", kvp.Value); },
                kvp => { Assert.Equal("data-val-remote", kvp.Key); Assert.Equal("'Length' is invalid.", kvp.Value); },
                kvp => { Assert.Equal("data-val-remote-additionalfields", kvp.Key); Assert.Equal("*.Length", kvp.Value); },
                kvp => { Assert.Equal("data-val-remote-url", kvp.Key); Assert.Equal(url, kvp.Value); });

            var routeDictionary = Assert.IsType<RouteValueDictionary>(urlHelper.RouteValues);
            Assert.Empty(routeDictionary);
        }
コード例 #20
0
ファイル: RemoteAttributeTest.cs プロジェクト: ymd1223/Mvc
        public void AddValidation_WithActionController_PropertiesSet_CallsUrlHelperWithExpectedValues()
        {
            // Arrange
            var attribute = new RemoteAttribute("Action", "Controller")
            {
                HttpMethod = "POST",
                AdditionalFields = "Password,ConfirmPassword",
            };
            var url = "/Controller/Action";
            var urlHelper = new MockUrlHelper(url, routeName: null);
            var context = GetValidationContext(urlHelper);

            // Act
            attribute.AddValidation(context);

            // Assert
            Assert.Collection(
                context.Attributes,
                kvp => { Assert.Equal("data-val", kvp.Key); Assert.Equal("true", kvp.Value); },
                kvp => { Assert.Equal("data-val-remote", kvp.Key); Assert.Equal("'Length' is invalid.", kvp.Value); },
                kvp =>
                {
                    Assert.Equal("data-val-remote-additionalfields", kvp.Key);
                    Assert.Equal("*.Length,*.Password,*.ConfirmPassword", kvp.Value);
                },
                kvp => { Assert.Equal("data-val-remote-type", kvp.Key); Assert.Equal("POST", kvp.Value); },
                kvp => { Assert.Equal("data-val-remote-url", kvp.Key); Assert.Equal(url, kvp.Value); });

            var routeDictionary = Assert.IsType<RouteValueDictionary>(urlHelper.RouteValues);
            Assert.Equal(2, routeDictionary.Count);
            Assert.Equal("Action", routeDictionary["action"] as string);
            Assert.Equal("Controller", routeDictionary["controller"] as string);
        }
コード例 #21
0
ファイル: RemoteAttributeTest.cs プロジェクト: ymd1223/Mvc
 private static ClientModelValidationContext GetValidationContextWithLocalizerFactory(
     string url,
     IModelMetadataProvider metadataProvider = null)
 {
     var urlHelper = new MockUrlHelper(url, routeName: null);
     var localizerFactory = new Mock<IStringLocalizerFactory>(MockBehavior.Strict);
     return GetValidationContext(urlHelper, localizerFactory.Object, metadataProvider);
 }