public void ReturnsTheSingleOrganisationWithoutAParentOrganisation()
        {
            MethodToTest(() => service.GetOrganisation(A <IPrincipal> .Ignored, A <int> .Ignored));

            var organisationId = 2;
            var principal      = A.Fake <IPrincipal>();
            var user           = new Auth0User();

            A.CallTo(() => dependencies.UserService.GetAuthenticatedUser(principal)).Returns(user);
            var org  = new ShurahBasedOrganisation();
            var orgs = A.Fake <IDbSet <ShurahBasedOrganisation> >();

            A.CallTo(() => dependencies.StorageService.SetOf <ShurahBasedOrganisation>()).Returns(orgs);
            A.CallTo(() => dependencies.LinqService.Single(orgs,
                                                           A <Expression <Func <ShurahBasedOrganisation, bool> > > .That.Matches(x =>
                                                                                                                                 x.Compile().Invoke(new ShurahBasedOrganisation
            {
                Id = organisationId
            }) &&
                                                                                                                                 !x.Compile().Invoke(new ShurahBasedOrganisation
            {
                Id = organisationId + 1
            })
                                                                                                                                 ))).Returns(org);
            var organisationResource = new OrganisationResource();

            A.CallTo(() => service.BuildOrganisationResource(org, user)).Returns(organisationResource);

            var result = service.GetOrganisation(principal, organisationId);

            Assert.AreSame(organisationResource, result);
        }
 public virtual MemberResource GetLeaderMember(ShurahBasedOrganisation organisation)
 {
     if (organisation.OrganisationLeader != null)
     {
         return(BuildMemberResource(organisation.OrganisationLeader.Leader));
     }
     return(null);
 }
        public void GuaranteeUserHasPermission(Auth0User user, ShurahBasedOrganisation organisation,
                                               ShurahOrganisationPermission permission)
        {
            var permissions = GetMemberPermissions(user, organisation);

            if (!permissions.Contains(permission.ToString()))
            {
                throw new Exception("Access Denied");
            }
        }
Ejemplo n.º 4
0
        private OrganisationUpdateResource RunOrganisationCounts(ShurahBasedOrganisation org)
        {
            org.CountingInProgress = true;
            _dependencies.StorageService.SaveChanges();
            var resource = SetLeader(org);

            org.CountingInProgress = false;
            _dependencies.StorageService.SaveChanges();
            return(resource);
        }
 public virtual int GetPendingMembershipApplicationsCount(ShurahBasedOrganisation organisation, Auth0User user)
 {
     return
         (organisation.MembershipApplications.Count(
              a =>
              (a.Auth0User.MemberAuth0Users.All(m => m.Member.OrganisationId != organisation.Id ||
                                                (m.Member.OrganisationId == organisation.Id &&
                                                 m.Member.Removed)))
              &&
              !a.Acceptances.Any(ac => ac.AcceptingMember.MemberAuth0Users.Any(u => user != null && u.Auth0UserId == user.Id))));
 }
Ejemplo n.º 6
0
 private void SetOrganisationDetails(OrganisationUpdateResource resource, ShurahBasedOrganisation org)
 {
     if (org == null)
     {
         return;
     }
     if (org.OrganisationLeader == null)
     {
         return;
     }
     resource.LeaderMemberId      = org.OrganisationLeader.LeaderMemberId;
     resource.LeaderPublicName    = org.OrganisationLeader.Leader.PublicName;
     resource.Name                = org.Name;
     resource.OrganisationId      = org.Id;
     resource.LeaderFollowerCount = org.OrganisationLeader.Leader.FollowerCount;
 }
            public void PropertiesAerBuiltCorrectly()
            {
                MethodToTest(() => service.BuildOrganisationResource(A <ShurahBasedOrganisation> .Ignored, A <Auth0User> .Ignored));

                var user = new Auth0User
                {
                };
                var org = new ShurahBasedOrganisation
                {
                    Name                   = "a",
                    Description            = "B",
                    JoiningPolicy          = JoiningPolicy.NoApplicationNeeded,
                    Members                = new List <Member>(),
                    MembershipRuleSections = new List <MembershipRuleSection>(),
                    Terms                  = new List <MembershipRuleTermDefinition>(),
                };
                var sortedTerms = new List <MembershipRuleTermDefinition>();

                A.CallTo(() => service.SortTerms(org.Terms)).Returns(sortedTerms);
                var memberResource = new MemberResource();

                A.CallTo(() => service.GetMember(user, org.Members)).Returns(memberResource);
                var ruleSectionResources = new List <MembershipRuleSectionResource>();
                var filteredSections     = new List <MembershipRuleSection>();

                A.CallTo(() => dependencies.LinqService.Where(org.MembershipRuleSections,
                                                              A <Func <MembershipRuleSection, bool> > .That.Matches(x =>
                                                                                                                    x.Invoke(new MembershipRuleSection())
                                                                                                                    &&
                                                                                                                    !x.Invoke(new MembershipRuleSection
                {
                    ParentMembershipRuleSection = new MembershipRuleSectionRelationship()
                })
                                                                                                                    ))).Returns(filteredSections);

                A.CallTo(() => service.BuildMembershipRuleSectionResources(String.Empty, filteredSections, sortedTerms, user))
                .Returns(ruleSectionResources);

                var result = service.BuildOrganisationResource(org, user);

                Assert.AreEqual(org.Name, result.Name);
                Assert.AreEqual(org.Description, result.Description);
                Assert.AreEqual(org.JoiningPolicy.ToString(), result.JoiningPolicy);
                Assert.AreEqual(memberResource, result.Member);
                Assert.AreSame(ruleSectionResources, result.RuleSections);
            }
        public virtual OrganisationResource BuildOrganisationResource(ShurahBasedOrganisation organisation, Auth0User user)
        {
            var resource = new OrganisationResource();

            resource.Name                  = organisation.Name;
            resource.Id                    = organisation.Id;
            resource.JoiningPolicy         = organisation.JoiningPolicy.ToString();
            resource.Description           = organisation.Description;
            resource.Member                = GetMember(user, organisation.Members);
            resource.HasPendingApplication = HasAPendingApplication(resource.Member, user, organisation);
            resource.RuleSections          = BuildMembershipRuleSectionResources(string.Empty
                                                                                 , _dependencies.LinqService.Where(organisation.MembershipRuleSections, r => r.ParentMembershipRuleSection == null)
                                                                                 , SortTerms(organisation.Terms), user);
            resource.Permissions  = GetMemberPermissions(user, organisation);
            resource.LeaderMember = GetLeaderMember(organisation);
            resource.PendingMembershipApplicationsCount = GetPendingMembershipApplicationsCount(organisation, user);
            return(resource);
        }
                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 List <string> GetMemberPermissions(Auth0User user, ShurahBasedOrganisation organisation)
        {
            if (user == null || organisation == null)
            {
                return(new List <string>());
            }
            var memberAuthUser = user.MemberAuth0Users.FirstOrDefault(m => m.Member.OrganisationId == organisation.Id && !m.Member.Removed);

            if (memberAuthUser == null)
            {
                return(new List <string>());
            }
            var permissions = memberAuthUser.Member.DelegatedPermissions.Select(x => x.ShurahOrganisationPermission).Distinct();

            if (organisation.OrganisationLeader != null &&
                organisation.OrganisationLeader.LeaderMemberId == memberAuthUser.MemberId)
            {
                permissions = Enum.GetValues(typeof(ShurahOrganisationPermission)).OfType <ShurahOrganisationPermission>().ToList();
            }
            return(permissions.Select(p => p.ToString()).ToList());
        }
        public virtual bool HasAPendingApplication(MemberResource member, Auth0User user, ShurahBasedOrganisation organisation)
        {
            if (member != null)
            {
                return(false);
            }
            var existingApplication =
                user?.MembershipApplications.FirstOrDefault(a => a.OrganisationId == organisation.Id);

            return(existingApplication != null);
        }
Ejemplo n.º 12
0
        private OrganisationUpdateResource SetLeader(ShurahBasedOrganisation org)
        {
            var resource         = new OrganisationUpdateResource();
            var level0leadership =
                _dependencies.StorageService.SetOf <LeaderRecognition>().Where(l =>
                                                                               l.Member.OrganisationId == org.Id &&
                                                                               !l.Member.Removed &&
                                                                               !l.RecognisedLeaderMember.Removed &&
                                                                               !l.Member.Followers.Any()).ToList();

            level0leadership.ForEach(l =>
            {
                l.Member.FollowerCount = 0;
            });

            var level0LeaderRecognitionsGroups = level0leadership.GroupBy(l => l.RecognisedLeaderMemberId).ToList();

            level0LeaderRecognitionsGroups.ForEach(g =>
            {
                var leader           = g.First().RecognisedLeaderMember;
                leader.FollowerCount = g.Count();
            });
            var leaderIds = level0LeaderRecognitionsGroups.Select(l => l.Key).ToList();

            while (leaderIds.Any())
            {
                var ids = leaderIds;
                var levelNLeadership =
                    _dependencies.StorageService.SetOf <LeaderRecognition>().Where(l =>
                                                                                   !l.Member.Removed &&
                                                                                   !l.RecognisedLeaderMember.Removed &&
                                                                                   l.Member.OrganisationId == org.Id &&
                                                                                   ids.Contains(l.MemberId)).ToList();

                var levelNLeadersGroups = levelNLeadership.GroupBy(l => l.RecognisedLeaderMemberId).ToList();
                levelNLeadersGroups.ForEach(g =>
                {
                    var leader           = g.First().RecognisedLeaderMember;
                    leader.FollowerCount = g.Sum(f => f.Member.FollowerCount + 1);
                });

                leaderIds = levelNLeadersGroups.Select(g => g.Key).ToList();
            }
            _dependencies.StorageService.SaveChanges();

            if (org.OrganisationLeader?.LastUpdateDateTimeUtc.Date >= DateTime.UtcNow.Date)
            {
                SetOrganisationDetails(resource, org);
                return(resource);
            }
            var leaderCandidate =
                org.Members.Where(m => !m.Removed).OrderByDescending(m => m.FollowerCount).FirstOrDefault();

            if (leaderCandidate != null && (leaderCandidate.FollowerCount + 1) > (org.Members.Count(m => !m.Removed) / 2.0))
            {
                resource.NewLeader = org?.OrganisationLeader.Leader.Id != leaderCandidate.Id;

                if (org.OrganisationLeader == null)
                {
                    org.OrganisationLeader = _dependencies.StorageService.SetOf <OrganisationLeader>().Create();
                    org.OrganisationLeader.OrganisationId = org.Id;
                    org.OrganisationLeader.Organisation   = org;
                    _dependencies.StorageService.SetOf <OrganisationLeader>().Add(org.OrganisationLeader);
                }
                org.OrganisationLeader.Leader                = leaderCandidate;
                org.OrganisationLeader.LeaderMemberId        = leaderCandidate.Id;
                org.OrganisationLeader.LastUpdateDateTimeUtc = DateTime.UtcNow;
            }
            else if (org.OrganisationLeader != null)
            {
                org.OrganisationLeader.LastUpdateDateTimeUtc = DateTime.UtcNow;
            }
            SetOrganisationDetails(resource, org);
            _dependencies.StorageService.SaveChanges();
            return(resource);
        }
Ejemplo n.º 13
0
        public void EnsureSeedDataPresent()
        {
            var theStartDate = new DateTime(2016, 11, 6, 9, 51, 0, DateTimeKind.Utc);

            var mainOrganisation = new ShurahBasedOrganisation
            {
                Name                              = "ShariahStandards.org",
                Description                       = "For all Muslims who have an interest in developing a global open standard interpretation of Islamic law in English",
                JoiningPolicy                     = JoiningPolicy.NoApplicationNeeded,
                LastUpdateDateTimeUtc             = theStartDate,
                UrlDomain                         = "https://shariahstandards.org",
                RequiredNumbersOfAcceptingMembers = 1
            };
            var existingMainOrganisation = _context.Set <ShurahBasedOrganisation>().FirstOrDefault(x => x.Name == mainOrganisation.Name);

            if (existingMainOrganisation == null)
            {
                _context.Set <ShurahBasedOrganisation>().Add(mainOrganisation);
                _context.SaveChanges();
            }
            existingMainOrganisation = _context.Set <ShurahBasedOrganisation>().FirstOrDefault(x => x.Name == mainOrganisation.Name);

            var member = new Member
            {
                Introduction           = "For some explanations of my views you can visit my personal blog http://investigatingIslam.org ",
                JoinedOnDateAndTimeUtc = theStartDate,
                Moderated      = false,
                Removed        = false,
                Organisation   = existingMainOrganisation,
                OrganisationId = existingMainOrganisation.Id,
                LastDateAndTimeUtcAgreedToMembershipRules = theStartDate,
                PublicName   = "Lamaan Ball",
                EmailAddress = "*****@*****.**"
            };
            var existingMember = _context.Set <Member>().FirstOrDefault(x => x.EmailAddress == "*****@*****.**");

            if (existingMember == null)
            {
                _context.Set <Member>().Add(member);
                _context.SaveChanges();
            }
            existingMember = _context.Set <Member>().FirstOrDefault(x => x.EmailAddress == "*****@*****.**");

            var user = new Auth0User {
                Id = "facebook|10154497931532170", Name = "Lamaan Ball", PictureUrl = "https://scontent.xx.fbcdn.net/v/t1.0-1/p50x50/1959327_10152239153037170_2068892341_n.jpg?oh=9197c2274a8a0b7c3f548ca6407da74e&oe=5884F154"
            };

            var existingUser = _context.Set <Auth0User>().FirstOrDefault(x => x.Id == user.Id);

            if (existingUser == null)
            {
                _context.Set <Auth0User>().Add(user);
                _context.SaveChanges();
            }
            existingUser = _context.Set <Auth0User>().FirstOrDefault(x => x.Id == user.Id);

            var memberAuthUser = new MemberAuth0User
            {
                Auth0UserId = existingUser.Id,
                MemberId    = existingMember.Id
            };
            var existingMemberAuth0User = _context.Set <MemberAuth0User>().FirstOrDefault(x => x.MemberId == existingMember.Id &&
                                                                                          x.Auth0UserId == existingUser.Id);

            if (existingMemberAuth0User == null)
            {
                _context.Set <MemberAuth0User>().Add(memberAuthUser);
                _context.SaveChanges();
            }
            existingMemberAuth0User = _context.Set <MemberAuth0User>().FirstOrDefault
                                          (x => x.MemberId == existingMember.Id && x.Auth0UserId == existingUser.Id);

            var existingOrganisationLeader = existingMainOrganisation.OrganisationLeader;

            if (existingOrganisationLeader == null)
            {
                _context.Set <OrganisationLeader>().Add(new OrganisationLeader
                {
                    LastUpdateDateTimeUtc = DateTime.UtcNow,
                    Leader         = existingMember,
                    Organisation   = existingMainOrganisation,
                    OrganisationId = existingMainOrganisation.Id,
                    LeaderMemberId = existingMember.Id
                });
                _context.SaveChanges();
            }
        }
Ejemplo n.º 14
0
        protected override void Seed(StoredObjects.ApplicationContext context)
        {
            var theStartDate = new DateTime(2016, 11, 6, 9, 51, 0, DateTimeKind.Utc);

            var mainOrganisation = new ShurahBasedOrganisation
            {
                Name                              = "ShariahStandards.org",
                Description                       = "For all Muslims who have an interest in developing a global open standard interpretation of Islamic law in English",
                JoiningPolicy                     = JoiningPolicy.NoApplicationNeeded,
                LastUpdateDateTimeUtc             = theStartDate,
                UrlDomain                         = "https://shariahstandards.org",
                RequiredNumbersOfAcceptingMembers = 1
            };

            context.Set <ShurahBasedOrganisation>().AddOrUpdate(x => x.Name, mainOrganisation);

            context.SaveChanges();

            mainOrganisation = context.Set <ShurahBasedOrganisation>().First(x => x.Name == mainOrganisation.Name);
            var member = new Member
            {
                Introduction           = "For some explanations of my views you can visit my personal blog http://investigatingIslam.org ",
                JoinedOnDateAndTimeUtc = theStartDate,
                Moderated      = false,
                Removed        = false,
                Organisation   = mainOrganisation,
                OrganisationId = mainOrganisation.Id,
                LastDateAndTimeUtcAgreedToMembershipRules = theStartDate,
                PublicName   = "Lamaan Ball",
                EmailAddress = "*****@*****.**"
            };

            context.Set <Member>().AddOrUpdate(x => x.EmailAddress, member);

            context.SaveChanges();

            member = context.Set <Member>().First(x => x.PublicName == "Lamaan Ball");
            var user = new Auth0User {
                Id = "facebook|10154497931532170", Name = "Lamaan Ball", PictureUrl = "https://scontent.xx.fbcdn.net/v/t1.0-1/p50x50/1959327_10152239153037170_2068892341_n.jpg?oh=9197c2274a8a0b7c3f548ca6407da74e&oe=5884F154"
            };

            context.Set <Auth0User>().AddOrUpdate(x => x.Id, user);
            context.SaveChanges();
            var memberAuthUser = new MemberAuth0User
            {
                Auth0UserId = user.Id,
                MemberId    = member.Id
            };

            context.Set <MemberAuth0User>().AddOrUpdate(x => new { x.Auth0UserId, x.MemberId }, memberAuthUser);
            context.SaveChanges();

            context.Set <OrganisationLeader>().AddOrUpdate(x => x.OrganisationId, new OrganisationLeader
            {
                LastUpdateDateTimeUtc = DateTime.UtcNow,
                Leader         = member,
                Organisation   = mainOrganisation,
                OrganisationId = mainOrganisation.Id,
                LeaderMemberId = member.Id
            });
            context.SaveChanges();
            // context.Database.ExecuteSqlCommand("ALTER TABLE Roots ALTER COLUMN [Transliteration] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CS_AS NOT NULL");
        }