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"); } }
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)))); }
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); }
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); }
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(); } }
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"); }