[MM-22206] Add PATCH channel moderations (PUT /moderations/patch) (#13845)
* MM-22205 Add get channel moderations endpoint * MM-22206 Add patch channel moderations endpoint Add api tests for patch channel moderations * MM-22205 Ensure ordered permissions returned and create struct ChannelModeratedRoles * MM-22206 Use structs instead of map * MM-22206 Add test cases for GetChannelModeratedPermissions * MM-22206 Add tests for ChannelModeratedPermissionsChangedByPatch * MM-22206 Use NewBool instead of defining booleans * MM-22206 Tie Channel Mentions to Create Posts when building Channel Moderations * Revert "MM-22206 Tie Channel Mentions to Create Posts when building Channel Moderations" This reverts commit a0bfc95f1732955c5ef5fc3e4b05ea8ab954acea. * MM-22206 Review changes Modify GetSchemeRolesForChannel to return named variables Change calls to SessionHasPermissionToChannel to SessionHasPermissionTo Add a CreateChannelScheme method Add a DeleteChannelScheme method Move GetChannelModeratedPermissions to Role model * Fix lint * Add ChannelModeration methods to App interface * MM-22206 Rename method to GetTeamSchemeChannelRoles * MM-22206 Check CHANNEL_MODERATED_PERMISSIONS_MAP for existing permission before iterating through it * Modify wording to higherScoped to match #13813 * MM-22206 Delete channel scheme between tests * MM-22206 Fix tests * Actually patch role * MM-22206 Shadow declaration of err
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
bfde6d1f3e
Коммит
79c786bc0c
273
model/role_test.go
Обычный файл
273
model/role_test.go
Обычный файл
@@ -0,0 +1,273 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
package model
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestChannelModeratedPermissionsChangedByPatch(t *testing.T) {
|
||||
testCases := []struct {
|
||||
Name string
|
||||
Permissions []string
|
||||
PatchPermissions []string
|
||||
Expected []string
|
||||
}{
|
||||
{
|
||||
"Empty patch returns empty slice",
|
||||
[]string{},
|
||||
[]string{},
|
||||
[]string{},
|
||||
},
|
||||
{
|
||||
"Adds permissions to empty initial permissions list",
|
||||
[]string{},
|
||||
[]string{PERMISSION_CREATE_POST.Id, PERMISSION_ADD_REACTION.Id},
|
||||
[]string{CHANNEL_MODERATED_PERMISSIONS[0], CHANNEL_MODERATED_PERMISSIONS[1]},
|
||||
},
|
||||
{
|
||||
"Ignores non moderated permissions in initial permissions list",
|
||||
[]string{PERMISSION_ASSIGN_BOT.Id},
|
||||
[]string{PERMISSION_CREATE_POST.Id, PERMISSION_REMOVE_REACTION.Id},
|
||||
[]string{CHANNEL_MODERATED_PERMISSIONS[0], CHANNEL_MODERATED_PERMISSIONS[1]},
|
||||
},
|
||||
{
|
||||
"Adds removed moderated permissions from initial permissions list",
|
||||
[]string{PERMISSION_CREATE_POST.Id},
|
||||
[]string{},
|
||||
[]string{PERMISSION_CREATE_POST.Id},
|
||||
},
|
||||
{
|
||||
"No changes returns empty slice",
|
||||
[]string{PERMISSION_CREATE_POST.Id, PERMISSION_ASSIGN_BOT.Id},
|
||||
[]string{PERMISSION_CREATE_POST.Id},
|
||||
[]string{},
|
||||
},
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.Name, func(t *testing.T) {
|
||||
baseRole := &Role{Permissions: tc.Permissions}
|
||||
rolePatch := &RolePatch{Permissions: &tc.PatchPermissions}
|
||||
result := ChannelModeratedPermissionsChangedByPatch(baseRole, rolePatch)
|
||||
assert.ElementsMatch(t, tc.Expected, result)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRolePatchFromChannelModerationsPatch(t *testing.T) {
|
||||
createPosts := CHANNEL_MODERATED_PERMISSIONS[0]
|
||||
createReactions := CHANNEL_MODERATED_PERMISSIONS[1]
|
||||
manageMembers := CHANNEL_MODERATED_PERMISSIONS[2]
|
||||
channelMentions := CHANNEL_MODERATED_PERMISSIONS[3]
|
||||
|
||||
basePermissions := []string{
|
||||
PERMISSION_ADD_REACTION.Id,
|
||||
PERMISSION_REMOVE_REACTION.Id,
|
||||
PERMISSION_CREATE_POST.Id,
|
||||
PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
||||
PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id,
|
||||
PERMISSION_UPLOAD_FILE.Id,
|
||||
PERMISSION_GET_PUBLIC_LINK.Id,
|
||||
PERMISSION_USE_SLASH_COMMANDS.Id,
|
||||
}
|
||||
|
||||
baseModeratedPermissions := []string{
|
||||
PERMISSION_ADD_REACTION.Id,
|
||||
PERMISSION_REMOVE_REACTION.Id,
|
||||
PERMISSION_CREATE_POST.Id,
|
||||
PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id,
|
||||
PERMISSION_USE_CHANNEL_MENTIONS.Id,
|
||||
}
|
||||
|
||||
testCases := []struct {
|
||||
Name string
|
||||
Permissions []string
|
||||
ChannelModerationsPatch []*ChannelModerationPatch
|
||||
RoleName string
|
||||
ExpectedPatchPermissions []string
|
||||
}{
|
||||
{
|
||||
"Patch to member role adding a permission that already exists",
|
||||
basePermissions,
|
||||
[]*ChannelModerationPatch{
|
||||
{
|
||||
Name: &createReactions,
|
||||
Roles: &ChannelModeratedRolesPatch{Members: NewBool(true)},
|
||||
},
|
||||
},
|
||||
"members",
|
||||
baseModeratedPermissions,
|
||||
},
|
||||
{
|
||||
"Patch to member role with moderation patch for guest role",
|
||||
basePermissions,
|
||||
[]*ChannelModerationPatch{
|
||||
{
|
||||
Name: &createReactions,
|
||||
Roles: &ChannelModeratedRolesPatch{Guests: NewBool(true)},
|
||||
},
|
||||
},
|
||||
"members",
|
||||
baseModeratedPermissions,
|
||||
},
|
||||
{
|
||||
"Patch to guest role with moderation patch for member role",
|
||||
basePermissions,
|
||||
[]*ChannelModerationPatch{
|
||||
{
|
||||
Name: &createReactions,
|
||||
Roles: &ChannelModeratedRolesPatch{Members: NewBool(true)},
|
||||
},
|
||||
},
|
||||
"guests",
|
||||
baseModeratedPermissions,
|
||||
},
|
||||
{
|
||||
"Patch to member role removing multiple channel moderated permissions",
|
||||
basePermissions,
|
||||
[]*ChannelModerationPatch{
|
||||
{
|
||||
Name: &createReactions,
|
||||
Roles: &ChannelModeratedRolesPatch{Members: NewBool(false)},
|
||||
},
|
||||
{
|
||||
Name: &manageMembers,
|
||||
Roles: &ChannelModeratedRolesPatch{Members: NewBool(false)},
|
||||
},
|
||||
{
|
||||
Name: &channelMentions,
|
||||
Roles: &ChannelModeratedRolesPatch{Members: NewBool(false)},
|
||||
},
|
||||
},
|
||||
"members",
|
||||
[]string{PERMISSION_CREATE_POST.Id},
|
||||
},
|
||||
{
|
||||
"Patch to guest role removing multiple channel moderated permissions",
|
||||
basePermissions,
|
||||
[]*ChannelModerationPatch{
|
||||
{
|
||||
Name: &createReactions,
|
||||
Roles: &ChannelModeratedRolesPatch{Guests: NewBool(false)},
|
||||
},
|
||||
{
|
||||
Name: &manageMembers,
|
||||
Roles: &ChannelModeratedRolesPatch{Guests: NewBool(false)},
|
||||
},
|
||||
{
|
||||
Name: &channelMentions,
|
||||
Roles: &ChannelModeratedRolesPatch{Guests: NewBool(false)},
|
||||
},
|
||||
},
|
||||
"guests",
|
||||
[]string{PERMISSION_CREATE_POST.Id},
|
||||
},
|
||||
{
|
||||
"Patch enabling and removing multiple channel moderated permissions ",
|
||||
[]string{PERMISSION_ADD_REACTION.Id, PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id},
|
||||
[]*ChannelModerationPatch{
|
||||
{
|
||||
Name: &createReactions,
|
||||
Roles: &ChannelModeratedRolesPatch{Members: NewBool(false)},
|
||||
},
|
||||
{
|
||||
Name: &manageMembers,
|
||||
Roles: &ChannelModeratedRolesPatch{Members: NewBool(false)},
|
||||
},
|
||||
{
|
||||
Name: &channelMentions,
|
||||
Roles: &ChannelModeratedRolesPatch{Members: NewBool(true)},
|
||||
},
|
||||
{
|
||||
Name: &createPosts,
|
||||
Roles: &ChannelModeratedRolesPatch{Members: NewBool(true)},
|
||||
},
|
||||
},
|
||||
"members",
|
||||
[]string{PERMISSION_CREATE_POST.Id, PERMISSION_USE_CHANNEL_MENTIONS.Id},
|
||||
},
|
||||
{
|
||||
"Patch enabling a partially enabled permission",
|
||||
[]string{PERMISSION_ADD_REACTION.Id},
|
||||
[]*ChannelModerationPatch{
|
||||
{
|
||||
Name: &createReactions,
|
||||
Roles: &ChannelModeratedRolesPatch{Members: NewBool(true)},
|
||||
},
|
||||
},
|
||||
"members",
|
||||
[]string{PERMISSION_ADD_REACTION.Id, PERMISSION_REMOVE_REACTION.Id},
|
||||
},
|
||||
{
|
||||
"Patch disabling a partially disabled permission",
|
||||
[]string{PERMISSION_ADD_REACTION.Id},
|
||||
[]*ChannelModerationPatch{
|
||||
{
|
||||
Name: &createReactions,
|
||||
Roles: &ChannelModeratedRolesPatch{Members: NewBool(false)},
|
||||
},
|
||||
{
|
||||
Name: &createPosts,
|
||||
Roles: &ChannelModeratedRolesPatch{Members: NewBool(true)},
|
||||
},
|
||||
},
|
||||
"members",
|
||||
[]string{PERMISSION_CREATE_POST.Id},
|
||||
},
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.Name, func(t *testing.T) {
|
||||
baseRole := &Role{Permissions: tc.Permissions}
|
||||
rolePatch := baseRole.RolePatchFromChannelModerationsPatch(tc.ChannelModerationsPatch, tc.RoleName)
|
||||
assert.ElementsMatch(t, tc.ExpectedPatchPermissions, *rolePatch.Permissions)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetChannelModeratedPermissions(t *testing.T) {
|
||||
tests := []struct {
|
||||
Name string
|
||||
Permissions []string
|
||||
Expected map[string]bool
|
||||
}{
|
||||
{
|
||||
"Filters non moderated permissions",
|
||||
[]string{PERMISSION_CREATE_BOT.Id},
|
||||
map[string]bool{},
|
||||
},
|
||||
{
|
||||
"Returns a map of moderated permissions",
|
||||
[]string{PERMISSION_CREATE_POST.Id, PERMISSION_ADD_REACTION.Id, PERMISSION_REMOVE_REACTION.Id, PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id, PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id, PERMISSION_USE_CHANNEL_MENTIONS.Id},
|
||||
map[string]bool{
|
||||
CHANNEL_MODERATED_PERMISSIONS[0]: true,
|
||||
CHANNEL_MODERATED_PERMISSIONS[1]: true,
|
||||
CHANNEL_MODERATED_PERMISSIONS[2]: true,
|
||||
CHANNEL_MODERATED_PERMISSIONS[3]: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
"Returns a map of moderated permissions when non moderated present",
|
||||
[]string{PERMISSION_CREATE_POST.Id, PERMISSION_CREATE_DIRECT_CHANNEL.Id},
|
||||
map[string]bool{
|
||||
CHANNEL_MODERATED_PERMISSIONS[0]: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
"Returns a nothing when no permissions present",
|
||||
[]string{},
|
||||
map[string]bool{},
|
||||
},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.Name, func(t *testing.T) {
|
||||
role := &Role{Permissions: tc.Permissions}
|
||||
moderatedPermissions := role.GetChannelModeratedPermissions()
|
||||
for permission := range moderatedPermissions {
|
||||
assert.Equal(t, moderatedPermissions[permission], tc.Expected[permission])
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Ссылка в новой задаче
Block a user