public void CultureBasedActionAttribute_OnActionExecutingWithDefaultCulture_RedirectsToDefaultCultureAction(
            string language,
            string culture,
            ActionExecutingContext actionExecutingContext)
        {
            // Arrange
            var cultureBasedActionAttribute = new CultureBasedActionAttribute
            {
                DefaultCulture = string.Format("{0}-{1}",
                                               language.Replace("-", string.Empty),
                                               culture.Replace("-", string.Empty))
            };

            // Act
            cultureBasedActionAttribute.OnActionExecuting(actionExecutingContext);

            // Assert
            Assert.NotNull(actionExecutingContext.Result);
            Assert.IsType(typeof(RedirectToRouteResult), actionExecutingContext.Result);
            Assert.Equal(2, ((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues.Count);
            Assert.True(((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues.ContainsKey(CultureBasedActionAttribute.LanguageUrlParameter));
            Assert.True(((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues.ContainsKey(CultureBasedActionAttribute.CultureUrlParameter));
            Assert.Equal(((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues[CultureBasedActionAttribute.LanguageUrlParameter], language.Replace("-", string.Empty));
            Assert.Equal(((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues[CultureBasedActionAttribute.CultureUrlParameter], culture.Replace("-", string.Empty));
        }
        public void CultureBasedActionAttribute_OnActionExecutingWithoutControllerBase_Succeeds()
        {
            // Arrange
            var cultureBasedActionAttribute = new CultureBasedActionAttribute();
            var actionExecutingContext      = new ActionExecutingContext();

            // Act
            cultureBasedActionAttribute.OnActionExecuting(actionExecutingContext);

            // Assert
            Assert.Null(actionExecutingContext.Result);
        }
        public void CultureBasedActionAttribute_OnActionExecutingWithValidCulture_Succeeds(
            ActionExecutingContext actionExecutingContext)
        {
            // Arrange
            var splitCulture = Thread.CurrentThread.CurrentUICulture.Name.Split('-');

            actionExecutingContext.Controller.ControllerContext.RouteData.Values[CultureBasedActionAttribute.LanguageUrlParameter] = splitCulture[0];
            actionExecutingContext.Controller.ControllerContext.RouteData.Values[CultureBasedActionAttribute.CultureUrlParameter]  = splitCulture[1];
            var cultureBasedActionAttribute = new CultureBasedActionAttribute();

            // Act
            cultureBasedActionAttribute.OnActionExecuting(actionExecutingContext);

            // Assert
            Assert.Null(actionExecutingContext.Result);
        }
        public void CultureBasedActionAttribute_OnActionExecutingWithNoCulture_RedirectsToCurrentThreadCultureAction(
            ActionExecutingContext actionExecutingContext)
        {
            // Arrange
            var splitCulture = Thread.CurrentThread.CurrentUICulture.Name.Split('-');
            var cultureBasedActionAttribute = new CultureBasedActionAttribute();

            // Act
            cultureBasedActionAttribute.OnActionExecuting(actionExecutingContext);

            // Assert
            Assert.NotNull(actionExecutingContext.Result);
            Assert.IsType(typeof(RedirectToRouteResult), actionExecutingContext.Result);
            Assert.Equal(2, ((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues.Count);
            Assert.True(((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues.ContainsKey(CultureBasedActionAttribute.LanguageUrlParameter));
            Assert.True(((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues.ContainsKey(CultureBasedActionAttribute.CultureUrlParameter));
            Assert.Equal(((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues[CultureBasedActionAttribute.LanguageUrlParameter], splitCulture[0]);
            Assert.Equal(((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues[CultureBasedActionAttribute.CultureUrlParameter], splitCulture[1]);
        }
        public void CultureBasedActionAttribute_OnActionExecutingWithUserLanguages_RedirectsToUserLanguageCultureAction(
            string language,
            string culture,
            ActionExecutingContext actionExecutingContext)
        {
            // Arrange
            A.CallTo(() => actionExecutingContext.RequestContext.HttpContext.Request.UserLanguages)
            .Returns(new[] { string.Format("{0}-{1}", language.Replace("-", string.Empty), culture.Replace("-", string.Empty)) });
            var cultureBasedActionAttribute = new CultureBasedActionAttribute();

            // Act
            cultureBasedActionAttribute.OnActionExecuting(actionExecutingContext);

            // Assert
            Assert.NotNull(actionExecutingContext.Result);
            Assert.IsType(typeof(RedirectToRouteResult), actionExecutingContext.Result);
            Assert.Equal(2, ((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues.Count);
            Assert.True(((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues.ContainsKey(CultureBasedActionAttribute.LanguageUrlParameter));
            Assert.True(((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues.ContainsKey(CultureBasedActionAttribute.CultureUrlParameter));
            Assert.Equal(((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues[CultureBasedActionAttribute.LanguageUrlParameter], language.Replace("-", string.Empty));
            Assert.Equal(((RedirectToRouteResult)(actionExecutingContext.Result)).RouteValues[CultureBasedActionAttribute.CultureUrlParameter], culture.Replace("-", string.Empty));
        }