github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/model/role_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package model 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestChannelModeratedPermissionsChangedByPatch(t *testing.T) { 13 testCases := []struct { 14 Name string 15 Permissions []string 16 PatchPermissions []string 17 Expected []string 18 }{ 19 { 20 "Empty patch returns empty slice", 21 []string{}, 22 []string{}, 23 []string{}, 24 }, 25 { 26 "Adds permissions to empty initial permissions list", 27 []string{}, 28 []string{PERMISSION_CREATE_POST.Id, PERMISSION_ADD_REACTION.Id}, 29 []string{CHANNEL_MODERATED_PERMISSIONS[0], CHANNEL_MODERATED_PERMISSIONS[1]}, 30 }, 31 { 32 "Ignores non moderated permissions in initial permissions list", 33 []string{PERMISSION_ASSIGN_BOT.Id}, 34 []string{PERMISSION_CREATE_POST.Id, PERMISSION_REMOVE_REACTION.Id}, 35 []string{CHANNEL_MODERATED_PERMISSIONS[0], CHANNEL_MODERATED_PERMISSIONS[1]}, 36 }, 37 { 38 "Adds removed moderated permissions from initial permissions list", 39 []string{PERMISSION_CREATE_POST.Id}, 40 []string{}, 41 []string{PERMISSION_CREATE_POST.Id}, 42 }, 43 { 44 "No changes returns empty slice", 45 []string{PERMISSION_CREATE_POST.Id, PERMISSION_ASSIGN_BOT.Id}, 46 []string{PERMISSION_CREATE_POST.Id}, 47 []string{}, 48 }, 49 } 50 for _, tc := range testCases { 51 t.Run(tc.Name, func(t *testing.T) { 52 baseRole := &Role{Permissions: tc.Permissions} 53 rolePatch := &RolePatch{Permissions: &tc.PatchPermissions} 54 result := ChannelModeratedPermissionsChangedByPatch(baseRole, rolePatch) 55 assert.ElementsMatch(t, tc.Expected, result) 56 }) 57 } 58 } 59 60 func TestRolePatchFromChannelModerationsPatch(t *testing.T) { 61 createPosts := CHANNEL_MODERATED_PERMISSIONS[0] 62 createReactions := CHANNEL_MODERATED_PERMISSIONS[1] 63 manageMembers := CHANNEL_MODERATED_PERMISSIONS[2] 64 channelMentions := CHANNEL_MODERATED_PERMISSIONS[3] 65 66 basePermissions := []string{ 67 PERMISSION_ADD_REACTION.Id, 68 PERMISSION_REMOVE_REACTION.Id, 69 PERMISSION_CREATE_POST.Id, 70 PERMISSION_USE_CHANNEL_MENTIONS.Id, 71 PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id, 72 PERMISSION_UPLOAD_FILE.Id, 73 PERMISSION_GET_PUBLIC_LINK.Id, 74 PERMISSION_USE_SLASH_COMMANDS.Id, 75 } 76 77 baseModeratedPermissions := []string{ 78 PERMISSION_ADD_REACTION.Id, 79 PERMISSION_REMOVE_REACTION.Id, 80 PERMISSION_CREATE_POST.Id, 81 PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id, 82 PERMISSION_USE_CHANNEL_MENTIONS.Id, 83 } 84 85 testCases := []struct { 86 Name string 87 Permissions []string 88 ChannelModerationsPatch []*ChannelModerationPatch 89 RoleName string 90 ExpectedPatchPermissions []string 91 }{ 92 { 93 "Patch to member role adding a permission that already exists", 94 basePermissions, 95 []*ChannelModerationPatch{ 96 { 97 Name: &createReactions, 98 Roles: &ChannelModeratedRolesPatch{Members: NewBool(true)}, 99 }, 100 }, 101 "members", 102 baseModeratedPermissions, 103 }, 104 { 105 "Patch to member role with moderation patch for guest role", 106 basePermissions, 107 []*ChannelModerationPatch{ 108 { 109 Name: &createReactions, 110 Roles: &ChannelModeratedRolesPatch{Guests: NewBool(true)}, 111 }, 112 }, 113 "members", 114 baseModeratedPermissions, 115 }, 116 { 117 "Patch to guest role with moderation patch for member role", 118 basePermissions, 119 []*ChannelModerationPatch{ 120 { 121 Name: &createReactions, 122 Roles: &ChannelModeratedRolesPatch{Members: NewBool(true)}, 123 }, 124 }, 125 "guests", 126 baseModeratedPermissions, 127 }, 128 { 129 "Patch to member role removing multiple channel moderated permissions", 130 basePermissions, 131 []*ChannelModerationPatch{ 132 { 133 Name: &createReactions, 134 Roles: &ChannelModeratedRolesPatch{Members: NewBool(false)}, 135 }, 136 { 137 Name: &manageMembers, 138 Roles: &ChannelModeratedRolesPatch{Members: NewBool(false)}, 139 }, 140 { 141 Name: &channelMentions, 142 Roles: &ChannelModeratedRolesPatch{Members: NewBool(false)}, 143 }, 144 }, 145 "members", 146 []string{PERMISSION_CREATE_POST.Id}, 147 }, 148 { 149 "Patch to guest role removing multiple channel moderated permissions", 150 basePermissions, 151 []*ChannelModerationPatch{ 152 { 153 Name: &createReactions, 154 Roles: &ChannelModeratedRolesPatch{Guests: NewBool(false)}, 155 }, 156 { 157 Name: &manageMembers, 158 Roles: &ChannelModeratedRolesPatch{Guests: NewBool(false)}, 159 }, 160 { 161 Name: &channelMentions, 162 Roles: &ChannelModeratedRolesPatch{Guests: NewBool(false)}, 163 }, 164 }, 165 "guests", 166 []string{PERMISSION_CREATE_POST.Id}, 167 }, 168 { 169 "Patch enabling and removing multiple channel moderated permissions ", 170 []string{PERMISSION_ADD_REACTION.Id, PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id}, 171 []*ChannelModerationPatch{ 172 { 173 Name: &createReactions, 174 Roles: &ChannelModeratedRolesPatch{Members: NewBool(false)}, 175 }, 176 { 177 Name: &manageMembers, 178 Roles: &ChannelModeratedRolesPatch{Members: NewBool(false)}, 179 }, 180 { 181 Name: &channelMentions, 182 Roles: &ChannelModeratedRolesPatch{Members: NewBool(true)}, 183 }, 184 { 185 Name: &createPosts, 186 Roles: &ChannelModeratedRolesPatch{Members: NewBool(true)}, 187 }, 188 }, 189 "members", 190 []string{PERMISSION_CREATE_POST.Id, PERMISSION_USE_CHANNEL_MENTIONS.Id}, 191 }, 192 { 193 "Patch enabling a partially enabled permission", 194 []string{PERMISSION_ADD_REACTION.Id}, 195 []*ChannelModerationPatch{ 196 { 197 Name: &createReactions, 198 Roles: &ChannelModeratedRolesPatch{Members: NewBool(true)}, 199 }, 200 }, 201 "members", 202 []string{PERMISSION_ADD_REACTION.Id, PERMISSION_REMOVE_REACTION.Id}, 203 }, 204 { 205 "Patch disabling a partially disabled permission", 206 []string{PERMISSION_ADD_REACTION.Id}, 207 []*ChannelModerationPatch{ 208 { 209 Name: &createReactions, 210 Roles: &ChannelModeratedRolesPatch{Members: NewBool(false)}, 211 }, 212 { 213 Name: &createPosts, 214 Roles: &ChannelModeratedRolesPatch{Members: NewBool(true)}, 215 }, 216 }, 217 "members", 218 []string{PERMISSION_CREATE_POST.Id}, 219 }, 220 } 221 for _, tc := range testCases { 222 t.Run(tc.Name, func(t *testing.T) { 223 baseRole := &Role{Permissions: tc.Permissions} 224 rolePatch := baseRole.RolePatchFromChannelModerationsPatch(tc.ChannelModerationsPatch, tc.RoleName) 225 assert.ElementsMatch(t, tc.ExpectedPatchPermissions, *rolePatch.Permissions) 226 }) 227 } 228 } 229 230 func TestGetChannelModeratedPermissions(t *testing.T) { 231 tests := []struct { 232 Name string 233 Permissions []string 234 ChannelType string 235 Expected map[string]bool 236 }{ 237 { 238 "Filters non moderated permissions", 239 []string{PERMISSION_CREATE_BOT.Id}, 240 CHANNEL_OPEN, 241 map[string]bool{}, 242 }, 243 { 244 "Returns a map of moderated permissions", 245 []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}, 246 CHANNEL_OPEN, 247 map[string]bool{ 248 CHANNEL_MODERATED_PERMISSIONS[0]: true, 249 CHANNEL_MODERATED_PERMISSIONS[1]: true, 250 CHANNEL_MODERATED_PERMISSIONS[2]: true, 251 CHANNEL_MODERATED_PERMISSIONS[3]: true, 252 }, 253 }, 254 { 255 "Returns a map of moderated permissions when non moderated present", 256 []string{PERMISSION_CREATE_POST.Id, PERMISSION_CREATE_DIRECT_CHANNEL.Id}, 257 CHANNEL_OPEN, 258 map[string]bool{ 259 CHANNEL_MODERATED_PERMISSIONS[0]: true, 260 }, 261 }, 262 { 263 "Returns a nothing when no permissions present", 264 []string{}, 265 CHANNEL_OPEN, 266 map[string]bool{}, 267 }, 268 } 269 for _, tc := range tests { 270 t.Run(tc.Name, func(t *testing.T) { 271 role := &Role{Permissions: tc.Permissions} 272 moderatedPermissions := role.GetChannelModeratedPermissions(tc.ChannelType) 273 for permission := range moderatedPermissions { 274 assert.Equal(t, moderatedPermissions[permission], tc.Expected[permission]) 275 } 276 }) 277 } 278 }