public virtual List <string> GetMemberPermissions(Auth0User user, MembershipRuleSection section)
 {
     if (section == null)
     {
         return(new List <string>());
     }
     return(GetMemberPermissions(user, section.ShurahBasedOrganisation));
 }
Example #2
0
        public virtual bool HasNoRootSection(MembershipRuleSection droppedSection)
        {
            var sectionIds = new List <int>();

            sectionIds.Add(droppedSection.Id);
            while (droppedSection.ParentMembershipRuleSection != null)
            {
                if (sectionIds.Contains(droppedSection.ParentMembershipRuleSection.ParentMembershipRuleSectionId))
                {
                    return(true);
                }
                sectionIds.Add(droppedSection.ParentMembershipRuleSection.ParentMembershipRuleSectionId);
                droppedSection = droppedSection.ParentMembershipRuleSection.ParentMembershipRuleSection;
            }
            return(false);
        }
                public void BuildsResourcesPerSection()
                {
                    MethodToTest(() => service.BuildMembershipRuleSectionResources(A <string> .Ignored,
                                                                                   A <IEnumerable <MembershipRuleSection> > .Ignored,
                                                                                   A <IEnumerable <MembershipRuleTermDefinition> > .Ignored, A <Auth0User> .Ignored));

                    var sectionPrefix = "pre";
                    var user          = new Auth0User();
                    var org           = new ShurahBasedOrganisation
                    {
                        MembershipRuleSections = new List <MembershipRuleSection>(),
                        Terms = new List <MembershipRuleTermDefinition>()
                    };
                    var exampleIndex   = 3;
                    var exampleSection = new MembershipRuleSection();
                    var exampleMembershipRuleSectionResource = new MembershipRuleSectionResource();

                    A.CallTo(() => service.BuildMembershipRuleSectionResource(sectionPrefix, exampleSection, user, exampleIndex, org.Terms))
                    .Returns(exampleMembershipRuleSectionResource);
                    var orderedSections = A.Fake <IOrderedEnumerable <MembershipRuleSection> >();

                    A.CallTo(() => dependencies.LinqService.OrderBy(org.MembershipRuleSections,
                                                                    A <Func <MembershipRuleSection, int> > .That.Matches(x =>
                                                                                                                         x.Invoke(new MembershipRuleSection {
                        Sequence = 4
                    }) == 4
                                                                                                                         ))).Returns(orderedSections);
                    var resources = new List <MembershipRuleSectionResource>();

                    A.CallTo(() => dependencies.LinqService.SelectIndexedEnumerable(orderedSections,
                                                                                    A <Func <MembershipRuleSection, int, MembershipRuleSectionResource> > .That.Matches(x =>
                                                                                                                                                                        x.Invoke(exampleSection, exampleIndex) == exampleMembershipRuleSectionResource
                                                                                                                                                                        ))).Returns(resources);
                    var resourcesList = new List <MembershipRuleSectionResource>();

                    A.CallTo(() => dependencies.LinqService.EnumerableToList(resources)).Returns(resourcesList);



                    var result = service.BuildMembershipRuleSectionResources(sectionPrefix, org.MembershipRuleSections, org.Terms, user);

                    Assert.AreSame(resourcesList, result);
                }
        public virtual ResponseResource CreateRuleSection(IPrincipal principal, CreateMembershipRuleSectionRequest request)
        {
            var user         = _dependencies.UserService.GetAuthenticatedUser(principal);
            var organisation = _dependencies.OrganisationService.GetOrganisation(request.OrganisationId);
            var permissions  = _dependencies.OrganisationService.GetMemberPermissions(user, organisation);

            if (!permissions.Contains(ShurahOrganisationPermission.EditMembershipRules.ToString()))
            {
                return(new ResponseResource {
                    HasError = true, Error = "Access Denied!"
                });
            }
            if (organisation.MembershipRuleSections.Any(s => s.UniqueInOrganisationName == request.UniqueUrlSlug))
            {
                return(new ResponseResource {
                    HasError = true, Error = "Url id not unique!"
                });
            }
            var ruleSection = new MembershipRuleSection();

            _dependencies.StorageService.SetOf <MembershipRuleSection>().Add(ruleSection);
            if (request.ParentSectionId.HasValue)
            {
                var parentSection =
                    organisation.MembershipRuleSections.FirstOrDefault(x => x.Id == request.ParentSectionId);
                if (parentSection != null)
                {
                    ruleSection.ParentMembershipRuleSection = new MembershipRuleSectionRelationship
                    {
                        ParentMembershipRuleSectionId = parentSection.Id,
                    };
                }
            }
            ruleSection.ShurahBasedOrganisationId = organisation.Id;
            ruleSection.UniqueInOrganisationName  = request.UniqueUrlSlug;
            ruleSection.PublishedDateTimeUtc      = DateTime.UtcNow;
            ruleSection.Title = request.Title;
            _dependencies.StorageService.SaveChanges();
            return(new ResponseResource());
        }
        public virtual MembershipRuleSectionResource BuildMembershipRuleSectionResource(string sectionPrefix,
                                                                                        MembershipRuleSection ruleSection, Auth0User user, int sectionIndex, IEnumerable <MembershipRuleTermDefinition> terms)
        {
            var resource = new MembershipRuleSectionResource();

            resource.Title          = ruleSection.Title;
            resource.Id             = ruleSection.Id;
            resource.OrganisationId = ruleSection.ShurahBasedOrganisationId;
            resource.SectionNumber  = sectionPrefix + (sectionIndex + 1);
            resource.UniqueName     = ruleSection.UniqueInOrganisationName;
            var orderedRules = _dependencies.LinqService.OrderBy(ruleSection.MembershipRules, r => r.Sequence);
            var prefix       = sectionPrefix + (sectionIndex + 1).ToString() + ".";

            resource.Rules =
                _dependencies.LinqService.EnumerableToList(
                    _dependencies.LinqService.SelectIndexedEnumerable(orderedRules,
                                                                      (r, i) => BuildMembershipRuleResource(prefix, user, r, i, terms)));
            resource.SubSections = BuildMembershipRuleSectionResources(
                prefix,
                _dependencies.LinqService.SelectEnumerable(ruleSection.ChildMembershipRuleSections,
                                                           x => x.MembershipRuleSection), terms, user);
            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);
                }