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