github.com/mattermost/mattermost-server/v5@v5.39.3/store/storetest/role_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  	"fmt"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  
    14  	"github.com/mattermost/mattermost-server/v5/model"
    15  	"github.com/mattermost/mattermost-server/v5/store"
    16  )
    17  
    18  func TestRoleStore(t *testing.T, ss store.Store, s SqlStore) {
    19  	t.Run("Save", func(t *testing.T) { testRoleStoreSave(t, ss) })
    20  	t.Run("Get", func(t *testing.T) { testRoleStoreGet(t, ss) })
    21  	t.Run("GetAll", func(t *testing.T) { testRoleStoreGetAll(t, ss) })
    22  	t.Run("GetByName", func(t *testing.T) { testRoleStoreGetByName(t, ss) })
    23  	t.Run("GetNames", func(t *testing.T) { testRoleStoreGetByNames(t, ss) })
    24  	t.Run("Delete", func(t *testing.T) { testRoleStoreDelete(t, ss) })
    25  	t.Run("PermanentDeleteAll", func(t *testing.T) { testRoleStorePermanentDeleteAll(t, ss) })
    26  	t.Run("LowerScopedChannelSchemeRoles_AllChannelSchemeRoles", func(t *testing.T) { testRoleStoreLowerScopedChannelSchemeRoles(t, ss) })
    27  	t.Run("ChannelHigherScopedPermissionsBlankTeamSchemeChannelGuest", func(t *testing.T) { testRoleStoreChannelHigherScopedPermissionsBlankTeamSchemeChannelGuest(t, ss, s) })
    28  }
    29  
    30  func testRoleStoreSave(t *testing.T, ss store.Store) {
    31  	// Save a new role.
    32  	r1 := &model.Role{
    33  		Name:        model.NewId(),
    34  		DisplayName: model.NewId(),
    35  		Description: model.NewId(),
    36  		Permissions: []string{
    37  			"invite_user",
    38  			"create_public_channel",
    39  			"add_user_to_team",
    40  		},
    41  		SchemeManaged: false,
    42  	}
    43  
    44  	d1, err := ss.Role().Save(r1)
    45  	assert.NoError(t, err)
    46  	assert.Len(t, d1.Id, 26)
    47  	assert.Equal(t, r1.Name, d1.Name)
    48  	assert.Equal(t, r1.DisplayName, d1.DisplayName)
    49  	assert.Equal(t, r1.Description, d1.Description)
    50  	assert.Equal(t, r1.Permissions, d1.Permissions)
    51  	assert.Equal(t, r1.SchemeManaged, d1.SchemeManaged)
    52  
    53  	// Change the role permissions and update.
    54  	d1.Permissions = []string{
    55  		"invite_user",
    56  		"add_user_to_team",
    57  		"delete_public_channel",
    58  	}
    59  
    60  	d2, err := ss.Role().Save(d1)
    61  	assert.NoError(t, err)
    62  	assert.Len(t, d2.Id, 26)
    63  	assert.Equal(t, r1.Name, d2.Name)
    64  	assert.Equal(t, r1.DisplayName, d2.DisplayName)
    65  	assert.Equal(t, r1.Description, d2.Description)
    66  	assert.Equal(t, d1.Permissions, d2.Permissions)
    67  	assert.Equal(t, r1.SchemeManaged, d2.SchemeManaged)
    68  
    69  	// Try saving one with an invalid ID set.
    70  	r3 := &model.Role{
    71  		Id:          model.NewId(),
    72  		Name:        model.NewId(),
    73  		DisplayName: model.NewId(),
    74  		Description: model.NewId(),
    75  		Permissions: []string{
    76  			"invite_user",
    77  			"create_public_channel",
    78  			"add_user_to_team",
    79  		},
    80  		SchemeManaged: false,
    81  	}
    82  
    83  	_, err = ss.Role().Save(r3)
    84  	assert.Error(t, err)
    85  
    86  	// Try saving one with a duplicate "name" field.
    87  	r4 := &model.Role{
    88  		Name:        r1.Name,
    89  		DisplayName: model.NewId(),
    90  		Description: model.NewId(),
    91  		Permissions: []string{
    92  			"invite_user",
    93  			"create_public_channel",
    94  			"add_user_to_team",
    95  		},
    96  		SchemeManaged: false,
    97  	}
    98  
    99  	_, err = ss.Role().Save(r4)
   100  	assert.Error(t, err)
   101  }
   102  
   103  func testRoleStoreGetAll(t *testing.T, ss store.Store) {
   104  	prev, err := ss.Role().GetAll()
   105  	require.NoError(t, err)
   106  	prevCount := len(prev)
   107  
   108  	// Save a role to test with.
   109  	r1 := &model.Role{
   110  		Name:        model.NewId(),
   111  		DisplayName: model.NewId(),
   112  		Description: model.NewId(),
   113  		Permissions: []string{
   114  			"invite_user",
   115  			"create_public_channel",
   116  			"add_user_to_team",
   117  		},
   118  		SchemeManaged: false,
   119  	}
   120  
   121  	_, err = ss.Role().Save(r1)
   122  	require.NoError(t, err)
   123  
   124  	r2 := &model.Role{
   125  		Name:        model.NewId(),
   126  		DisplayName: model.NewId(),
   127  		Description: model.NewId(),
   128  		Permissions: []string{
   129  			"invite_user",
   130  			"create_public_channel",
   131  			"add_user_to_team",
   132  		},
   133  		SchemeManaged: false,
   134  	}
   135  	_, err = ss.Role().Save(r2)
   136  	require.NoError(t, err)
   137  
   138  	data, err := ss.Role().GetAll()
   139  	require.NoError(t, err)
   140  	assert.Len(t, data, prevCount+2)
   141  }
   142  
   143  func testRoleStoreGet(t *testing.T, ss store.Store) {
   144  	// Save a role to test with.
   145  	r1 := &model.Role{
   146  		Name:        model.NewId(),
   147  		DisplayName: model.NewId(),
   148  		Description: model.NewId(),
   149  		Permissions: []string{
   150  			"invite_user",
   151  			"create_public_channel",
   152  			"add_user_to_team",
   153  		},
   154  		SchemeManaged: false,
   155  	}
   156  
   157  	d1, err := ss.Role().Save(r1)
   158  	assert.NoError(t, err)
   159  	assert.Len(t, d1.Id, 26)
   160  
   161  	// Get a valid role
   162  	d2, err := ss.Role().Get(d1.Id)
   163  	assert.NoError(t, err)
   164  	assert.Equal(t, d1.Id, d2.Id)
   165  	assert.Equal(t, r1.Name, d2.Name)
   166  	assert.Equal(t, r1.DisplayName, d2.DisplayName)
   167  	assert.Equal(t, r1.Description, d2.Description)
   168  	assert.Equal(t, r1.Permissions, d2.Permissions)
   169  	assert.Equal(t, r1.SchemeManaged, d2.SchemeManaged)
   170  
   171  	// Get an invalid role
   172  	_, err = ss.Role().Get(model.NewId())
   173  	assert.Error(t, err)
   174  }
   175  
   176  func testRoleStoreGetByName(t *testing.T, ss store.Store) {
   177  	// Save a role to test with.
   178  	r1 := &model.Role{
   179  		Name:        model.NewId(),
   180  		DisplayName: model.NewId(),
   181  		Description: model.NewId(),
   182  		Permissions: []string{
   183  			"invite_user",
   184  			"create_public_channel",
   185  			"add_user_to_team",
   186  		},
   187  		SchemeManaged: false,
   188  	}
   189  
   190  	d1, err := ss.Role().Save(r1)
   191  	assert.NoError(t, err)
   192  	assert.Len(t, d1.Id, 26)
   193  
   194  	// Get a valid role
   195  	d2, err := ss.Role().GetByName(context.Background(), d1.Name)
   196  	assert.NoError(t, err)
   197  	assert.Equal(t, d1.Id, d2.Id)
   198  	assert.Equal(t, r1.Name, d2.Name)
   199  	assert.Equal(t, r1.DisplayName, d2.DisplayName)
   200  	assert.Equal(t, r1.Description, d2.Description)
   201  	assert.Equal(t, r1.Permissions, d2.Permissions)
   202  	assert.Equal(t, r1.SchemeManaged, d2.SchemeManaged)
   203  
   204  	// Get an invalid role
   205  	_, err = ss.Role().GetByName(context.Background(), model.NewId())
   206  	assert.Error(t, err)
   207  }
   208  
   209  func testRoleStoreGetByNames(t *testing.T, ss store.Store) {
   210  	// Save some roles to test with.
   211  	r1 := &model.Role{
   212  		Name:        model.NewId(),
   213  		DisplayName: model.NewId(),
   214  		Description: model.NewId(),
   215  		Permissions: []string{
   216  			"invite_user",
   217  			"create_public_channel",
   218  			"add_user_to_team",
   219  		},
   220  		SchemeManaged: false,
   221  	}
   222  	r2 := &model.Role{
   223  		Name:        model.NewId(),
   224  		DisplayName: model.NewId(),
   225  		Description: model.NewId(),
   226  		Permissions: []string{
   227  			"read_channel",
   228  			"create_public_channel",
   229  			"add_user_to_team",
   230  		},
   231  		SchemeManaged: false,
   232  	}
   233  	r3 := &model.Role{
   234  		Name:        model.NewId(),
   235  		DisplayName: model.NewId(),
   236  		Description: model.NewId(),
   237  		Permissions: []string{
   238  			"invite_user",
   239  			"delete_private_channel",
   240  			"add_user_to_team",
   241  		},
   242  		SchemeManaged: false,
   243  	}
   244  
   245  	d1, err := ss.Role().Save(r1)
   246  	assert.NoError(t, err)
   247  	assert.Len(t, d1.Id, 26)
   248  
   249  	d2, err := ss.Role().Save(r2)
   250  	assert.NoError(t, err)
   251  	assert.Len(t, d2.Id, 26)
   252  
   253  	d3, err := ss.Role().Save(r3)
   254  	assert.NoError(t, err)
   255  	assert.Len(t, d3.Id, 26)
   256  
   257  	// Get two valid roles.
   258  	n4 := []string{r1.Name, r2.Name}
   259  	roles4, err := ss.Role().GetByNames(n4)
   260  	assert.NoError(t, err)
   261  	assert.Len(t, roles4, 2)
   262  	assert.Contains(t, roles4, d1)
   263  	assert.Contains(t, roles4, d2)
   264  	assert.NotContains(t, roles4, d3)
   265  
   266  	// Get two invalid roles.
   267  	n5 := []string{model.NewId(), model.NewId()}
   268  	roles5, err := ss.Role().GetByNames(n5)
   269  	assert.NoError(t, err)
   270  	assert.Empty(t, roles5)
   271  
   272  	// Get one valid one and one invalid one.
   273  	n6 := []string{r1.Name, model.NewId()}
   274  	roles6, err := ss.Role().GetByNames(n6)
   275  	assert.NoError(t, err)
   276  	assert.Len(t, roles6, 1)
   277  	assert.Contains(t, roles6, d1)
   278  	assert.NotContains(t, roles6, d2)
   279  	assert.NotContains(t, roles6, d3)
   280  }
   281  
   282  func testRoleStoreDelete(t *testing.T, ss store.Store) {
   283  	// Save a role to test with.
   284  	r1 := &model.Role{
   285  		Name:        model.NewId(),
   286  		DisplayName: model.NewId(),
   287  		Description: model.NewId(),
   288  		Permissions: []string{
   289  			"invite_user",
   290  			"create_public_channel",
   291  			"add_user_to_team",
   292  		},
   293  		SchemeManaged: false,
   294  	}
   295  
   296  	d1, err := ss.Role().Save(r1)
   297  	assert.NoError(t, err)
   298  	assert.Len(t, d1.Id, 26)
   299  
   300  	// Check the role is there.
   301  	_, err = ss.Role().Get(d1.Id)
   302  	assert.NoError(t, err)
   303  
   304  	// Delete the role.
   305  	_, err = ss.Role().Delete(d1.Id)
   306  	assert.NoError(t, err)
   307  
   308  	// Check the role is deleted there.
   309  	d2, err := ss.Role().Get(d1.Id)
   310  	assert.NoError(t, err)
   311  	assert.NotZero(t, d2.DeleteAt)
   312  
   313  	d3, err := ss.Role().GetByName(context.Background(), d1.Name)
   314  	assert.NoError(t, err)
   315  	assert.NotZero(t, d3.DeleteAt)
   316  
   317  	// Try and delete a role that does not exist.
   318  	_, err = ss.Role().Delete(model.NewId())
   319  	assert.Error(t, err)
   320  }
   321  
   322  func testRoleStorePermanentDeleteAll(t *testing.T, ss store.Store) {
   323  	r1 := &model.Role{
   324  		Name:        model.NewId(),
   325  		DisplayName: model.NewId(),
   326  		Description: model.NewId(),
   327  		Permissions: []string{
   328  			"invite_user",
   329  			"create_public_channel",
   330  			"add_user_to_team",
   331  		},
   332  		SchemeManaged: false,
   333  	}
   334  
   335  	r2 := &model.Role{
   336  		Name:        model.NewId(),
   337  		DisplayName: model.NewId(),
   338  		Description: model.NewId(),
   339  		Permissions: []string{
   340  			"read_channel",
   341  			"create_public_channel",
   342  			"add_user_to_team",
   343  		},
   344  		SchemeManaged: false,
   345  	}
   346  
   347  	_, err := ss.Role().Save(r1)
   348  	require.NoError(t, err)
   349  	_, err = ss.Role().Save(r2)
   350  	require.NoError(t, err)
   351  
   352  	roles, err := ss.Role().GetByNames([]string{r1.Name, r2.Name})
   353  	assert.NoError(t, err)
   354  	assert.Len(t, roles, 2)
   355  
   356  	err = ss.Role().PermanentDeleteAll()
   357  	assert.NoError(t, err)
   358  
   359  	roles, err = ss.Role().GetByNames([]string{r1.Name, r2.Name})
   360  	assert.NoError(t, err)
   361  	assert.Empty(t, roles)
   362  }
   363  
   364  func testRoleStoreLowerScopedChannelSchemeRoles(t *testing.T, ss store.Store) {
   365  	createDefaultRoles(ss)
   366  
   367  	teamScheme1 := &model.Scheme{
   368  		DisplayName: model.NewId(),
   369  		Name:        model.NewId(),
   370  		Description: model.NewId(),
   371  		Scope:       model.SCHEME_SCOPE_TEAM,
   372  	}
   373  	teamScheme1, err := ss.Scheme().Save(teamScheme1)
   374  	require.NoError(t, err)
   375  	defer ss.Scheme().Delete(teamScheme1.Id)
   376  
   377  	teamScheme2 := &model.Scheme{
   378  		DisplayName: model.NewId(),
   379  		Name:        model.NewId(),
   380  		Description: model.NewId(),
   381  		Scope:       model.SCHEME_SCOPE_TEAM,
   382  	}
   383  	teamScheme2, err = ss.Scheme().Save(teamScheme2)
   384  	require.NoError(t, err)
   385  	defer ss.Scheme().Delete(teamScheme2.Id)
   386  
   387  	channelScheme1 := &model.Scheme{
   388  		DisplayName: model.NewId(),
   389  		Name:        model.NewId(),
   390  		Description: model.NewId(),
   391  		Scope:       model.SCHEME_SCOPE_CHANNEL,
   392  	}
   393  	channelScheme1, err = ss.Scheme().Save(channelScheme1)
   394  	require.NoError(t, err)
   395  	defer ss.Scheme().Delete(channelScheme1.Id)
   396  
   397  	channelScheme2 := &model.Scheme{
   398  		DisplayName: model.NewId(),
   399  		Name:        model.NewId(),
   400  		Description: model.NewId(),
   401  		Scope:       model.SCHEME_SCOPE_CHANNEL,
   402  	}
   403  	channelScheme2, err = ss.Scheme().Save(channelScheme2)
   404  	require.NoError(t, err)
   405  	defer ss.Scheme().Delete(channelScheme1.Id)
   406  
   407  	team1 := &model.Team{
   408  		DisplayName: "Name",
   409  		Name:        "zz" + model.NewId(),
   410  		Email:       MakeEmail(),
   411  		Type:        model.TEAM_OPEN,
   412  		SchemeId:    &teamScheme1.Id,
   413  	}
   414  	team1, err = ss.Team().Save(team1)
   415  	require.NoError(t, err)
   416  	defer ss.Team().PermanentDelete(team1.Id)
   417  
   418  	team2 := &model.Team{
   419  		DisplayName: "Name",
   420  		Name:        "zz" + model.NewId(),
   421  		Email:       MakeEmail(),
   422  		Type:        model.TEAM_OPEN,
   423  		SchemeId:    &teamScheme2.Id,
   424  	}
   425  	team2, err = ss.Team().Save(team2)
   426  	require.NoError(t, err)
   427  	defer ss.Team().PermanentDelete(team2.Id)
   428  
   429  	channel1 := &model.Channel{
   430  		TeamId:      team1.Id,
   431  		DisplayName: "Display " + model.NewId(),
   432  		Name:        "zz" + model.NewId() + "b",
   433  		Type:        model.CHANNEL_OPEN,
   434  		SchemeId:    &channelScheme1.Id,
   435  	}
   436  	channel1, nErr := ss.Channel().Save(channel1, -1)
   437  	require.NoError(t, nErr)
   438  	defer ss.Channel().Delete(channel1.Id, 0)
   439  
   440  	channel2 := &model.Channel{
   441  		TeamId:      team2.Id,
   442  		DisplayName: "Display " + model.NewId(),
   443  		Name:        "zz" + model.NewId() + "b",
   444  		Type:        model.CHANNEL_OPEN,
   445  		SchemeId:    &channelScheme2.Id,
   446  	}
   447  	channel2, nErr = ss.Channel().Save(channel2, -1)
   448  	require.NoError(t, nErr)
   449  	defer ss.Channel().Delete(channel2.Id, 0)
   450  
   451  	t.Run("ChannelRolesUnderTeamRole", func(t *testing.T) {
   452  		t.Run("guest role for the right team's channels are returned", func(t *testing.T) {
   453  			actualRoles, err := ss.Role().ChannelRolesUnderTeamRole(teamScheme1.DefaultChannelGuestRole)
   454  			require.NoError(t, err)
   455  
   456  			var actualRoleNames []string
   457  			for _, role := range actualRoles {
   458  				actualRoleNames = append(actualRoleNames, role.Name)
   459  			}
   460  
   461  			require.Contains(t, actualRoleNames, channelScheme1.DefaultChannelGuestRole)
   462  			require.NotContains(t, actualRoleNames, channelScheme2.DefaultChannelGuestRole)
   463  		})
   464  
   465  		t.Run("user role for the right team's channels are returned", func(t *testing.T) {
   466  			actualRoles, err := ss.Role().ChannelRolesUnderTeamRole(teamScheme1.DefaultChannelUserRole)
   467  			require.NoError(t, err)
   468  
   469  			var actualRoleNames []string
   470  			for _, role := range actualRoles {
   471  				actualRoleNames = append(actualRoleNames, role.Name)
   472  			}
   473  
   474  			require.Contains(t, actualRoleNames, channelScheme1.DefaultChannelUserRole)
   475  			require.NotContains(t, actualRoleNames, channelScheme2.DefaultChannelUserRole)
   476  		})
   477  
   478  		t.Run("admin role for the right team's channels are returned", func(t *testing.T) {
   479  			actualRoles, err := ss.Role().ChannelRolesUnderTeamRole(teamScheme1.DefaultChannelAdminRole)
   480  			require.NoError(t, err)
   481  
   482  			var actualRoleNames []string
   483  			for _, role := range actualRoles {
   484  				actualRoleNames = append(actualRoleNames, role.Name)
   485  			}
   486  
   487  			require.Contains(t, actualRoleNames, channelScheme1.DefaultChannelAdminRole)
   488  			require.NotContains(t, actualRoleNames, channelScheme2.DefaultChannelAdminRole)
   489  		})
   490  	})
   491  
   492  	t.Run("AllChannelSchemeRoles", func(t *testing.T) {
   493  		t.Run("guest role for the right team's channels are returned", func(t *testing.T) {
   494  			actualRoles, err := ss.Role().AllChannelSchemeRoles()
   495  			require.NoError(t, err)
   496  
   497  			var actualRoleNames []string
   498  			for _, role := range actualRoles {
   499  				actualRoleNames = append(actualRoleNames, role.Name)
   500  			}
   501  
   502  			allRoleNames := []string{
   503  				channelScheme1.DefaultChannelGuestRole,
   504  				channelScheme2.DefaultChannelGuestRole,
   505  
   506  				channelScheme1.DefaultChannelUserRole,
   507  				channelScheme2.DefaultChannelUserRole,
   508  
   509  				channelScheme1.DefaultChannelAdminRole,
   510  				channelScheme2.DefaultChannelAdminRole,
   511  			}
   512  
   513  			for _, roleName := range allRoleNames {
   514  				require.Contains(t, actualRoleNames, roleName)
   515  			}
   516  		})
   517  	})
   518  }
   519  
   520  func testRoleStoreChannelHigherScopedPermissionsBlankTeamSchemeChannelGuest(t *testing.T, ss store.Store, s SqlStore) {
   521  	teamScheme := &model.Scheme{
   522  		DisplayName: model.NewId(),
   523  		Name:        model.NewId(),
   524  		Description: model.NewId(),
   525  		Scope:       model.SCHEME_SCOPE_TEAM,
   526  	}
   527  	teamScheme, err := ss.Scheme().Save(teamScheme)
   528  	require.NoError(t, err)
   529  	defer ss.Scheme().Delete(teamScheme.Id)
   530  
   531  	channelScheme := &model.Scheme{
   532  		DisplayName: model.NewId(),
   533  		Name:        model.NewId(),
   534  		Description: model.NewId(),
   535  		Scope:       model.SCHEME_SCOPE_CHANNEL,
   536  	}
   537  	channelScheme, err = ss.Scheme().Save(channelScheme)
   538  	require.NoError(t, err)
   539  	defer ss.Scheme().Delete(channelScheme.Id)
   540  
   541  	team := &model.Team{
   542  		DisplayName: "Name",
   543  		Name:        "zz" + model.NewId(),
   544  		Email:       MakeEmail(),
   545  		Type:        model.TEAM_OPEN,
   546  		SchemeId:    &teamScheme.Id,
   547  	}
   548  	team, err = ss.Team().Save(team)
   549  	require.NoError(t, err)
   550  	defer ss.Team().PermanentDelete(team.Id)
   551  
   552  	channel := &model.Channel{
   553  		TeamId:      team.Id,
   554  		DisplayName: "Display " + model.NewId(),
   555  		Name:        "zz" + model.NewId() + "b",
   556  		Type:        model.CHANNEL_OPEN,
   557  		SchemeId:    &channelScheme.Id,
   558  	}
   559  	channel, nErr := ss.Channel().Save(channel, -1)
   560  	require.NoError(t, nErr)
   561  	defer ss.Channel().Delete(channel.Id, 0)
   562  
   563  	channelSchemeUserRole, err := ss.Role().GetByName(context.Background(), channelScheme.DefaultChannelUserRole)
   564  	require.NoError(t, err)
   565  	channelSchemeUserRole.Permissions = []string{}
   566  	_, err = ss.Role().Save(channelSchemeUserRole)
   567  	require.NoError(t, err)
   568  
   569  	teamSchemeUserRole, err := ss.Role().GetByName(context.Background(), teamScheme.DefaultChannelUserRole)
   570  	require.NoError(t, err)
   571  	teamSchemeUserRole.Permissions = []string{model.PERMISSION_UPLOAD_FILE.Id}
   572  	_, err = ss.Role().Save(teamSchemeUserRole)
   573  	require.NoError(t, err)
   574  
   575  	// get the channel scheme user role again and ensure that it has the permission inherited from the team
   576  	// scheme user role
   577  	roleMapBefore, err := ss.Role().ChannelHigherScopedPermissions([]string{channelSchemeUserRole.Name})
   578  	require.NoError(t, err)
   579  
   580  	// blank-out the guest role to simulate an old team scheme, ensure it's blank
   581  	result, sqlErr := s.GetMaster().Exec(fmt.Sprintf("UPDATE Schemes SET DefaultChannelGuestRole = '' WHERE Id = '%s'", teamScheme.Id))
   582  	require.NoError(t, sqlErr)
   583  	rows, serr := result.RowsAffected()
   584  	require.NoError(t, serr)
   585  	require.Equal(t, int64(1), rows)
   586  	teamScheme, err = ss.Scheme().Get(teamScheme.Id)
   587  	require.NoError(t, err)
   588  	require.Equal(t, "", teamScheme.DefaultChannelGuestRole)
   589  
   590  	// trigger a cache clear
   591  	_, err = ss.Role().Save(channelSchemeUserRole)
   592  	require.NoError(t, err)
   593  
   594  	roleMapAfter, err := ss.Role().ChannelHigherScopedPermissions([]string{channelSchemeUserRole.Name})
   595  	require.NoError(t, err)
   596  
   597  	require.Equal(t, len(roleMapBefore), len(roleMapAfter))
   598  }