public void CreateParentChildGroups() { var connection = new ConnectionSettingProvider(); var metadataElastic = new ElasticClient( connection.Get() .DefaultIndex("es.info.metadata")); var attachmentProcessor = new AttachmentProcessor(); var metadataRepo = new MetadataRepository(metadataElastic); var metadataInfo = new InformationRepository(metadataElastic, attachmentProcessor, new ItemMetadataProvider(metadataRepo)); var childGroup1 = new ChildGroup { SortOrder = 1, Title = "child 1" }; var childGroup2 = new ChildGroup { SortOrder = 2, Title = "child 2" }; var grandChild = new ChildGroup { SortOrder = 1, Title = "grandchild" }; var rootGroup = new RootGroup { Title = "root" }; attachmentProcessor.Attach(childGroup1, rootGroup); attachmentProcessor.Attach(childGroup2, rootGroup); attachmentProcessor.Attach(grandChild, childGroup1); attachmentProcessor.Attach(grandChild, rootGroup); attachmentProcessor.Attach(childGroup1, rootGroup); attachmentProcessor.Attach(childGroup2, rootGroup); metadataInfo.Save(rootGroup); metadataInfo.Save(childGroup1); metadataInfo.Save(childGroup2); metadataInfo.Save(grandChild); }
public async Task <Group> AddChildGroups(Group group, IEnumerable <Group> childGroups) { foreach (var childGroup in childGroups) { var newChildGroup = new ChildGroup { ParentGroupId = group.Id, ChildGroupId = childGroup.Id }; AuthorizationDbContext.ChildGroups.Add(newChildGroup); group.Children.Add(childGroup); } await AuthorizationDbContext.SaveChangesAsync(); await EventService.RaiseEventAsync(new EntityAuditEvent <Group>(EventTypes.ChildEntityCreatedEvent, group.Id.ToString(), group)); return(group); }
public List <FullContact> GetFullContacts(ContactParameters contactParameters) { // INNER JOIN lambda /*return this.RepositoryContext.Contacts.Join( * this.RepositoryContext.Addresses, * contact => contact.Id, * address => address.ContactId, * (contact, address) => new FullContact * { * ZipCode = address.ZipCode, * City = address.City, * FirstName = contact.FirstName, * LastName = contact.LastName * } * ).ToList();*/ // LEFT JOIN lambda /*return this.RepositoryContext.Contacts * .GroupJoin( * this.RepositoryContext.Addresses, * contact => contact.Id, * address => address.ContactId, * (contact, address) => new { contact, address } * ) * .SelectMany( * x => x.address.DefaultIfEmpty(), * (x, address) => new FullContact { * FirstName = x.contact.FirstName, * LastName = x.contact.LastName, * City = address == null ? string.Empty : address.City, * ZipCode = address == null ? 0 : address.ZipCode * } * ).ToList();*/ // LEFT JOIN Query syntax /*var query = from contact in this.RepositoryContext.Contacts * join address in this.RepositoryContext.Addresses * on contact.Id equals address.ContactId * into ContactAddressGroup * from address in ContactAddressGroup.DefaultIfEmpty() * select new FullContact * { * FirstName = contact.FirstName, * LastName = contact.LastName, * Gender = contact.Gender, * ZipCode = address.ZipCode, * City = address.City, * };*/ List <FullContact> fullContacts = new List <FullContact> { }; using (var context = this.RepositoryContext) { var query = from contact in context.Contacts join child in context.Children on contact.Id equals child.ContactId into ChildGroup from c in ChildGroup.DefaultIfEmpty() join address in context.Addresses on contact.Id equals address.ContactId into AddressGroup from a in AddressGroup.DefaultIfEmpty() select new { Contact = contact, Address = a, Child = c }; // Filters if (!string.IsNullOrEmpty(contactParameters.Gender)) { query = query.Where(q => q.Contact.Gender == contactParameters.Gender); } // Group by contact var grouping = query.ToLookup(q => q.Contact.Id); Console.WriteLine("Items Count: {0}", grouping.Count); foreach (var item in grouping) { var fullContact = new FullContact() { FirstName = item.First().Contact.FirstName, LastName = item.First().Contact.LastName, Gender = item.First().Contact.Gender, ZipCode = item.First().Address == null ? 0 : item.First().Address.ZipCode, City = item.First().Address?.City, Children = new List <Child> { } }; foreach (var i in item) { if (i.Child != null) { fullContact.Children.Add( new Child() { Name = i.Child.Name } ); } } fullContacts.Add(fullContact); } } return(fullContacts); }
public async Task MigrateDuplicateGroups_NoDuplicates_Success() { var container = _fixture.Bootstrapper.TinyIoCContainer; var dbContext = container.Resolve <IAuthorizationDbContext>(); var groupMigratorService = container.Resolve <GroupMigratorService>(); var customGroup1 = new Group { GroupId = Guid.NewGuid(), Name = $"Custom Group 1-{Guid.NewGuid()}", Source = GroupConstants.CustomSource, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var customGroup2 = new Group { GroupId = Guid.NewGuid(), Name = $"Custom Group 2-{Guid.NewGuid()}", Source = GroupConstants.CustomSource, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var group1 = new Group { GroupId = Guid.NewGuid(), Name = $"Group 1-{Guid.NewGuid()}", Source = GroupConstants.DirectorySource, IdentityProvider = IdentityConstants.ActiveDirectory, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var group2 = new Group { GroupId = Guid.NewGuid(), Name = $"Group 2-{Guid.NewGuid()}", Source = GroupConstants.DirectorySource, IdentityProvider = IdentityConstants.ActiveDirectory, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var childGroup1 = new ChildGroup { ChildGroupId = group1.GroupId, ParentGroupId = customGroup1.GroupId, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var childGroup2 = new ChildGroup { ChildGroupId = group2.GroupId, ParentGroupId = customGroup1.GroupId, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var childGroup3 = new ChildGroup { ChildGroupId = group2.GroupId, ParentGroupId = customGroup2.GroupId, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; dbContext.Groups.AddRange(new List <Group> { customGroup1, customGroup2, group1, group2 }); dbContext.ChildGroups.AddRange(new List <ChildGroup> { childGroup1, childGroup2, childGroup3 }); dbContext.SaveChanges(); var result = await groupMigratorService.MigrateDuplicateGroups(); Assert.Empty(result.GroupMigrationRecords); var groupStore = container.Resolve <IGroupStore>(); await groupStore.Delete(customGroup1.ToModel()); await groupStore.Delete(customGroup2.ToModel()); await groupStore.Delete(group1.ToModel()); await groupStore.Delete(group2.ToModel()); }
public async Task MigrateDuplicateGroups_HasDuplicateIdentifiers_SuccessAsync() { var container = _fixture.Bootstrapper.TinyIoCContainer; var dbContext = container.Resolve <IAuthorizationDbContext>(); var groupMigratorService = container.Resolve <GroupMigratorService>(); #region Data Setup var client = new Client { ClientId = $"client1-{Guid.NewGuid()}", Name = $"Client 1-{Guid.NewGuid()}" }; var grain = new Grain { Name = $"dos-{Guid.NewGuid()}" }; var securableItem = new SecurableItem { Name = $"datamarts-{Guid.NewGuid()}", Grain = grain, ClientOwner = client.ClientId }; client.TopLevelSecurableItem = securableItem; var customGroup1 = new Group { GroupId = Guid.NewGuid(), Name = $"Custom Group 1-{Guid.NewGuid()}", Source = GroupConstants.CustomSource, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var customGroup2 = new Group { GroupId = Guid.NewGuid(), Name = $"Custom Group 2-{Guid.NewGuid()}", Source = GroupConstants.CustomSource, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var groupGuid = Guid.NewGuid(); var group1 = new Group { GroupId = Guid.NewGuid(), Name = $"Group 1-{groupGuid}", IdentityProvider = IdentityConstants.ActiveDirectory, TenantId = "12345", Source = GroupConstants.DirectorySource, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var group2 = new Group { GroupId = Guid.NewGuid(), Name = $"groUP 1-{groupGuid}", IdentityProvider = IdentityConstants.ActiveDirectory, TenantId = "12345", Source = GroupConstants.DirectorySource, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var group3 = new Group { GroupId = Guid.NewGuid(), Name = $"groUP 1-{groupGuid}", IdentityProvider = IdentityConstants.AzureActiveDirectory, TenantId = "12345", Source = GroupConstants.DirectorySource, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var role1 = new Role { RoleId = Guid.NewGuid(), Name = "Role 1", Grain = grain.Name, SecurableItem = securableItem }; var role2 = new Role { RoleId = Guid.NewGuid(), Name = "Role 2", Grain = grain.Name, SecurableItem = securableItem, }; var role3 = new Role { RoleId = Guid.NewGuid(), Name = "Role 3", Grain = grain.Name, SecurableItem = securableItem, }; var role4 = new Role { RoleId = Guid.NewGuid(), Name = "Role 4", Grain = grain.Name, SecurableItem = securableItem, }; var group1Role1 = new GroupRole { Group = group1, Role = role1 }; var group2Role1 = new GroupRole { Group = group2, Role = role1 }; var group2Role2 = new GroupRole { Group = group2, Role = role2 }; var group2Role3 = new GroupRole { Group = group2, Role = role3, IsDeleted = true }; var group3Role4 = new GroupRole { Group = group3, Role = role4 }; var user1 = new User { IdentityProvider = IdentityConstants.ActiveDirectory, SubjectId = Guid.NewGuid().ToString() }; var customGroup1User1 = new GroupUser { Group = customGroup1, User = user1 }; var customGroup2User1 = new GroupUser { Group = customGroup2, User = user1 }; var childGroup1 = new ChildGroup { ChildGroupId = group1.GroupId, ParentGroupId = customGroup1.GroupId, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var childGroup2 = new ChildGroup { ChildGroupId = group2.GroupId, ParentGroupId = customGroup1.GroupId, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; var childGroup3 = new ChildGroup { ChildGroupId = group2.GroupId, ParentGroupId = customGroup2.GroupId, CreatedBy = "test", CreatedDateTimeUtc = DateTime.UtcNow }; dbContext.Clients.Add(client); dbContext.Grains.Add(grain); dbContext.SecurableItems.Add(securableItem); dbContext.Roles.AddRange(new List <Role> { role1, role2, role3, role4 }); dbContext.Groups.AddRange(new List <Group> { customGroup1, customGroup2, group1, group2, group3 }); dbContext.GroupRoles.AddRange(new List <GroupRole> { group1Role1, group2Role1, group2Role2, group2Role3, group3Role4 }); dbContext.Users.Add(user1); dbContext.GroupUsers.AddRange(new List <GroupUser> { customGroup1User1, customGroup2User1 }); dbContext.ChildGroups.AddRange(new List <ChildGroup> { childGroup1, childGroup2, childGroup3 }); dbContext.SaveChanges(); #endregion var results = await groupMigratorService.MigrateDuplicateGroups(); Assert.Equal(1, results.GroupMigrationRecords.Count); Assert.Empty(results.GroupMigrationRecords.SelectMany(r => r.Errors)); var principal = new ClaimsPrincipal(new ClaimsIdentity(new List <Claim> { new Claim(Claims.Scope, Scopes.ManageClientsScope), new Claim(Claims.Scope, Scopes.ReadScope), new Claim(Claims.Scope, Scopes.WriteScope), new Claim(Claims.ClientId, client.ClientId), new Claim(Claims.IdentityProvider, "idP1") }, "rolesprincipal")); var browser = _fixture.GetBrowser(principal, _storageProvider); var getResponse = await browser.Get(HttpUtility.UrlEncode($"/groups/Group 1-{groupGuid}"), with => { with.HttpRequest(); with.Header("Accept", "application/json"); with.Query("identityProvider", IdentityConstants.ActiveDirectory); with.Query("tenantId", "12345"); }); var groupRoleApiModel = getResponse.Body.DeserializeJson <GroupRoleApiModel>(); var roles = groupRoleApiModel.Roles.ToList(); Assert.Equal(2, roles.Count); Assert.Contains(roles, r => r.Name == role1.Name); Assert.Contains(roles, r => r.Name == role2.Name); var parents = groupRoleApiModel.Parents.ToList(); Assert.Contains(parents, p => p.GroupName == customGroup1.Name); Assert.Contains(parents, p => p.GroupName == customGroup2.Name); var groupStore = container.Resolve <IGroupStore>(); await groupStore.Delete(customGroup1.ToModel()); await groupStore.Delete(customGroup2.ToModel()); await groupStore.Delete(group1.ToModel()); await groupStore.Delete(group2.ToModel()); await groupStore.Delete(group3.ToModel()); }
public static ChildGroupRenderingList BuildContentGroups(GroupAdapter groupAdapter) { //Debug.Log("BuildContentGroups"); ChildGroupRenderingList childGroupList = new ChildGroupRenderingList(); var groupDescriptors = DesignerReflection.GetChildGroupsReferences(groupAdapter); bool skipFirst = false; if (groupDescriptors.Count > 0) { skipFirst = groupDescriptors[0].Attribute.ShowHeader; } foreach (ChildGroupDescriptor descriptor in groupDescriptors) { var attr = descriptor.Attribute; ChildGroup group; if (attr.ShowHeader) { Texture iconTexture = null; if (!string.IsNullOrEmpty(attr.Icon)) { iconTexture = (Texture)Resources.Load(attr.Icon); } group = new ChildGroup(new GUIContent(attr.Label, iconTexture, attr.Tooltip)); } else { group = new ChildGroup(); } List <ComponentAdapter> adapters = Core.Reflection.CoreReflector.GetMemberValue(descriptor.CollectionMemberInfo, groupAdapter) as List <ComponentAdapter>; // temp hack // ReSharper disable ConvertIfStatementToNullCoalescingExpression if (null == adapters) // ReSharper restore ConvertIfStatementToNullCoalescingExpression { // ReSharper disable AssignNullToNotNullAttribute adapters = new List <ComponentAdapter>(Core.Reflection.CoreReflector.GetMemberValue(descriptor.CollectionMemberInfo, groupAdapter) as ComponentAdapter[]); // ReSharper restore AssignNullToNotNullAttribute } //Debug.Log("adapters.Count: " + adapters.Count); foreach (ComponentAdapter adapter in adapters) { //Debug.Log(" -> adapter: " + adapter); if (null != adapter) { var dataObject = new OrderDisplayRow(adapter.ToString(), adapter, new Rect(0, 0, 0, 0)) { Color = (adapter is GroupAdapter) ? Dark : Light, IsContainer = adapter is GroupAdapter }; if (skipFirst) { dataObject.YMin = OrderDisplay.ElementHeight; } //Debug.Log("Adding " + dataObject); group.Add(dataObject); } } // Debug.Log(string.Format(@"***** Group created: //{0} // //", group)); childGroupList.AddGroup(group); } //Debug.Log(childGroupList); return(childGroupList); }