Beispiel #1
0
 public override async Task OnWritingAsync(DomainGroup group, OperationKind operationKind, CancellationToken cancellationToken)
 {
     if (operationKind == OperationKind.DeleteResource)
     {
         _groupToDelete = await base.GetGroupToDeleteAsync(group.Id, cancellationToken);
     }
 }
Beispiel #2
0
        private static bool InExcludeGroups(string user)
        {
            bool contains = false;

            if (Global.Config.ExcludeGroups != null)
            {
                var u = DomainUser.Parse(user);
                if (u.IsLocal)
                {
                    string[] groups = UserAccess.GetLocalUserGroups(u.Name);
                    contains = Global.Config.ExcludeGroups.Any(
                        s => groups.Any(
                            g => string.Equals(s, g, StringComparison.OrdinalIgnoreCase)));
                }
                else if (Global.Config.ADValid)
                {
                    var exclude = Global.Config.ExcludeGroups
                                  .Select(s => DomainGroup.Parse(s))
                                  .Where(g => string.Equals(u.Domain, g.Domain, StringComparison.OrdinalIgnoreCase))
                                  .Select(g => g.Name);

                    if (exclude.Any())
                    {
                        var ldap   = new LdapAccess(Global.Config.ADPath, Global.Config.ADUser, Global.Config.ADPasswordValue, Global.Config.ADOrganization);
                        var groups = ldap.GetUserGroups(u.Name);
                        contains = exclude.Any(s => groups.Any(g => string.Equals(s, g, StringComparison.OrdinalIgnoreCase)));
                    }
                }
            }
            return(contains);
        }
Beispiel #3
0
 /// <summary>
 /// 创建一个新的工作组对象。
 /// </summary>
 /// <param name="containerDN">表示工作组的容器DN。</param>
 /// <param name="commonName">表示工作组的公共名称。</param>
 /// <param name="sAMAccountName">表示工作组的账户名称。</param>
 /// <returns>返回一个新的工作组对象。</returns>
 public DomainGroup CreateNewGroup(string containerDN, string commonName, string sAMAccountName)
 {
     try
     {
         if (string.IsNullOrEmpty(containerDN.Trim()))
         {
             throw new Exception("“containerDN”属性不能为空");
         }
         if (string.IsNullOrEmpty(commonName.Trim()))
         {
             throw new Exception("“commonName”属性不能为空");
         }
         if (string.IsNullOrEmpty(sAMAccountName.Trim()))
         {
             throw new Exception("“sAMAccountName”属性不能为空");
         }
         string groupDN = "CN=" + commonName + "," + containerDN;
         using (DirectoryEntry container = GetDirectoryEntry(containerDN))
         {
             if (ExistDirectoryEntryByDN(groupDN))
             {
                 throw new Exception("已存在公共名称为“" + commonName + "”的对象。");
             }
             container.Children.Add("CN=" + commonName, "group").CommitChanges();
             DomainGroup Domaingroup = GetGroup(groupDN);
             Domaingroup.SAMAccountName = sAMAccountName;
             Domaingroup.CommitChanges();
             return(Domaingroup);
         }
     }
     catch
     {
         return(null);
     }
 }
        public async Task Delete_group_sends_messages()
        {
            // Arrange
            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                dbContext.Groups.Add(existingGroup);
                await dbContext.SaveChangesAsync();
            });

            string route = "/domainGroups/" + existingGroup.StringId;

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecuteDeleteAsync <string>(route);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            var messageBroker = _testContext.Factory.Services.GetRequiredService <MessageBroker>();

            messageBroker.SentMessages.Should().HaveCount(1);

            var content = messageBroker.SentMessages[0].GetContentAs <GroupDeletedContent>();

            content.GroupId.Should().Be(existingGroup.StringId);
        }
        public async Task Delete_group_writes_to_outbox()
        {
            // Arrange
            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                await dbContext.ClearTableAsync <OutgoingMessage>();
                dbContext.Groups.Add(existingGroup);
                await dbContext.SaveChangesAsync();
            });

            string route = "/domainGroups/" + existingGroup.StringId;

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecuteDeleteAsync <string>(route);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                List <OutgoingMessage> messages = await dbContext.OutboxMessages.OrderBy(message => message.Id).ToListAsync();
                messages.Should().HaveCount(1);

                var content = messages[0].GetContentAs <GroupDeletedContent>();
                content.GroupId.Should().Be(existingGroup.StringId);
            });
        }
        public void TestDomainGroup()
        {
            var group = new DomainGroup();

            group.Create(inputs);
            Assert.That(group.GetTopDomains().Count(), Is.EqualTo(6));
            Assert.That(group.GetSubDomains("unity").Count(), Is.EqualTo(3));
            Assert.That(group.GetSubDomains("UniRx").Count(), Is.EqualTo(2));
            Assert.That(group.GetSubDomains("zenject").Count(), Is.EqualTo(2));
            Assert.That(group.GetSubDomains("MyAsmdef").Count(), Is.EqualTo(1));
            Assert.That(group.GetSubDomains("MyAsmdef2_Test").Count(), Is.EqualTo(1));
            Assert.That(group.GetSubDomains("MyAsmdef3").Count(), Is.EqualTo(2));

            Assert.That(group.GetTopDomainsWithSomeSubDomains().Count(), Is.EqualTo(4));
            Assert.That(group.GetSoloDomains().Count(), Is.EqualTo(2));

            Assert.That(group.GetSubDomains("unity").Any(x => x.SubDomain == "hoge"), Is.True);
            Assert.That(group.GetSubDomains("unity").Any(x => x.SubDomain == "fuga"), Is.True);
            Assert.That(group.GetSubDomains("unity").Any(x => x.SubDomain == "foo.bar"), Is.True);
            Assert.That(group.GetSubDomains("UniRx").Any(x => x.SubDomain == ""), Is.True);
            Assert.That(group.GetSubDomains("UniRx").Any(x => x.SubDomain == "Async"), Is.True);
            Assert.That(group.GetSubDomains("zenject").Any(x => x.SubDomain == ""), Is.True);
            Assert.That(group.GetSubDomains("zenject").Any(x => x.SubDomain == "test-framework"), Is.True);
            Assert.That(group.GetSubDomains("MyAsmdef").Any(x => x.SubDomain == ""), Is.True);
            Assert.That(group.GetSubDomains("MyAsmdef2_Test").Any(x => x.SubDomain == ""), Is.True);
            Assert.That(group.GetSubDomains("MyAsmdef3").Any(x => x.SubDomain == "hoge"), Is.True);
            Assert.That(group.GetSubDomains("MyAsmdef3").Count(x => x.SubDomain == "hoge"), Is.EqualTo(2));
        }
Beispiel #7
0
        public override async Task OnWritingAsync(DomainGroup group, OperationKind operationKind, CancellationToken cancellationToken)
        {
            _hitCounter.TrackInvocation <DomainGroup>(ResourceDefinitionHitCounter.ExtensibilityPoint.OnWritingAsync);

            if (operationKind == OperationKind.DeleteResource)
            {
                _groupToDelete = await base.GetGroupToDeleteAsync(group.Id, cancellationToken);
            }
        }
        public static async Task <DomainGroup> SyncDomainPosts(DomainGroup dEvent)
        {
            DomainGroup currentDomain = dEvent;

            currentDomain.userPosts.Clear();
            List <ServerEventPost> posts = await App.serverData.GetDomainUserPosts(dEvent.domain.firmID);

            currentDomain.userPosts = posts.Where(x => x.postUsers.Count == 0 || x.postUsers.Contains(App.userID)).ToList();
            return(currentDomain);
        }
        public async Task Does_not_add_to_outbox_on_write_error()
        {
            // Arrange
            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            DomainUser existingUser = _fakers.DomainUser.Generate();

            string missingUserId = Guid.NewGuid().ToString();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                await dbContext.ClearTableAsync <OutgoingMessage>();
                dbContext.AddRange(existingGroup, existingUser);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new[]
                {
                    new
                    {
                        type = "domainUsers",
                        id   = existingUser.StringId
                    },
                    new
                    {
                        type = "domainUsers",
                        id   = missingUserId
                    }
                }
            };

            string route = $"/domainGroups/{existingGroup.StringId}/relationships/users";

            // Act
            (HttpResponseMessage httpResponse, ErrorDocument responseDocument) = await _testContext.ExecutePostAsync <ErrorDocument>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NotFound);

            responseDocument.Errors.Should().HaveCount(1);

            Error error = responseDocument.Errors[0];

            error.StatusCode.Should().Be(HttpStatusCode.NotFound);
            error.Title.Should().Be("A related resource does not exist.");
            error.Detail.Should().Be($"Related resource of type 'domainUsers' with ID '{missingUserId}' in relationship 'users' does not exist.");

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                List <OutgoingMessage> messages = await dbContext.OutboxMessages.OrderBy(message => message.Id).ToListAsync();
                messages.Should().BeEmpty();
            });
        }
        public static async Task <DomainGroup> SyncDomainUsers(DomainGroup dGroup)
        {
            DomainGroup   currentDomainGroup = dGroup;
            List <string> firmUserIds        = await App.serverData.GetDomainUsers(dGroup.domain.firmID);

            currentDomainGroup.users = new List <ServerUser>();
            for (int k = 0; k < firmUserIds.Count; k++)
            {
                currentDomainGroup.users.Add(await App.serverData.GetUserWithID(firmUserIds[k]));
            }
            return(currentDomainGroup);
        }
        public async Task Remove_users_from_group_writes_to_outbox()
        {
            // Arrange
            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            DomainUser existingUserWithSameGroup1 = _fakers.DomainUser.Generate();

            existingUserWithSameGroup1.Group = existingGroup;

            DomainUser existingUserWithSameGroup2 = _fakers.DomainUser.Generate();

            existingUserWithSameGroup2.Group = existingGroup;

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                await dbContext.ClearTableAsync <OutgoingMessage>();
                dbContext.Users.AddRange(existingUserWithSameGroup1, existingUserWithSameGroup2);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new[]
                {
                    new
                    {
                        type = "domainUsers",
                        id   = existingUserWithSameGroup2.StringId
                    }
                }
            };

            string route = $"/domainGroups/{existingGroup.StringId}/relationships/users";

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecuteDeleteAsync <string>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                List <OutgoingMessage> messages = await dbContext.OutboxMessages.OrderBy(message => message.Id).ToListAsync();
                messages.Should().HaveCount(1);

                var content = messages[0].GetContentAs <UserRemovedFromGroupContent>();
                content.UserId.Should().Be(existingUserWithSameGroup2.Id);
                content.GroupId.Should().Be(existingGroup.Id);
            });
        }
        public async Task Remove_users_from_group_sends_messages()
        {
            // Arrange
            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            DomainUser existingUserWithSameGroup1 = _fakers.DomainUser.Generate();

            existingUserWithSameGroup1.Group = existingGroup;

            DomainUser existingUserWithSameGroup2 = _fakers.DomainUser.Generate();

            existingUserWithSameGroup2.Group = existingGroup;

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                dbContext.Users.AddRange(existingUserWithSameGroup1, existingUserWithSameGroup2);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new[]
                {
                    new
                    {
                        type = "domainUsers",
                        id   = existingUserWithSameGroup2.StringId
                    }
                }
            };

            string route = $"/domainGroups/{existingGroup.StringId}/relationships/users";

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecuteDeleteAsync <string>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            var messageBroker = _testContext.Factory.Services.GetRequiredService <MessageBroker>();

            messageBroker.SentMessages.Should().HaveCount(1);

            var content = messageBroker.SentMessages[0].GetContentAs <UserRemovedFromGroupContent>();

            content.UserId.Should().Be(existingUserWithSameGroup2.Id);
            content.GroupId.Should().Be(existingGroup.Id);
        }
        public async Task Update_group_writes_to_outbox()
        {
            // Arrange
            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            string newGroupName = _fakers.DomainGroup.Generate().Name;

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                await dbContext.ClearTableAsync <OutgoingMessage>();
                dbContext.Groups.Add(existingGroup);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new
                {
                    type       = "domainGroups",
                    id         = existingGroup.StringId,
                    attributes = new
                    {
                        name = newGroupName
                    }
                }
            };

            string route = "/domainGroups/" + existingGroup.StringId;

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecutePatchAsync <string>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                List <OutgoingMessage> messages = await dbContext.OutboxMessages.OrderBy(message => message.Id).ToListAsync();
                messages.Should().HaveCount(1);

                var content = messages[0].GetContentAs <GroupRenamedContent>();
                content.GroupId.Should().Be(existingGroup.StringId);
                content.BeforeGroupName.Should().Be(existingGroup.Name);
                content.AfterGroupName.Should().Be(newGroupName);
            });
        }
        public async Task Replace_group_for_user_writes_to_outbox()
        {
            // Arrange
            DomainUser existingUser = _fakers.DomainUser.Generate();

            existingUser.Group = _fakers.DomainGroup.Generate();

            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                await dbContext.ClearTableAsync <OutgoingMessage>();
                dbContext.AddRange(existingUser, existingGroup);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new
                {
                    type = "domainGroups",
                    id   = existingGroup.StringId
                }
            };

            string route = $"/domainUsers/{existingUser.StringId}/relationships/group";

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecutePatchAsync <string>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                List <OutgoingMessage> messages = await dbContext.OutboxMessages.OrderBy(message => message.Id).ToListAsync();
                messages.Should().HaveCount(1);

                var content = messages[0].GetContentAs <UserMovedToGroupContent>();
                content.UserId.Should().Be(existingUser.Id);
                content.BeforeGroupId.Should().Be(existingUser.Group.Id);
                content.AfterGroupId.Should().Be(existingGroup.Id);
            });
        }
        public async Task Update_group_sends_messages()
        {
            // Arrange
            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            string newGroupName = _fakers.DomainGroup.Generate().Name;

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                dbContext.Groups.Add(existingGroup);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new
                {
                    type       = "domainGroups",
                    id         = existingGroup.StringId,
                    attributes = new
                    {
                        name = newGroupName
                    }
                }
            };

            string route = "/domainGroups/" + existingGroup.StringId;

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecutePatchAsync <string>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            var messageBroker = _testContext.Factory.Services.GetRequiredService <MessageBroker>();

            messageBroker.SentMessages.Should().HaveCount(1);

            var content = messageBroker.SentMessages[0].GetContentAs <GroupRenamedContent>();

            content.GroupId.Should().Be(existingGroup.StringId);
            content.BeforeGroupName.Should().Be(existingGroup.Name);
            content.AfterGroupName.Should().Be(newGroupName);
        }
Beispiel #16
0
        public async Task Replace_group_for_user_sends_messages()
        {
            // Arrange
            DomainUser existingUser = _fakers.DomainUser.Generate();

            existingUser.Group = _fakers.DomainGroup.Generate();

            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                dbContext.AddRange(existingUser, existingGroup);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new
                {
                    type = "domainGroups",
                    id   = existingGroup.StringId
                }
            };

            string route = $"/domainUsers/{existingUser.StringId}/relationships/group";

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecutePatchAsync <string>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            var messageBroker = _testContext.Factory.Services.GetRequiredService <MessageBroker>();

            messageBroker.SentMessages.Should().HaveCount(1);

            var content = messageBroker.SentMessages[0].GetContentAs <UserMovedToGroupContent>();

            content.UserId.Should().Be(existingUser.Id);
            content.BeforeGroupId.Should().Be(existingUser.Group.Id);
            content.AfterGroupId.Should().Be(existingGroup.Id);
        }
Beispiel #17
0
        /// <summary>
        /// 创建域工作组对象。
        /// </summary>
        /// <param name="path">表示访问路径。</param>
        /// <returns>域工作组域节点或对象。</returns>
        public DomainGroup GetGroup(string path)
        {
            DomainGroup domainGroup = new DomainGroup(CreateDirectoryPath(path), Username, Password, AuthenticationType);

            return(domainGroup);
        }
Beispiel #18
0
 public async Task <int?> Post([FromBody] DomainGroup domainGroupModel, [FromServices] IDomainGroupBusiness GroupBusiness)
 {
     return(await GroupBusiness.PostDomainGroup(domainGroupModel));
 }
Beispiel #19
0
 public override Task OnWriteSucceededAsync(DomainGroup group, OperationKind operationKind, CancellationToken cancellationToken)
 {
     return(FinishWriteAsync(group, operationKind, cancellationToken));
 }
        public async Task Update_user_add_to_group_writes_to_outbox()
        {
            // Arrange
            DomainUser  existingUser  = _fakers.DomainUser.Generate();
            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            string newDisplayName = _fakers.DomainUser.Generate().DisplayName;

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                await dbContext.ClearTableAsync <OutgoingMessage>();
                dbContext.AddRange(existingUser, existingGroup);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new
                {
                    type       = "domainUsers",
                    id         = existingUser.StringId,
                    attributes = new
                    {
                        displayName = newDisplayName
                    },
                    relationships = new
                    {
                        group = new
                        {
                            data = new
                            {
                                type = "domainGroups",
                                id   = existingGroup.StringId
                            }
                        }
                    }
                }
            };

            string route = "/domainUsers/" + existingUser.StringId;

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecutePatchAsync <string>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                List <OutgoingMessage> messages = await dbContext.OutboxMessages.OrderBy(message => message.Id).ToListAsync();
                messages.Should().HaveCount(2);

                var content1 = messages[0].GetContentAs <UserDisplayNameChangedContent>();
                content1.UserId.Should().Be(existingUser.Id);
                content1.BeforeUserDisplayName.Should().Be(existingUser.DisplayName);
                content1.AfterUserDisplayName.Should().Be(newDisplayName);

                var content2 = messages[1].GetContentAs <UserAddedToGroupContent>();
                content2.UserId.Should().Be(existingUser.Id);
                content2.GroupId.Should().Be(existingGroup.Id);
            });
        }
Beispiel #21
0
        public async Task Create_user_in_group_sends_messages()
        {
            // Arrange
            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            string newLoginName = _fakers.DomainUser.Generate().LoginName;

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                dbContext.Groups.Add(existingGroup);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new
                {
                    type       = "domainUsers",
                    attributes = new
                    {
                        loginName = newLoginName
                    },
                    relationships = new
                    {
                        group = new
                        {
                            data = new
                            {
                                type = "domainGroups",
                                id   = existingGroup.StringId
                            }
                        }
                    }
                }
            };

            const string route = "/domainUsers";

            // Act
            (HttpResponseMessage httpResponse, Document responseDocument) = await _testContext.ExecutePostAsync <Document>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.Created);

            responseDocument.SingleData.Should().NotBeNull();
            responseDocument.SingleData.Attributes["loginName"].Should().Be(newLoginName);
            responseDocument.SingleData.Attributes["displayName"].Should().BeNull();

            Guid newUserId = Guid.Parse(responseDocument.SingleData.Id);

            var messageBroker = _testContext.Factory.Services.GetRequiredService <MessageBroker>();

            messageBroker.SentMessages.Should().HaveCount(2);

            var content1 = messageBroker.SentMessages[0].GetContentAs <UserCreatedContent>();

            content1.UserId.Should().Be(newUserId);
            content1.UserLoginName.Should().Be(newLoginName);
            content1.UserDisplayName.Should().BeNull();

            var content2 = messageBroker.SentMessages[1].GetContentAs <UserAddedToGroupContent>();

            content2.UserId.Should().Be(newUserId);
            content2.GroupId.Should().Be(existingGroup.Id);
        }
Beispiel #22
0
        public async Task Update_user_move_to_group_sends_messages()
        {
            // Arrange
            DomainUser existingUser = _fakers.DomainUser.Generate();

            existingUser.Group = _fakers.DomainGroup.Generate();

            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            string newDisplayName = _fakers.DomainUser.Generate().DisplayName;

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                dbContext.AddRange(existingUser, existingGroup);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new
                {
                    type       = "domainUsers",
                    id         = existingUser.StringId,
                    attributes = new
                    {
                        displayName = newDisplayName
                    },
                    relationships = new
                    {
                        group = new
                        {
                            data = new
                            {
                                type = "domainGroups",
                                id   = existingGroup.StringId
                            }
                        }
                    }
                }
            };

            string route = "/domainUsers/" + existingUser.StringId;

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecutePatchAsync <string>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            var messageBroker = _testContext.Factory.Services.GetRequiredService <MessageBroker>();

            messageBroker.SentMessages.Should().HaveCount(2);

            var content1 = messageBroker.SentMessages[0].GetContentAs <UserDisplayNameChangedContent>();

            content1.UserId.Should().Be(existingUser.Id);
            content1.BeforeUserDisplayName.Should().Be(existingUser.DisplayName);
            content1.AfterUserDisplayName.Should().Be(newDisplayName);

            var content2 = messageBroker.SentMessages[1].GetContentAs <UserMovedToGroupContent>();

            content2.UserId.Should().Be(existingUser.Id);
            content2.BeforeGroupId.Should().Be(existingUser.Group.Id);
            content2.AfterGroupId.Should().Be(existingGroup.Id);
        }
        public void SetAsmdef(Assembly[] assemblies, IToggleCheckDelegate toggleDelegate_)
        {
            var sortedAssemblies = assemblies.OrderBy(x => x.name).ToArray();
            var scrollView       = rootVisualElement.Q <ScrollView>(className: "ScrollView");

            toggleDict.Clear();
            for (var i = 0; i < toggleCount; i++)
            {
                var toggle = rootVisualElement.Q <Toggle>(className: $"toggle{i}");
                if (i < sortedAssemblies.Length)
                {
                    var assemblyName = sortedAssemblies[i].name;
                    toggle.text  = assemblyName;
                    toggle.value = true;
                    toggleDict.Add(assemblyName, new UiElementToggle(toggle));
                }
                else
                {
                    scrollView.Remove(toggle);
                }
            }

            // グループに分ける
            var group = new DomainGroup();

            group.Create(sortedAssemblies.Select(x => x.name));
            var tops = group.GetTopDomainsWithSomeSubDomains().ToArray();

            foreach (var top in tops)
            {
                var topToggle = new Toggle {
                    text = top, value = true
                };
                var    slaveToggles = new List <IToggle>();
                Toggle firstToggle  = null;
                var    domains      = group.GetSubDomains(top);
                foreach (var domain in domains)
                {
                    var isLast = domains.Last() == domain;
                    if (toggleDict.TryGetToggle(domain.FullName, out var toggle))
                    {
                        var keisen = isLast ? "└" : "├";
                        toggle.Name = domain.HasSubDomain() ? $"{keisen} {domain.SubDomain}" : toggle.Name;
                        slaveToggles.Add(toggle);
                        if (firstToggle == null && toggle is UiElementToggle y)
                        {
                            firstToggle = y.Toggle;
                        }
                    }
                }

                var toggleGroup = new ToggleGroup(new UiElementToggle(topToggle), slaveToggles);
                if (firstToggle != null)
                {
                    var index = scrollView.IndexOf(firstToggle);
                    // グループに属する toggle は box に入れる
                    var box = new Box();
                    scrollView.Insert(index, topToggle);
                    scrollView.Insert(index + 1, box);
                    foreach (var slaveToggle in slaveToggles)
                    {
                        if (slaveToggle is UiElementToggle x)
                        {
                            box.Add(x.Toggle);
                        }
                    }
                }

                groupMasterToggleDict.Add(top, toggleGroup);
            }

            toggleDelegate = toggleDelegate_;
        }
Beispiel #24
0
        public override Task OnWriteSucceededAsync(DomainGroup group, OperationKind operationKind, CancellationToken cancellationToken)
        {
            _hitCounter.TrackInvocation <DomainGroup>(ResourceDefinitionHitCounter.ExtensibilityPoint.OnWriteSucceededAsync);

            return(FinishWriteAsync(group, operationKind, cancellationToken));
        }
        public async Task Update_group_with_users_writes_to_outbox()
        {
            // Arrange
            DomainGroup existingGroup = _fakers.DomainGroup.Generate();

            DomainUser existingUserWithoutGroup = _fakers.DomainUser.Generate();

            DomainUser existingUserWithSameGroup1 = _fakers.DomainUser.Generate();

            existingUserWithSameGroup1.Group = existingGroup;

            DomainUser existingUserWithSameGroup2 = _fakers.DomainUser.Generate();

            existingUserWithSameGroup2.Group = existingGroup;

            DomainUser existingUserWithOtherGroup = _fakers.DomainUser.Generate();

            existingUserWithOtherGroup.Group = _fakers.DomainGroup.Generate();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                await dbContext.ClearTableAsync <OutgoingMessage>();
                dbContext.Users.AddRange(existingUserWithoutGroup, existingUserWithSameGroup1, existingUserWithSameGroup2, existingUserWithOtherGroup);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new
                {
                    type          = "domainGroups",
                    id            = existingGroup.StringId,
                    relationships = new
                    {
                        users = new
                        {
                            data = new[]
                            {
                                new
                                {
                                    type = "domainUsers",
                                    id   = existingUserWithoutGroup.StringId
                                },
                                new
                                {
                                    type = "domainUsers",
                                    id   = existingUserWithSameGroup1.StringId
                                },
                                new
                                {
                                    type = "domainUsers",
                                    id   = existingUserWithOtherGroup.StringId
                                }
                            }
                        }
                    }
                }
            };

            string route = "/domainGroups/" + existingGroup.StringId;

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecutePatchAsync <string>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                List <OutgoingMessage> messages = await dbContext.OutboxMessages.OrderBy(message => message.Id).ToListAsync();
                messages.Should().HaveCount(3);

                var content1 = messages[0].GetContentAs <UserAddedToGroupContent>();
                content1.UserId.Should().Be(existingUserWithoutGroup.Id);
                content1.GroupId.Should().Be(existingGroup.Id);

                var content2 = messages[1].GetContentAs <UserMovedToGroupContent>();
                content2.UserId.Should().Be(existingUserWithOtherGroup.Id);
                content2.BeforeGroupId.Should().Be(existingUserWithOtherGroup.Group.Id);
                content2.AfterGroupId.Should().Be(existingGroup.Id);

                var content3 = messages[2].GetContentAs <UserRemovedFromGroupContent>();
                content3.UserId.Should().Be(existingUserWithSameGroup2.Id);
                content3.GroupId.Should().Be(existingGroup.Id);
            });
        }