예제 #1
0
        public void user_doesnt_have_a_plan_throws_error()
        {
            var testUser = new AppUser(new AspNetUser()
            {
                Id                 = Guid.NewGuid().ToString(),
                BillingOn          = DateTime.Now,
                MyShopifyDomain    = "store1.myshopify.com",
                ShopifyChargeId    = 1,
                Email              = "*****@*****.**",
                PlanId             = null,
                UserName           = "******",
                ShopifyAccessToken = "thetoken"
            }, false);

            //mock user caching
            var userCache = new Mock <IUserCaching>();

            userCache.Setup(x => x.GetLoggedOnUser(It.IsAny <bool>())).Returns(Task.FromResult(testUser));

            var planReader = new Mock <IPlansReader>();

            RequiresPlan obj     = new RequiresPlan(userCache.Object, planReader.Object, realSettingsReader, mockLogger.Object, 1, "HasThis", "yes");
            var          authCtx = _GetMockAuthrizationContext();
            var          ex      = Assert.Throws <Exception>(() => obj.OnAuthorization(authCtx));

            userCache.Verify(x => x.GetLoggedOnUser(It.IsAny <bool>()), Times.Exactly(1));
            Assert.Equal("Your account is not associated with any valid plan.Contact Support.", ex.Message);
        }
예제 #2
0
        public void user_has_required_plan_id_x_but_db_doesn_not_have_it_anymore_thorws_error()
        {
            //requires plan id 1 and user has 1 but it doesnt exist in the DB anymore
            var reqPlanId = 1;
            var testUser  = new AppUser(new AspNetUser()
            {
                Id                 = Guid.NewGuid().ToString(),
                BillingOn          = DateTime.Now,
                MyShopifyDomain    = "store1.myshopify.com",
                ShopifyChargeId    = 1,
                Email              = "*****@*****.**",
                PlanId             = reqPlanId,
                UserName           = "******",
                ShopifyAccessToken = "thetoken"
            }, false);

            //mock user caching
            var userCache = new Mock <IUserCaching>();

            userCache.Setup(x => x.GetLoggedOnUser(It.IsAny <bool>())).Returns(Task.FromResult(testUser));

            var planReader = new Mock <IPlansReader>();

            planReader.Setup(x => x[It.IsAny <int>()]).Returns((PlanAppModel)null);

            //requires plan id 1

            RequiresPlan obj     = new RequiresPlan(userCache.Object, planReader.Object, realSettingsReader, mockLogger.Object, reqPlanId, "HasThis", "yes");
            var          authCtx = _GetMockAuthrizationContext();
            var          ex      = Assert.Throws <Exception>(() => obj.OnAuthorization(authCtx));

            Assert.Equal($"Current user '{testUser.MyShopifyDomain}' plan id ='{testUser.PlanId.Value}' is not found in the loaded plans list.", ex.Message);
            userCache.Verify(x => x.GetLoggedOnUser(It.IsAny <bool>()), Times.Exactly(1));
        }
예제 #3
0
        public void user_has_right_plan_wrong_option_value_should_redirect()
        {
            var reqPlanId   = 1;
            var optionName  = "HasThis";
            var optionValue = "Yes";
            var testUser    = new AppUser(new AspNetUser()
            {
                Id                 = Guid.NewGuid().ToString(),
                BillingOn          = DateTime.Now,
                MyShopifyDomain    = "store1.myshopify.com",
                ShopifyChargeId    = 1,
                Email              = "*****@*****.**",
                PlanId             = reqPlanId,
                UserName           = "******",
                ShopifyAccessToken = "thetoken"
            }, false);

            //mock user caching
            var userCache = new Mock <IUserCaching>();

            userCache.Setup(x => x.GetLoggedOnUser(It.IsAny <bool>())).Returns(Task.FromResult(testUser));

            var plan = new PlanAppModel(new Plan()
            {
                Id = reqPlanId
            });
            var def = new PlanDefinitionAppModel(new PlanDefinition()
            {
                OptionName  = optionName,
                OptionValue = "wrong value",
                PlanId      = plan.Id
            });
            var planReader = new Mock <IPlansReader>();

            planReader.Setup(x => x[It.IsAny <int>()]).Returns(plan);
            planReader.Setup(x => x[It.IsAny <int>(), It.IsAny <string>()]).Returns(def);

            //requires plan id 1

            RequiresPlan obj     = new RequiresPlan(userCache.Object, planReader.Object, realSettingsReader, mockLogger.Object, reqPlanId, optionName, optionValue);
            var          authCtx = _GetMockAuthrizationContext();

            obj.OnAuthorization(authCtx);
            userCache.Verify(x => x.GetLoggedOnUser(It.IsAny <bool>()), Times.Exactly(1));
            planReader.VerifyAll();
            Assert.IsType <RedirectToRouteResult>(authCtx.Result);
            var route      = (RedirectToRouteResult)authCtx.Result;
            var controller = route.RouteValues["controller"];
            var action     = route.RouteValues["action"];

            Assert.Equal(realSettingsReader.GetAppDashboardControllerName(), controller);
            Assert.Equal(DASHBOARD_ACTIONS.PlanDoesNotAllow.ToString(), action);
        }
예제 #4
0
        public void user_has_right_plan_and_option_should_pass()
        {
            var reqPlanId   = 1;
            var optionName  = "HasThis";
            var optionValue = "Yes";
            var testUser    = new AppUser(new AspNetUser()
            {
                Id                 = Guid.NewGuid().ToString(),
                BillingOn          = DateTime.Now,
                MyShopifyDomain    = "store1.myshopify.com",
                ShopifyChargeId    = 1,
                Email              = "*****@*****.**",
                PlanId             = reqPlanId,
                UserName           = "******",
                ShopifyAccessToken = "thetoken"
            }, false);

            //mock user caching
            var userCache = new Mock <IUserCaching>();

            userCache.Setup(x => x.GetLoggedOnUser(It.IsAny <bool>())).Returns(Task.FromResult(testUser));

            var plan = new PlanAppModel(new Plan()
            {
                Id = reqPlanId
            });
            var def = new PlanDefinitionAppModel(new PlanDefinition()
            {
                OptionName  = optionName,
                OptionValue = optionValue,
                PlanId      = plan.Id
            });
            var planReader = new Mock <IPlansReader>();

            planReader.Setup(x => x[It.IsAny <int>()]).Returns(plan);
            planReader.Setup(x => x[It.IsAny <int>(), It.IsAny <string>()]).Returns(def);

            //requires plan id 1

            RequiresPlan obj     = new RequiresPlan(userCache.Object, planReader.Object, realSettingsReader, mockLogger.Object, reqPlanId, optionName, optionValue);
            var          authCtx = _GetMockAuthrizationContext();

            obj.OnAuthorization(authCtx);
            userCache.Verify(x => x.GetLoggedOnUser(It.IsAny <bool>()), Times.Exactly(1));
            planReader.VerifyAll();
            Assert.Null(authCtx.Result);
        }
예제 #5
0
        public void user_doesnt_have_required_plan_id_should_redirect()
        {
            //requires plan id 1 but user has 5
            var testUser = new AppUser(new AspNetUser()
            {
                Id                 = Guid.NewGuid().ToString(),
                BillingOn          = DateTime.Now,
                MyShopifyDomain    = "store1.myshopify.com",
                ShopifyChargeId    = 1,
                Email              = "*****@*****.**",
                PlanId             = 5,
                UserName           = "******",
                ShopifyAccessToken = "thetoken"
            }, false);

            //mock user caching
            var userCache = new Mock <IUserCaching>();

            userCache.Setup(x => x.GetLoggedOnUser(It.IsAny <bool>())).Returns(Task.FromResult(testUser));

            var planReader = new Mock <IPlansReader>();

            planReader.Setup(x => x[It.IsAny <int>()]).Returns(new PlanAppModel()
            {
                IsDev = false
            });

            //requires plan id 1
            RequiresPlan obj     = new RequiresPlan(userCache.Object, planReader.Object, realSettingsReader, mockLogger.Object, 1, "HasThis", "yes");
            var          authCtx = _GetMockAuthrizationContext();

            obj.OnAuthorization(authCtx);
            var result = authCtx.Result;

            userCache.VerifyAll();
            Assert.IsType <RedirectToRouteResult>(result);
            var route      = (RedirectToRouteResult)result;
            var controller = route.RouteValues["controller"];
            var action     = route.RouteValues["action"];

            Assert.Equal(realSettingsReader.GetAppDashboardControllerName(), controller);
            Assert.Equal(DASHBOARD_ACTIONS.PlanDoesNotAllow.ToString(), action);
        }