예제 #1
0
        public void ProcessOrder(IEnumerable <IItem> items)
        {
            foreach (IItem item in items)
            {
                IRule rule;
                switch (item.ProductType)
                {
                case (int)ProductTypeEnum.Book:
                    rule = new ProductRule(item);
                    break;

                case (int)ProductTypeEnum.Video:
                    rule = new ProductRule(item);
                    break;

                case (int)ProductTypeEnum.Subscription:
                    rule = new MembershipRule(item);
                    break;

                default:
                    rule = null;
                    break;
                }

                if (rule != null)
                {
                    rule.CompleteRule();
                }
            }
        }
        public virtual int GetComprehensionScore(MembershipRule rule, Auth0User user)
        {
            if (user == null)
            {
                return(0);
            }
            var memberLink =
                user.MemberAuth0Users
                .SingleOrDefault(
                    m => m.Member.OrganisationId == rule.MembershipRuleSection.ShurahBasedOrganisationId);
            var users = new List <Auth0User> {
                user
            };

            if (memberLink != null)
            {
                users.AddRange(memberLink.Member.MemberAuth0Users.Select(m => m.Auth0User));
            }
            return(users.SelectMany(u => u.MembershipRuleComprehensionTestResults)
                   .Where(t => t.MembershipRuleComprehensionQuestion.MembershipRuleId == rule.Id)
                   .Where(t => t.CorrectlyAnswered)
                   .Where(t => t.AnsweredDateTimeUtc > rule.PublishedDateTimeUtc)
                   .GroupBy(x => x.MembershipRuleComprehensionQuestionId).Count());


            //var correctAnswers=_dependencies.StorageService.SetOf<MembershipRuleComprehensionTestResult>()
            //    .Where(r => r.MembershipRuleComprehensionQuestion.MembershipRuleId == rule.Id
            //                && ids.Contains(r.Auuth0UserId)
            //                && r.CorrectlyAnswered
            //                && r.StartedDateTimeUtc>rule.PublishedDateTimeUtc)
            //                .GroupBy(x=>x.MembershipRuleComprehensionQuestionId).Count();
            //return correctAnswers;
        }
예제 #3
0
        public void CreateDiscoveries()
        {
            Discovery discovery = new Discovery()
            {
                ID              = string.Format("ds.{0}", releationShipTypeId),
                Enabled         = true,
                Target          = parentid,
                Category        = "Discovery",
                ConfirmDelivery = false,
                Remotable       = true,
                Priority        = "Normal",
                DataSource      = new DataSource()
                {
                    ID              = "DS",
                    TypeID          = "SC!Microsoft.SystemCenter.GroupPopulator",
                    RuleId          = "$MPElement$",
                    GroupInstanceId = "$Target/Id$"
                }
            };

            MembershipRule rule = new MembershipRule()
            {
                MonitoringClass   = string.Format("$MPElement[Name=\"{0}\"]$", parentid),
                RelationshipClass = string.Format("$MPElement[Name=\"{0}\"]$", releationShipTypeId)
            };

            discovery.DataSource.MembershipRules.Add(rule);
        }
                    public void PropertiesAreCorrectlyBuiltForTheRule()
                    {
                        MethodToTest(() => service.BuildMembershipRuleResource(A <string> .Ignored,
                                                                               A <Auth0User> .Ignored, A <MembershipRule> .Ignored, A <int> .Ignored, A <IEnumerable <MembershipRuleTermDefinition> > .Ignored));

                        var prefix = "1.2.3.";
                        var index  = 7;
                        var rule   = new MembershipRule
                        {
                            RuleStatement = "some statement",
                            Id            = 67,
                            //       Explanation = new MembershipRuleExplanation { ExplanationUrl = "someurl"},
                            MembershipRuleComprehensionQuestions = new List <MembershipRuleComprehensionQuestion>(),
                            PublishedDateTimeUtc = DateTime.UtcNow
                        };
                        var user      = new Auth0User();
                        var fragments = new List <TextFragmentResource>();
                        var terms     = new List <MembershipRuleTermDefinition>();

                        A.CallTo(() => service.ParseRuleStatement(rule.RuleStatement, terms)).Returns(fragments);
                        A.CallTo(() => service.GetComprehensionScore(rule, user)).Returns(15);
                        A.CallTo(() => dependencies.LinqService.EnumerableCount(
                                     rule.MembershipRuleComprehensionQuestions)).Returns(20);

                        var result = service.BuildMembershipRuleResource(prefix, user, rule, index, terms);

                        Assert.AreEqual(prefix + (index + 1), result.Number);
                        Assert.AreEqual(rule.Id, result.Id);
                        Assert.AreSame(fragments, result.RuleFragments);
                        //       Assert.AreEqual(rule.Explanation.ExplanationUrl,result.ExplanationUrl);
                        Assert.AreEqual(15, result.ComprehensionScore);
                        Assert.AreEqual(20, result.MaxComprehensionScore);
                        Assert.AreEqual(rule.PublishedDateTimeUtc.ToString("s"), result.PublishedUtcDateTimeText);
                        Assert.AreEqual(rule.RuleStatement, result.RuleStatement);
                    }
예제 #5
0
        public IOrderProcess GetProductRuleInstance(ProductType productType)
        {
            IOrderProcess orderRule;

            switch (productType)
            {
            case ProductType.PhysicalProduct:
                orderRule = new PhysicalProductRule();
                break;

            case ProductType.Book:
                orderRule = new BookRule();
                break;

            case ProductType.Membership:
                orderRule = new MembershipRule();
                break;

            case ProductType.MembershipUpgrade:
                orderRule = new MembershipUpgradeRule();
                break;

            case ProductType.Video:
                orderRule = new VideoRule();
                break;

            default:
                orderRule = new NewProductRule();
                break;
            }
            return(orderRule);
        }
 public List <string> GetMemberPermissions(Auth0User user, MembershipRule rule)
 {
     if (rule == null)
     {
         return(new List <string>());
     }
     return(GetMemberPermissions(user, rule.MembershipRuleSection));
 }
예제 #7
0
        public void RuleShouldApplyIsTrueWhenPOContainsRule()
        {
            var ipoReader = new Mock <IPOReader>();

            ipoReader.Setup(x => x.Request).Returns(new List <string> {
                "membership request books"
            });
            var rule   = new MembershipRule(MembershipType.Books);
            var actual = rule.ShouldApply(ipoReader.Object);

            Assert.True(actual);
        }
예제 #8
0
        public void Add_Membership_Rule()
        {
            Payment payment = new Payment();

            payment.PaymentType = Enum_PaymentType.Membership;
            payment.ProductName = "Golf Club Membership";
            payment.IsBook      = false;
            IRule rule = new MembershipRule();

            ruleManager.AddRule(rule);
            rule = new E_MailRule();
            ruleManager.AddRule(rule);
            var  ruleResult = ruleManager.ExecuteRules(payment);
            bool isMembershipRuleApplied = ruleResult.Contains("Activate Membership");

            Assert.IsTrue(isMembershipRuleApplied);
            bool isActivationMailSent = ruleResult.Contains("Mail To Owner About Membership Activation");

            Assert.IsTrue(isActivationMailSent);
        }
        public ResponseResource CreateRule(IPrincipal principal, CreateMembershipRuleRequest request)
        {
            var user        = _dependencies.UserService.GetAuthenticatedUser(principal);
            var ruleSection = _dependencies.MembershipRuleSectionService.GetMembershipRuleSection(request.MembershipRuleSectionId);
            var permissions = _dependencies.OrganisationService.GetMemberPermissions(user, ruleSection);

            if (!permissions.Contains(ShurahOrganisationPermission.EditMembershipRules.ToString()))
            {
                return(new ResponseResource {
                    HasError = true, Error = "Access Denied!"
                });
            }
            var rule = new MembershipRule();

            _dependencies.StorageService.SetOf <MembershipRule>().Add(rule);
            rule.MembershipRuleSection   = ruleSection;
            rule.RuleStatement           = request.Rule;
            rule.MembershipRuleSectionId = ruleSection.Id;
            rule.Sequence             = ruleSection.MembershipRules.Count + 2;
            rule.PublishedDateTimeUtc = DateTime.UtcNow;
            _dependencies.StorageService.SaveChanges();
            return(new ResponseResource());
        }
        public virtual MembershipRuleResource BuildMembershipRuleResource(string rulePrefix, Auth0User user, MembershipRule rule, int ruleIndex, IEnumerable <MembershipRuleTermDefinition> terms)
        {
            var resource = new MembershipRuleResource();

            resource.Id                    = rule.Id;
            resource.Number                = rulePrefix + (ruleIndex + 1);
            resource.RuleFragments         = ParseRuleStatement(rule.RuleStatement, terms);
            resource.ComprehensionScore    = GetComprehensionScore(rule, user);
            resource.MaxComprehensionScore =
                _dependencies.LinqService.EnumerableCount(rule.MembershipRuleComprehensionQuestions);
            resource.PublishedUtcDateTimeText = rule.PublishedDateTimeUtc.ToString("s");
            resource.RuleStatement            = rule.RuleStatement;
            return(resource);
        }
                public void AddsRulesWithTermsAndSubsections()
                {
                    MethodToTest(() => service.BuildMembershipRuleSectionResource(A <string> .Ignored, A <MembershipRuleSection> .Ignored,
                                                                                  A <Auth0User> .Ignored, A <int> .Ignored, A <List <MembershipRuleTermDefinition> > .Ignored));

                    var sectionPrefix = "pre";
                    var sectionIndex  = 3;
                    var section       = new MembershipRuleSection
                    {
                        MembershipRules             = new List <MembershipRule>(),
                        ChildMembershipRuleSections = new List <MembershipRuleSectionRelationship>()
                    };
                    var user  = new Auth0User();
                    var terms = new List <MembershipRuleTermDefinition>();

                    var orderedRules = A.Fake <IOrderedEnumerable <MembershipRule> >();

                    A.CallTo(() => dependencies.LinqService.OrderBy(section.MembershipRules,
                                                                    A <Func <MembershipRule, int> > .That.Matches(x =>
                                                                                                                  x.Invoke(new MembershipRule {
                        Sequence = 34
                    }) == 34
                                                                                                                  ))).Returns(orderedRules);
                    var exampleRule      = new MembershipRule();
                    var exampleRuleIndex = 4;
                    var rulePrefix       = sectionPrefix + (sectionIndex + 1) + ".";
                    var exampleMembershipRuleResource = new MembershipRuleResource();

                    A.CallTo(() => service.BuildMembershipRuleResource(rulePrefix, user, exampleRule, exampleRuleIndex, terms))
                    .Returns(exampleMembershipRuleResource);
                    var ruleResources = new List <MembershipRuleResource>();

                    A.CallTo(() => dependencies.LinqService.SelectIndexedEnumerable(orderedRules,
                                                                                    A <Func <MembershipRule, int, MembershipRuleResource> > .That.Matches(x =>
                                                                                                                                                          x.Invoke(exampleRule, exampleRuleIndex) == exampleMembershipRuleResource
                                                                                                                                                          ))).Returns(ruleResources);
                    var ruleResourcesList = new List <MembershipRuleResource>();

                    A.CallTo(() => dependencies.LinqService.EnumerableToList(ruleResources)).Returns(ruleResourcesList);
                    var childRuleSections = new List <MembershipRuleSection>();
                    var exampleRuleSectionRelationship = new MembershipRuleSectionRelationship
                    {
                        MembershipRuleSection = new MembershipRuleSection()
                    };

                    A.CallTo(() => dependencies.LinqService.SelectEnumerable(section.ChildMembershipRuleSections,
                                                                             A <Func <MembershipRuleSectionRelationship, MembershipRuleSection> > .That.Matches(x =>
                                                                                                                                                                x.Invoke(exampleRuleSectionRelationship) ==
                                                                                                                                                                exampleRuleSectionRelationship.MembershipRuleSection
                                                                                                                                                                ))).Returns(childRuleSections);
                    var childResourceSections = new List <MembershipRuleSectionResource>();

                    A.CallTo(() => service.BuildMembershipRuleSectionResources(
                                 rulePrefix, childRuleSections, terms, user))
                    .Returns(childResourceSections);

                    var result = service.BuildMembershipRuleSectionResource(sectionPrefix, section, user, sectionIndex, terms);

                    Assert.AreSame(ruleResourcesList, result.Rules);
                    Assert.AreSame(childResourceSections, result.SubSections);
                }
예제 #12
0
 public MembershipRuleTest()
 {
     mockMembership  = new Mock <IMembership>();
     _membershipRule = new MembershipRule();
 }