public void BuilderTest_CallContextWithoutSetup_ThrowsException()
 {
     // reset context - this is not a good style, yes I know
     // but test is for ensuring static type behavior
     FeatureContext.SetInstance(null);
     Assert.Throws <InvalidOperationException>(() => FeatureContext.IsEnabled <MySampleFeature>());
 }
Пример #2
0
        public void IsEnabledCallsAllToggles([Frozen] IFeatureToggleProvider toggleProvider, IFeature feature,
            Fixture fixture, FeatureContext sut)
        {
            var featureToggles = fixture.CreateMany<Fake<IFeatureToggle>>().ToList();
            foreach (Fake<IFeatureToggle> fake in featureToggles)
            {
                fake.CallsTo(ft => ft.IsEnabled(feature))
                    .Returns(null);
            }
            var finalTogle = A.Fake<Fake<IFeatureToggle>>();
            finalTogle.CallsTo(ft => ft.IsEnabled(feature))
                .Returns(true);
            featureToggles.Add(finalTogle);

            A.CallTo(() => toggleProvider.GetFeatureToggles())
                .Returns(featureToggles.Select(f => f.FakedObject));

            sut.IsEnabled(feature);

            foreach (Fake<IFeatureToggle> fake in featureToggles)
            {
                fake.CallsTo(ft => ft.IsEnabled(feature))
                    .MustHaveHappened();
            }
        }
Пример #3
0
        public void IsEnabledCallsAllToggles([Frozen] IFeatureTogglerSource togglerSource, IFeature feature,
                                             Fixture fixture, FeatureContext sut)
        {
            var featureToggles = fixture.CreateMany <Fake <IFeatureToggler> >().ToList();

            foreach (Fake <IFeatureToggler> fake in featureToggles)
            {
                fake.CallsTo(ft => ft.IsEnabled(sut, feature))
                .Returns(null);
            }
            var finalTogle = A.Fake <Fake <IFeatureToggler> >();

            finalTogle.CallsTo(ft => ft.IsEnabled(sut, feature))
            .Returns(true);
            featureToggles.Add(finalTogle);

            A.CallTo(() => togglerSource.GetFeatureToggles())
            .Returns(featureToggles.Select(f => f.FakedObject));

            sut.IsEnabled(feature);

            foreach (Fake <IFeatureToggler> fake in featureToggles)
            {
                fake.CallsTo(ft => ft.IsEnabled(sut, feature))
                .MustHaveHappened();
            }
        }
Пример #4
0
        public virtual ActionResult Login(LoginModel model, string returnUrl)
        {
            if (FeatureContext.IsEnabled <UseCaptcha>())
            {
                var recaptchaHelper = this.GetRecaptchaVerificationHelper();
                if (String.IsNullOrEmpty(recaptchaHelper.Response))
                {
                    ModelState.AddModelError("", "Captcha answer cannot be empty.");
                    return(View(MVC.Account.Views.Login, model));
                }
                var recaptchaResult = recaptchaHelper.VerifyRecaptchaResponse();
                if (recaptchaResult != RecaptchaVerificationResult.Success)
                {
                    ModelState.AddModelError("", "Incorrect captcha answer.");
                }
            }

            if (ModelState.IsValid)
            {
                var result = signInManager.PasswordSignIn(model.UserName, model.Password, model.RememberMe, shouldLockout: false);

                if (result == SignInStatus.Success)
                {
                    return(RedirectToLocal(returnUrl));
                }
                ModelState.AddModelError("",
                                         result == SignInStatus.LockedOut
                        ? $"Account disabled until {signInManager.UserManager.FindByName(model.UserName).LockoutEndDateUtc} UTC."
                        : "Invalid username or password.");
            }

            // If we got this far, something failed, redisplay form
            return(View(MVC.Account.Views.Login, model));
        }
        public void BuilderTest_FeatureWithStrategiesSameOrder_IsEnabledThrows()
        {
            var builder   = new FeatureSetBuilder();
            var container = builder.Build(context => context.AddFeature <FeatureWithSameOrderStrategy>());

            Assert.Throws <ConfigurationErrorsException>(() => FeatureContext.IsEnabled <FeatureWithSameOrderStrategy>());
        }
Пример #6
0
        public void IsEnabledCallsGetsFeatureToggles([Frozen] IFeatureTogglerSource togglerSource, IFeature feature,
                                                     FeatureContext sut)
        {
            Ignore.Exception <FeatureStateNotFoundException, bool>(() => sut.IsEnabled(feature));

            A.CallTo(() => togglerSource.GetFeatureToggles())
            .MustHaveHappened();
        }
Пример #7
0
        public void IsEnabledCallsGetsFeatureToggles([Frozen] IFeatureToggleProvider toggleProvider, IFeature feature,
            FeatureContext sut)
        {
            Ignore.Exception<FeatureStateNotFoundException, bool>(() => sut.IsEnabled(feature));

            A.CallTo(() => toggleProvider.GetFeatureToggles())
                .MustHaveHappened();
        }
Пример #8
0
        public override object GetData(ITabContext context)
        {
            var features = FeatureContext.GetFeatures();
            var vm       = features.Select(f => new
            {
                Enabled = FeatureContext.IsEnabled(f),
                Name    = f.Name + " (" + f.GetType().FullName + ")"
            }).ToList();

            return(vm);
        }
Пример #9
0
        protected void OnFeaturesRepeaterItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            var stateControl = e.Item.FindControl("chkEnabled") as CheckBox;
            var feature      = e.Item.DataItem as BaseFeature;

            if (stateControl != null && feature != null)
            {
                stateControl.Enabled = feature.CanModify;
                stateControl.Checked = FeatureContext.IsEnabled(feature.GetType());
                stateControl.InputAttributes["value"] = feature.GetType().FullName;
            }
        }
Пример #10
0
        private static IResourceResult GenerateResponse()
        {
            var features = FeatureContext.GetFeatures();
            var vm       = features.Select(f => new
            {
                Enabled = FeatureContext.IsEnabled(f),
                f.Name,
                f.CanModify,
                f.GetType().FullName
            }).ToList();

            return(new JsonResourceResult(vm));
        }
Пример #11
0
        public void IsEnabledCallsIsEnabledOnToggle([Frozen] IFeatureToggleProvider toggleProvider, IFeature feature,
            IFeatureToggle featureToggle, bool expected, FeatureContext sut)
        {
            A.CallTo(() => featureToggle.IsEnabled(feature))
                .Returns(expected);
            A.CallTo(() => toggleProvider.GetFeatureToggles())
                .Returns(new[] {featureToggle});

            bool result = sut.IsEnabled(feature);

            A.CallTo(() => featureToggle.IsEnabled(feature))
                .MustHaveHappened();
            Assert.Equal(expected, result);
        }
Пример #12
0
        public void IsEnabledCallsIsEnabledOnToggle([Frozen] IFeatureTogglerSource togglerSource, IFeature feature,
                                                    IFeatureToggler featureToggler, bool expected, FeatureContext sut)
        {
            A.CallTo(() => featureToggler.IsEnabled(sut, feature))
            .Returns(expected);
            A.CallTo(() => togglerSource.GetFeatureToggles())
            .Returns(new[] { featureToggler });

            bool result = sut.IsEnabled(feature);

            A.CallTo(() => featureToggler.IsEnabled(sut, feature))
            .MustHaveHappened();
            Assert.Equal(expected, result);
        }
Пример #13
0
        public void IsEnabledUsesFirstToggleProviderResult([Frozen] IFeatureTogglerSource togglerSource,
                                                           IFeature feature, IFeatureToggler skippedToggler, IFeatureToggler enabledToggler, IFeatureToggler endToggler,
                                                           bool expected, FeatureContext sut)
        {
            A.CallTo(() => enabledToggler.IsEnabled(sut, feature))
            .Returns(expected);
            A.CallTo(() => togglerSource.GetFeatureToggles())
            .Returns(new[] { skippedToggler, enabledToggler, endToggler });

            bool result = sut.IsEnabled(feature);

            Assert.Equal(expected, result);
            A.CallTo(() => endToggler.IsEnabled(sut, feature))
            .MustNotHaveHappened();
        }
Пример #14
0
        public void ChangeState_AllWritableStrategiesSynced()
        {
            var builder   = new FeatureSetBuilder();
            var container = builder.Build(ctx =>
            {
                ctx.AddFeature <MySampleFeatureWithMultipleWritableStrategies>();

                ctx.ForStrategy <WritableHashMapStrategyAttribute>().Use <WritableHashtableStrategy>();
                ctx.ForStrategy <WritableHashMapStrategy2Attribute>().Use <WritableHashtable2Strategy>();
            });

            FeatureContext.Enable <MySampleFeatureWithMultipleWritableStrategies>();

            Assert.True(FeatureContext.IsEnabled <MySampleFeatureWithMultipleWritableStrategies>());

            // TODO:
            //Assert.True(container.IsEnabled<MySampleFeatureWithMultipleWritableStrategies>(typeof(WritableHashtableStrategy)));
            //Assert.True(container.IsEnabled<MySampleFeatureWithMultipleWritableStrategies>(typeof(WritableHashtable2Strategy)));
        }
Пример #15
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            if (FeatureContext.IsEnabled <ChatV2>())
            {
                routes.MapRoute("Chat", "chat", MVC.Chat.Index());
            }

            routes.MapRoute("ChatRoom", "chat/rooms/{room}", MVC.Chat.Index(null).AddRouteValue("room", UrlParameter.Optional));

            routes.MapRoute("Home", "", MVC.PvP.Play().AddRouteValue("id", UrlParameter.Optional));

            // Not using T4MVC on this route because there is no Index() in PvP
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "pvp", action = "index", area = "", id = UrlParameter.Optional }
                );
        }
Пример #16
0
        public virtual ActionResult SubmitCaptcha()
        {
            var myMembershipId = User.Identity.GetUserId();
            var me             = PlayerProcedures.GetPlayerFromMembership(myMembershipId);

            if (FeatureContext.IsEnabled <UseCaptcha>() && DomainRegistry.Repository.FindSingle(new UserCaptchaIsExpired {
                UserId = me.MembershipId
            }))
            {
                var recaptchaHelper = this.GetRecaptchaVerificationHelper();
                if (String.IsNullOrEmpty(recaptchaHelper.Response))
                {
                    TempData["Error"] = "You must correctly answer the captcha in order to do this.";
                    return(RedirectToAction(MVC.PvP.Play()));
                }
                var recaptchaResult = recaptchaHelper.VerifyRecaptchaResponse();
                if (recaptchaResult != RecaptchaVerificationResult.Success)
                {
                    DomainRegistry.Repository.Execute(new UpdateCaptchaEntry
                    {
                        UserId         = me.MembershipId,
                        AddFailAttempt = true,
                        AddPassAttempt = false
                    });

                    TempData["Error"] = "Captcha incorrect.  Please try again.";
                    return(RedirectToAction(MVC.PvP.Play()));
                }
                else if (recaptchaResult == RecaptchaVerificationResult.Success)
                {
                    DomainRegistry.Repository.Execute(new UpdateCaptchaEntry
                    {
                        UserId         = me.MembershipId,
                        AddFailAttempt = false,
                        AddPassAttempt = true
                    });
                }
            }
            TempData["Result"] = "Captcha successfully submitted!  You will not be prompted to do this again for a while.";
            return(RedirectToAction(MVC.PvP.Play()));
        }
        public void BuilderTest_MultipleFeaturesSameStrategy_NoCollisionsInState()
        {
            var builder   = new FeatureSetBuilder();
            var container = builder.Build(ctx =>
            {
                ctx.AddFeature <MyWritableFeatureSingleStrategy>();
                ctx.AddFeature <MyWritableAnotherFeatureSingleStrategy>();
                ctx.ForStrategy <WritableStrategy>().Use <WritableStrategyImpl>();
            });

            FeatureContext.Enable <MyWritableAnotherFeatureSingleStrategy>();

            Assert.False(FeatureContext.IsEnabled <MyWritableFeatureSingleStrategy>());
            Assert.True(FeatureContext.IsEnabled <MyWritableAnotherFeatureSingleStrategy>());

            FeatureContext.Enable <MyWritableFeatureSingleStrategy>();
            FeatureContext.Disable <MyWritableAnotherFeatureSingleStrategy>();

            Assert.True(FeatureContext.IsEnabled <MyWritableFeatureSingleStrategy>());
            Assert.False(FeatureContext.IsEnabled <MyWritableAnotherFeatureSingleStrategy>());
        }
Пример #18
0
        public virtual ActionResult Register(RegisterModel model)
        {
            if (FeatureContext.IsEnabled <UseCaptcha>())
            {
                var recaptchaHelper = this.GetRecaptchaVerificationHelper();
                if (String.IsNullOrEmpty(recaptchaHelper.Response))
                {
                    ModelState.AddModelError("", "Captcha answer cannot be empty.");
                    return(View(MVC.Account.Views.Register, model));
                }
                var recaptchaResult = recaptchaHelper.VerifyRecaptchaResponse();
                if (recaptchaResult != RecaptchaVerificationResult.Success)
                {
                    ModelState.AddModelError("", "Incorrect captcha answer.");
                }
            }


            if (ModelState.IsValid)
            {
                var user = new User {
                    UserName = model.UserName?.Trim(), Email = model.Email?.Trim(), CreateDate = DateTime.Now
                };
                var result = userManager.Create(user, model.Password);
                if (result.Succeeded)
                {
                    signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);
                    return(RedirectToAction(MVC.PvP.Play()));
                }
                else
                {
                    AddErrors(result);
                }
            }

            // If we got this far, something failed, redisplay form
            return(View(MVC.Account.Views.Register, model));
        }
Пример #19
0
        public void IsEnabledThrowsWhenNoToggleProviderHasState(IFeature feature, FeatureContext sut)
        {
            var exception = Assert.Throws <FeatureStateNotFoundException>(() => sut.IsEnabled(feature));

            Assert.Same(feature, exception.Feature);
        }
Пример #20
0
        public void IsEnabledUsesFirstToggleProviderResult([Frozen] IFeatureToggleProvider toggleProvider,
            IFeature feature, IFeatureToggle skippedToggle, IFeatureToggle enabledToggle, IFeatureToggle endToggle,
            bool expected, FeatureContext sut)
        {
            A.CallTo(() => enabledToggle.IsEnabled(feature))
                .Returns(expected);
            A.CallTo(() => toggleProvider.GetFeatureToggles())
                .Returns(new[] {skippedToggle, enabledToggle, endToggle});

            bool result = sut.IsEnabled(feature);

            Assert.Equal(expected, result);
            A.CallTo(() => endToggle.IsEnabled(feature))
                .MustNotHaveHappened();
        }
Пример #21
0
 public virtual ActionResult Index(string room)
 {
     return(FeatureContext.IsEnabled <ChatV2>() ? ChatV2() : ChatV1(room));
 }
Пример #22
0
        public void IsEnabledThrowsWhenNoToggleProviderHasState(IFeature feature, FeatureContext sut)
        {
            var exception = Assert.Throws<FeatureStateNotFoundException>(() => sut.IsEnabled(feature));

            Assert.Same(feature, exception.Feature);
        }
Пример #23
0
 public void IsEnabledThrowsWhenGivenNullFeature(FeatureContext sut)
 {
     Assert.Throws<ArgumentNullException>(() => sut.IsEnabled(feature: null));
 }
Пример #24
0
 public void IsEnabledThrowsWhenGivenNullFeature(FeatureContext sut)
 {
     Assert.Throws <ArgumentNullException>(() => sut.IsEnabled(feature: null));
 }
Пример #25
0
 private static IHtmlString Render(Type feature, string tagFormat, string[] paths)
 {
     return(!FeatureContext.IsEnabled(feature) ? System.Web.Optimization.Styles.RenderFormat(tagFormat, paths) : BundleRenderer.Render(paths, tagFormat));
 }
Пример #26
0
 public static IHtmlString RenderIfFormat <T>(string tagFromat, params string[] paths) where T : BaseFeature
 {
     return(FeatureContext.IsEnabled(typeof(T)) ? Render(typeof(T), tagFromat, paths) : new HtmlString(string.Empty));
 }