github.com/mattermost/mattermost-server/v5@v5.39.3/store/storetest/scheme_store.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package storetest 5 6 import ( 7 "context" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 13 "github.com/mattermost/mattermost-server/v5/model" 14 "github.com/mattermost/mattermost-server/v5/store" 15 ) 16 17 func TestSchemeStore(t *testing.T, ss store.Store) { 18 createDefaultRoles(ss) 19 20 t.Run("Save", func(t *testing.T) { testSchemeStoreSave(t, ss) }) 21 t.Run("Get", func(t *testing.T) { testSchemeStoreGet(t, ss) }) 22 t.Run("GetAllPage", func(t *testing.T) { testSchemeStoreGetAllPage(t, ss) }) 23 t.Run("Delete", func(t *testing.T) { testSchemeStoreDelete(t, ss) }) 24 t.Run("PermanentDeleteAll", func(t *testing.T) { testSchemeStorePermanentDeleteAll(t, ss) }) 25 t.Run("GetByName", func(t *testing.T) { testSchemeStoreGetByName(t, ss) }) 26 t.Run("CountByScope", func(t *testing.T) { testSchemeStoreCountByScope(t, ss) }) 27 t.Run("CountWithoutPermission", func(t *testing.T) { testCountWithoutPermission(t, ss) }) 28 } 29 30 func createDefaultRoles(ss store.Store) { 31 ss.Role().Save(&model.Role{ 32 Name: model.TEAM_ADMIN_ROLE_ID, 33 DisplayName: model.TEAM_ADMIN_ROLE_ID, 34 Permissions: []string{ 35 model.PERMISSION_DELETE_OTHERS_POSTS.Id, 36 }, 37 }) 38 39 ss.Role().Save(&model.Role{ 40 Name: model.TEAM_USER_ROLE_ID, 41 DisplayName: model.TEAM_USER_ROLE_ID, 42 Permissions: []string{ 43 model.PERMISSION_VIEW_TEAM.Id, 44 model.PERMISSION_ADD_USER_TO_TEAM.Id, 45 }, 46 }) 47 48 ss.Role().Save(&model.Role{ 49 Name: model.TEAM_GUEST_ROLE_ID, 50 DisplayName: model.TEAM_GUEST_ROLE_ID, 51 Permissions: []string{ 52 model.PERMISSION_VIEW_TEAM.Id, 53 }, 54 }) 55 56 ss.Role().Save(&model.Role{ 57 Name: model.CHANNEL_ADMIN_ROLE_ID, 58 DisplayName: model.CHANNEL_ADMIN_ROLE_ID, 59 Permissions: []string{ 60 model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id, 61 model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id, 62 }, 63 }) 64 65 ss.Role().Save(&model.Role{ 66 Name: model.CHANNEL_USER_ROLE_ID, 67 DisplayName: model.CHANNEL_USER_ROLE_ID, 68 Permissions: []string{ 69 model.PERMISSION_READ_CHANNEL.Id, 70 model.PERMISSION_CREATE_POST.Id, 71 }, 72 }) 73 74 ss.Role().Save(&model.Role{ 75 Name: model.CHANNEL_GUEST_ROLE_ID, 76 DisplayName: model.CHANNEL_GUEST_ROLE_ID, 77 Permissions: []string{ 78 model.PERMISSION_READ_CHANNEL.Id, 79 model.PERMISSION_CREATE_POST.Id, 80 }, 81 }) 82 } 83 84 func testSchemeStoreSave(t *testing.T, ss store.Store) { 85 // Save a new scheme. 86 s1 := &model.Scheme{ 87 DisplayName: model.NewId(), 88 Name: model.NewId(), 89 Description: model.NewId(), 90 Scope: model.SCHEME_SCOPE_TEAM, 91 } 92 93 // Check all fields saved correctly. 94 d1, err := ss.Scheme().Save(s1) 95 assert.NoError(t, err) 96 assert.Len(t, d1.Id, 26) 97 assert.Equal(t, s1.DisplayName, d1.DisplayName) 98 assert.Equal(t, s1.Name, d1.Name) 99 assert.Equal(t, s1.Description, d1.Description) 100 assert.NotZero(t, d1.CreateAt) 101 assert.NotZero(t, d1.UpdateAt) 102 assert.Zero(t, d1.DeleteAt) 103 assert.Equal(t, s1.Scope, d1.Scope) 104 assert.Len(t, d1.DefaultTeamAdminRole, 26) 105 assert.Len(t, d1.DefaultTeamUserRole, 26) 106 assert.Len(t, d1.DefaultTeamGuestRole, 26) 107 assert.Len(t, d1.DefaultChannelAdminRole, 26) 108 assert.Len(t, d1.DefaultChannelUserRole, 26) 109 assert.Len(t, d1.DefaultChannelGuestRole, 26) 110 111 // Check the default roles were created correctly. 112 role1, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamAdminRole) 113 assert.NoError(t, err) 114 assert.Equal(t, role1.Permissions, []string{"delete_others_posts"}) 115 assert.True(t, role1.SchemeManaged) 116 117 role2, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamUserRole) 118 assert.NoError(t, err) 119 assert.Equal(t, role2.Permissions, []string{"view_team", "add_user_to_team"}) 120 assert.True(t, role2.SchemeManaged) 121 122 role3, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelAdminRole) 123 assert.NoError(t, err) 124 assert.Equal(t, role3.Permissions, []string{"manage_public_channel_members", "manage_private_channel_members"}) 125 assert.True(t, role3.SchemeManaged) 126 127 role4, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelUserRole) 128 assert.NoError(t, err) 129 assert.Equal(t, role4.Permissions, []string{"read_channel", "create_post"}) 130 assert.True(t, role4.SchemeManaged) 131 132 role5, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamGuestRole) 133 assert.NoError(t, err) 134 assert.Equal(t, role5.Permissions, []string{"view_team"}) 135 assert.True(t, role5.SchemeManaged) 136 137 role6, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelGuestRole) 138 assert.NoError(t, err) 139 assert.Equal(t, role6.Permissions, []string{"read_channel", "create_post"}) 140 assert.True(t, role6.SchemeManaged) 141 142 // Change the scheme description and update. 143 d1.Description = model.NewId() 144 145 d2, err := ss.Scheme().Save(d1) 146 assert.NoError(t, err) 147 assert.Equal(t, d1.Id, d2.Id) 148 assert.Equal(t, s1.DisplayName, d2.DisplayName) 149 assert.Equal(t, s1.Name, d2.Name) 150 assert.Equal(t, d1.Description, d2.Description) 151 assert.NotZero(t, d2.CreateAt) 152 assert.NotZero(t, d2.UpdateAt) 153 assert.Zero(t, d2.DeleteAt) 154 assert.Equal(t, s1.Scope, d2.Scope) 155 assert.Equal(t, d1.DefaultTeamAdminRole, d2.DefaultTeamAdminRole) 156 assert.Equal(t, d1.DefaultTeamUserRole, d2.DefaultTeamUserRole) 157 assert.Equal(t, d1.DefaultTeamGuestRole, d2.DefaultTeamGuestRole) 158 assert.Equal(t, d1.DefaultChannelAdminRole, d2.DefaultChannelAdminRole) 159 assert.Equal(t, d1.DefaultChannelUserRole, d2.DefaultChannelUserRole) 160 assert.Equal(t, d1.DefaultChannelGuestRole, d2.DefaultChannelGuestRole) 161 162 // Try saving one with an invalid ID set. 163 s3 := &model.Scheme{ 164 Id: model.NewId(), 165 DisplayName: model.NewId(), 166 Name: model.NewId(), 167 Description: model.NewId(), 168 Scope: model.SCHEME_SCOPE_TEAM, 169 } 170 171 _, err = ss.Scheme().Save(s3) 172 assert.Error(t, err) 173 } 174 175 func testSchemeStoreGet(t *testing.T, ss store.Store) { 176 // Save a scheme to test with. 177 s1 := &model.Scheme{ 178 DisplayName: model.NewId(), 179 Name: model.NewId(), 180 Description: model.NewId(), 181 Scope: model.SCHEME_SCOPE_TEAM, 182 } 183 184 d1, err := ss.Scheme().Save(s1) 185 assert.NoError(t, err) 186 assert.Len(t, d1.Id, 26) 187 188 // Get a valid scheme 189 d2, err := ss.Scheme().Get(d1.Id) 190 assert.NoError(t, err) 191 assert.Equal(t, d1.Id, d2.Id) 192 assert.Equal(t, s1.DisplayName, d2.DisplayName) 193 assert.Equal(t, s1.Name, d2.Name) 194 assert.Equal(t, d1.Description, d2.Description) 195 assert.NotZero(t, d2.CreateAt) 196 assert.NotZero(t, d2.UpdateAt) 197 assert.Zero(t, d2.DeleteAt) 198 assert.Equal(t, s1.Scope, d2.Scope) 199 assert.Equal(t, d1.DefaultTeamAdminRole, d2.DefaultTeamAdminRole) 200 assert.Equal(t, d1.DefaultTeamUserRole, d2.DefaultTeamUserRole) 201 assert.Equal(t, d1.DefaultTeamGuestRole, d2.DefaultTeamGuestRole) 202 assert.Equal(t, d1.DefaultChannelAdminRole, d2.DefaultChannelAdminRole) 203 assert.Equal(t, d1.DefaultChannelUserRole, d2.DefaultChannelUserRole) 204 assert.Equal(t, d1.DefaultChannelGuestRole, d2.DefaultChannelGuestRole) 205 206 // Get an invalid scheme 207 _, err = ss.Scheme().Get(model.NewId()) 208 assert.Error(t, err) 209 } 210 211 func testSchemeStoreGetByName(t *testing.T, ss store.Store) { 212 // Save a scheme to test with. 213 s1 := &model.Scheme{ 214 DisplayName: model.NewId(), 215 Name: model.NewId(), 216 Description: model.NewId(), 217 Scope: model.SCHEME_SCOPE_TEAM, 218 } 219 220 d1, err := ss.Scheme().Save(s1) 221 assert.NoError(t, err) 222 assert.Len(t, d1.Id, 26) 223 224 // Get a valid scheme 225 d2, err := ss.Scheme().GetByName(d1.Name) 226 assert.NoError(t, err) 227 assert.Equal(t, d1.Id, d2.Id) 228 assert.Equal(t, s1.DisplayName, d2.DisplayName) 229 assert.Equal(t, s1.Name, d2.Name) 230 assert.Equal(t, d1.Description, d2.Description) 231 assert.NotZero(t, d2.CreateAt) 232 assert.NotZero(t, d2.UpdateAt) 233 assert.Zero(t, d2.DeleteAt) 234 assert.Equal(t, s1.Scope, d2.Scope) 235 assert.Equal(t, d1.DefaultTeamAdminRole, d2.DefaultTeamAdminRole) 236 assert.Equal(t, d1.DefaultTeamUserRole, d2.DefaultTeamUserRole) 237 assert.Equal(t, d1.DefaultTeamGuestRole, d2.DefaultTeamGuestRole) 238 assert.Equal(t, d1.DefaultChannelAdminRole, d2.DefaultChannelAdminRole) 239 assert.Equal(t, d1.DefaultChannelUserRole, d2.DefaultChannelUserRole) 240 assert.Equal(t, d1.DefaultChannelGuestRole, d2.DefaultChannelGuestRole) 241 242 // Get an invalid scheme 243 _, err = ss.Scheme().GetByName(model.NewId()) 244 assert.Error(t, err) 245 } 246 247 func testSchemeStoreGetAllPage(t *testing.T, ss store.Store) { 248 // Save a scheme to test with. 249 schemes := []*model.Scheme{ 250 { 251 DisplayName: model.NewId(), 252 Name: model.NewId(), 253 Description: model.NewId(), 254 Scope: model.SCHEME_SCOPE_TEAM, 255 }, 256 { 257 DisplayName: model.NewId(), 258 Name: model.NewId(), 259 Description: model.NewId(), 260 Scope: model.SCHEME_SCOPE_CHANNEL, 261 }, 262 { 263 DisplayName: model.NewId(), 264 Name: model.NewId(), 265 Description: model.NewId(), 266 Scope: model.SCHEME_SCOPE_TEAM, 267 }, 268 { 269 DisplayName: model.NewId(), 270 Name: model.NewId(), 271 Description: model.NewId(), 272 Scope: model.SCHEME_SCOPE_CHANNEL, 273 }, 274 } 275 276 for _, scheme := range schemes { 277 _, err := ss.Scheme().Save(scheme) 278 require.NoError(t, err) 279 } 280 281 s1, err := ss.Scheme().GetAllPage("", 0, 2) 282 assert.NoError(t, err) 283 assert.Len(t, s1, 2) 284 285 s2, err := ss.Scheme().GetAllPage("", 2, 2) 286 assert.NoError(t, err) 287 assert.Len(t, s2, 2) 288 assert.NotEqual(t, s1[0].DisplayName, s2[0].DisplayName) 289 assert.NotEqual(t, s1[0].DisplayName, s2[1].DisplayName) 290 assert.NotEqual(t, s1[1].DisplayName, s2[0].DisplayName) 291 assert.NotEqual(t, s1[1].DisplayName, s2[1].DisplayName) 292 assert.NotEqual(t, s1[0].Name, s2[0].Name) 293 assert.NotEqual(t, s1[0].Name, s2[1].Name) 294 assert.NotEqual(t, s1[1].Name, s2[0].Name) 295 assert.NotEqual(t, s1[1].Name, s2[1].Name) 296 297 s3, err := ss.Scheme().GetAllPage("team", 0, 1000) 298 assert.NoError(t, err) 299 assert.NotZero(t, len(s3)) 300 for _, s := range s3 { 301 assert.Equal(t, "team", s.Scope) 302 } 303 304 s4, err := ss.Scheme().GetAllPage("channel", 0, 1000) 305 assert.NoError(t, err) 306 assert.NotZero(t, len(s4)) 307 for _, s := range s4 { 308 assert.Equal(t, "channel", s.Scope) 309 } 310 } 311 312 func testSchemeStoreDelete(t *testing.T, ss store.Store) { 313 // Save a new scheme. 314 s1 := &model.Scheme{ 315 DisplayName: model.NewId(), 316 Name: model.NewId(), 317 Description: model.NewId(), 318 Scope: model.SCHEME_SCOPE_TEAM, 319 } 320 321 // Check all fields saved correctly. 322 d1, err := ss.Scheme().Save(s1) 323 assert.NoError(t, err) 324 assert.Len(t, d1.Id, 26) 325 assert.Equal(t, s1.DisplayName, d1.DisplayName) 326 assert.Equal(t, s1.Name, d1.Name) 327 assert.Equal(t, s1.Description, d1.Description) 328 assert.NotZero(t, d1.CreateAt) 329 assert.NotZero(t, d1.UpdateAt) 330 assert.Zero(t, d1.DeleteAt) 331 assert.Equal(t, s1.Scope, d1.Scope) 332 assert.Len(t, d1.DefaultTeamAdminRole, 26) 333 assert.Len(t, d1.DefaultTeamUserRole, 26) 334 assert.Len(t, d1.DefaultTeamGuestRole, 26) 335 assert.Len(t, d1.DefaultChannelAdminRole, 26) 336 assert.Len(t, d1.DefaultChannelUserRole, 26) 337 assert.Len(t, d1.DefaultChannelGuestRole, 26) 338 339 // Check the default roles were created correctly. 340 role1, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamAdminRole) 341 assert.NoError(t, err) 342 assert.Equal(t, role1.Permissions, []string{"delete_others_posts"}) 343 assert.True(t, role1.SchemeManaged) 344 345 role2, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamUserRole) 346 assert.NoError(t, err) 347 assert.Equal(t, role2.Permissions, []string{"view_team", "add_user_to_team"}) 348 assert.True(t, role2.SchemeManaged) 349 350 role3, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelAdminRole) 351 assert.NoError(t, err) 352 assert.Equal(t, role3.Permissions, []string{"manage_public_channel_members", "manage_private_channel_members"}) 353 assert.True(t, role3.SchemeManaged) 354 355 role4, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelUserRole) 356 assert.NoError(t, err) 357 assert.Equal(t, role4.Permissions, []string{"read_channel", "create_post"}) 358 assert.True(t, role4.SchemeManaged) 359 360 role5, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamGuestRole) 361 assert.NoError(t, err) 362 assert.Equal(t, role5.Permissions, []string{"view_team"}) 363 assert.True(t, role5.SchemeManaged) 364 365 role6, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelGuestRole) 366 assert.NoError(t, err) 367 assert.Equal(t, role6.Permissions, []string{"read_channel", "create_post"}) 368 assert.True(t, role6.SchemeManaged) 369 370 // Delete the scheme. 371 d2, err := ss.Scheme().Delete(d1.Id) 372 require.NoError(t, err) 373 assert.NotZero(t, d2.DeleteAt) 374 375 // Check that the roles are deleted too. 376 role7, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamAdminRole) 377 assert.NoError(t, err) 378 assert.NotZero(t, role7.DeleteAt) 379 380 role8, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamUserRole) 381 assert.NoError(t, err) 382 assert.NotZero(t, role8.DeleteAt) 383 384 role9, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelAdminRole) 385 assert.NoError(t, err) 386 assert.NotZero(t, role9.DeleteAt) 387 388 role10, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelUserRole) 389 assert.NoError(t, err) 390 assert.NotZero(t, role10.DeleteAt) 391 392 role11, err := ss.Role().GetByName(context.Background(), d1.DefaultTeamGuestRole) 393 assert.NoError(t, err) 394 assert.NotZero(t, role11.DeleteAt) 395 396 role12, err := ss.Role().GetByName(context.Background(), d1.DefaultChannelGuestRole) 397 assert.NoError(t, err) 398 assert.NotZero(t, role12.DeleteAt) 399 400 // Try deleting a scheme that does not exist. 401 _, err = ss.Scheme().Delete(model.NewId()) 402 assert.Error(t, err) 403 404 // Try deleting a team scheme that's in use. 405 s4 := &model.Scheme{ 406 DisplayName: model.NewId(), 407 Name: model.NewId(), 408 Description: model.NewId(), 409 Scope: model.SCHEME_SCOPE_TEAM, 410 } 411 d4, err := ss.Scheme().Save(s4) 412 assert.NoError(t, err) 413 414 t4 := &model.Team{ 415 Name: "xx" + model.NewId(), 416 DisplayName: model.NewId(), 417 Email: MakeEmail(), 418 Type: model.TEAM_OPEN, 419 SchemeId: &d4.Id, 420 } 421 t4, err = ss.Team().Save(t4) 422 require.NoError(t, err) 423 424 _, err = ss.Scheme().Delete(d4.Id) 425 assert.NoError(t, err) 426 427 t5, err := ss.Team().Get(t4.Id) 428 require.NoError(t, err) 429 assert.Equal(t, "", *t5.SchemeId) 430 431 // Try deleting a channel scheme that's in use. 432 s5 := &model.Scheme{ 433 DisplayName: model.NewId(), 434 Name: model.NewId(), 435 Description: model.NewId(), 436 Scope: model.SCHEME_SCOPE_CHANNEL, 437 } 438 d5, err := ss.Scheme().Save(s5) 439 assert.NoError(t, err) 440 441 c5 := &model.Channel{ 442 TeamId: model.NewId(), 443 DisplayName: model.NewId(), 444 Name: model.NewId(), 445 Type: model.CHANNEL_OPEN, 446 SchemeId: &d5.Id, 447 } 448 c5, nErr := ss.Channel().Save(c5, -1) 449 assert.NoError(t, nErr) 450 451 _, err = ss.Scheme().Delete(d5.Id) 452 assert.NoError(t, err) 453 454 c6, nErr := ss.Channel().Get(c5.Id, true) 455 assert.NoError(t, nErr) 456 assert.Equal(t, "", *c6.SchemeId) 457 } 458 459 func testSchemeStorePermanentDeleteAll(t *testing.T, ss store.Store) { 460 s1 := &model.Scheme{ 461 Name: model.NewId(), 462 DisplayName: model.NewId(), 463 Description: model.NewId(), 464 Scope: model.SCHEME_SCOPE_TEAM, 465 } 466 467 s2 := &model.Scheme{ 468 Name: model.NewId(), 469 DisplayName: model.NewId(), 470 Description: model.NewId(), 471 Scope: model.SCHEME_SCOPE_CHANNEL, 472 } 473 474 s1, err := ss.Scheme().Save(s1) 475 require.NoError(t, err) 476 s2, err = ss.Scheme().Save(s2) 477 require.NoError(t, err) 478 479 err = ss.Scheme().PermanentDeleteAll() 480 assert.NoError(t, err) 481 482 _, err = ss.Scheme().Get(s1.Id) 483 assert.Error(t, err) 484 485 _, err = ss.Scheme().Get(s2.Id) 486 assert.Error(t, err) 487 488 schemes, err := ss.Scheme().GetAllPage("", 0, 100000) 489 assert.NoError(t, err) 490 assert.Empty(t, schemes) 491 } 492 493 func testSchemeStoreCountByScope(t *testing.T, ss store.Store) { 494 testCounts := func(expectedTeamCount, expectedChannelCount int) { 495 actualCount, err := ss.Scheme().CountByScope(model.SCHEME_SCOPE_TEAM) 496 require.NoError(t, err) 497 require.Equal(t, int64(expectedTeamCount), actualCount) 498 499 actualCount, err = ss.Scheme().CountByScope(model.SCHEME_SCOPE_CHANNEL) 500 require.NoError(t, err) 501 require.Equal(t, int64(expectedChannelCount), actualCount) 502 } 503 504 createScheme := func(scope string) { 505 _, err := ss.Scheme().Save(&model.Scheme{ 506 Name: model.NewId(), 507 DisplayName: model.NewId(), 508 Description: model.NewId(), 509 Scope: scope, 510 }) 511 require.NoError(t, err) 512 } 513 514 err := ss.Scheme().PermanentDeleteAll() 515 require.NoError(t, err) 516 517 createScheme(model.SCHEME_SCOPE_CHANNEL) 518 createScheme(model.SCHEME_SCOPE_TEAM) 519 testCounts(1, 1) 520 createScheme(model.SCHEME_SCOPE_TEAM) 521 testCounts(2, 1) 522 createScheme(model.SCHEME_SCOPE_CHANNEL) 523 testCounts(2, 2) 524 } 525 526 func testCountWithoutPermission(t *testing.T, ss store.Store) { 527 perm := model.PERMISSION_CREATE_POST.Id 528 529 createScheme := func(scope string) *model.Scheme { 530 scheme, err := ss.Scheme().Save(&model.Scheme{ 531 Name: model.NewId(), 532 DisplayName: model.NewId(), 533 Description: model.NewId(), 534 Scope: scope, 535 }) 536 require.NoError(t, err) 537 return scheme 538 } 539 540 getRoles := func(scheme *model.Scheme) (channelUser, channelGuest *model.Role) { 541 var err error 542 channelUser, err = ss.Role().GetByName(context.Background(), scheme.DefaultChannelUserRole) 543 require.NoError(t, err) 544 require.NotNil(t, channelUser) 545 channelGuest, err = ss.Role().GetByName(context.Background(), scheme.DefaultChannelGuestRole) 546 require.NoError(t, err) 547 require.NotNil(t, channelGuest) 548 return 549 } 550 551 teamScheme1 := createScheme(model.SCHEME_SCOPE_TEAM) 552 defer ss.Scheme().Delete(teamScheme1.Id) 553 teamScheme2 := createScheme(model.SCHEME_SCOPE_TEAM) 554 defer ss.Scheme().Delete(teamScheme2.Id) 555 channelScheme1 := createScheme(model.SCHEME_SCOPE_CHANNEL) 556 defer ss.Scheme().Delete(channelScheme1.Id) 557 channelScheme2 := createScheme(model.SCHEME_SCOPE_CHANNEL) 558 defer ss.Scheme().Delete(channelScheme2.Id) 559 560 ts1User, ts1Guest := getRoles(teamScheme1) 561 ts2User, ts2Guest := getRoles(teamScheme2) 562 cs1User, cs1Guest := getRoles(channelScheme1) 563 cs2User, cs2Guest := getRoles(channelScheme2) 564 565 allRoles := []*model.Role{ 566 ts1User, 567 ts1Guest, 568 ts2User, 569 ts2Guest, 570 cs1User, 571 cs1Guest, 572 cs2User, 573 cs2Guest, 574 } 575 576 teamUserCount, err := ss.Scheme().CountWithoutPermission(model.SCHEME_SCOPE_TEAM, perm, model.RoleScopeChannel, model.RoleTypeUser) 577 require.NoError(t, err) 578 require.Equal(t, int64(0), teamUserCount) 579 580 teamGuestCount, err := ss.Scheme().CountWithoutPermission(model.SCHEME_SCOPE_TEAM, perm, model.RoleScopeChannel, model.RoleTypeGuest) 581 require.NoError(t, err) 582 require.Equal(t, int64(0), teamGuestCount) 583 584 var tests = []struct { 585 removePermissionFromRole *model.Role 586 expectTeamSchemeChannelUserCount int 587 expectTeamSchemeChannelGuestCount int 588 expectChannelSchemeChannelUserCount int 589 expectChannelSchemeChannelGuestCount int 590 }{ 591 {ts1User, 1, 0, 0, 0}, 592 {ts1Guest, 1, 1, 0, 0}, 593 {ts2User, 2, 1, 0, 0}, 594 {ts2Guest, 2, 2, 0, 0}, 595 {cs1User, 2, 2, 1, 0}, 596 {cs1Guest, 2, 2, 1, 1}, 597 {cs2User, 2, 2, 2, 1}, 598 {cs2Guest, 2, 2, 2, 2}, 599 } 600 601 removePermission := func(targetRole *model.Role) { 602 roleMatched := false 603 for _, role := range allRoles { 604 if targetRole == role { 605 roleMatched = true 606 role.Permissions = []string{} 607 _, err = ss.Role().Save(role) 608 require.NoError(t, err) 609 } 610 } 611 require.True(t, roleMatched) 612 } 613 614 for _, test := range tests { 615 removePermission(test.removePermissionFromRole) 616 617 count, err := ss.Scheme().CountWithoutPermission(model.SCHEME_SCOPE_TEAM, perm, model.RoleScopeChannel, model.RoleTypeUser) 618 require.NoError(t, err) 619 require.Equal(t, int64(test.expectTeamSchemeChannelUserCount), count) 620 621 count, err = ss.Scheme().CountWithoutPermission(model.SCHEME_SCOPE_TEAM, perm, model.RoleScopeChannel, model.RoleTypeGuest) 622 require.NoError(t, err) 623 require.Equal(t, int64(test.expectTeamSchemeChannelGuestCount), count) 624 625 count, err = ss.Scheme().CountWithoutPermission(model.SCHEME_SCOPE_CHANNEL, perm, model.RoleScopeChannel, model.RoleTypeUser) 626 require.NoError(t, err) 627 require.Equal(t, int64(test.expectChannelSchemeChannelUserCount), count) 628 629 count, err = ss.Scheme().CountWithoutPermission(model.SCHEME_SCOPE_CHANNEL, perm, model.RoleScopeChannel, model.RoleTypeGuest) 630 require.NoError(t, err) 631 require.Equal(t, int64(test.expectChannelSchemeChannelGuestCount), count) 632 } 633 }