github.com/mattermost/mattermost-server/v5@v5.39.3/store/sqlstore/channel_store_test.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package sqlstore
     5  
     6  import (
     7  	"database/sql"
     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  	"github.com/mattermost/mattermost-server/v5/store/searchtest"
    16  	"github.com/mattermost/mattermost-server/v5/store/storetest"
    17  )
    18  
    19  func TestChannelStore(t *testing.T) {
    20  	StoreTestWithSqlStore(t, storetest.TestChannelStore)
    21  }
    22  
    23  func TestSearchChannelStore(t *testing.T) {
    24  	StoreTestWithSearchTestEngine(t, searchtest.TestSearchChannelStore)
    25  }
    26  
    27  func TestChannelSearchQuerySQLInjection(t *testing.T) {
    28  	for _, st := range storeTypes {
    29  		t.Run(st.Name, func(t *testing.T) {
    30  			s := &SqlChannelStore{
    31  				SqlStore: st.SqlStore,
    32  			}
    33  
    34  			opts := store.ChannelSearchOpts{Term: "'or'1'=sleep(3))); -- -"}
    35  			builder := s.channelSearchQuery(&opts)
    36  			query, _, err := builder.ToSql()
    37  			require.NoError(t, err)
    38  			assert.NotContains(t, query, "sleep")
    39  		})
    40  	}
    41  }
    42  
    43  func TestChannelStoreInternalDataTypes(t *testing.T) {
    44  	t.Run("NewChannelMemberFromModel", func(t *testing.T) { testNewChannelMemberFromModel(t) })
    45  	t.Run("ChannelMemberWithSchemeRolesToModel", func(t *testing.T) { testChannelMemberWithSchemeRolesToModel(t) })
    46  	t.Run("AllChannelMemberProcess", func(t *testing.T) { testAllChannelMemberProcess(t) })
    47  }
    48  
    49  func testNewChannelMemberFromModel(t *testing.T) {
    50  	m := model.ChannelMember{
    51  		ChannelId:     model.NewId(),
    52  		UserId:        model.NewId(),
    53  		Roles:         "channel_user channel_admin custom_role",
    54  		LastViewedAt:  12345,
    55  		MsgCount:      2,
    56  		MentionCount:  1,
    57  		NotifyProps:   model.StringMap{"key": "value"},
    58  		LastUpdateAt:  54321,
    59  		SchemeGuest:   false,
    60  		SchemeUser:    true,
    61  		SchemeAdmin:   true,
    62  		ExplicitRoles: "custom_role",
    63  	}
    64  
    65  	db := NewChannelMemberFromModel(&m)
    66  
    67  	assert.Equal(t, m.ChannelId, db.ChannelId)
    68  	assert.Equal(t, m.UserId, db.UserId)
    69  	assert.Equal(t, m.LastViewedAt, db.LastViewedAt)
    70  	assert.Equal(t, m.MsgCount, db.MsgCount)
    71  	assert.Equal(t, m.MentionCount, db.MentionCount)
    72  	assert.Equal(t, int64(0), m.MentionCountRoot)
    73  	assert.Equal(t, m.NotifyProps, db.NotifyProps)
    74  	assert.Equal(t, m.LastUpdateAt, db.LastUpdateAt)
    75  	assert.Equal(t, true, db.SchemeGuest.Valid)
    76  	assert.Equal(t, true, db.SchemeUser.Valid)
    77  	assert.Equal(t, true, db.SchemeAdmin.Valid)
    78  	assert.Equal(t, m.SchemeGuest, db.SchemeGuest.Bool)
    79  	assert.Equal(t, m.SchemeUser, db.SchemeUser.Bool)
    80  	assert.Equal(t, m.SchemeAdmin, db.SchemeAdmin.Bool)
    81  	assert.Equal(t, m.ExplicitRoles, db.Roles)
    82  }
    83  
    84  func testChannelMemberWithSchemeRolesToModel(t *testing.T) {
    85  	t.Run("BasicProperties", func(t *testing.T) {
    86  		// Test all the non-roles properties here.
    87  		db := channelMemberWithSchemeRoles{
    88  			ChannelId:                     model.NewId(),
    89  			UserId:                        model.NewId(),
    90  			Roles:                         "custom_role",
    91  			LastViewedAt:                  12345,
    92  			MsgCount:                      2,
    93  			MentionCount:                  1,
    94  			NotifyProps:                   model.StringMap{"key": "value"},
    95  			LastUpdateAt:                  54321,
    96  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
    97  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
    98  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
    99  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   100  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   101  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   102  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   103  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   104  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   105  		}
   106  
   107  		m := db.ToModel()
   108  
   109  		assert.Equal(t, db.ChannelId, m.ChannelId)
   110  		assert.Equal(t, db.UserId, m.UserId)
   111  		assert.Equal(t, "custom_role channel_user channel_admin", m.Roles)
   112  		assert.Equal(t, db.LastViewedAt, m.LastViewedAt)
   113  		assert.Equal(t, db.MsgCount, m.MsgCount)
   114  		assert.Equal(t, db.MentionCount, m.MentionCount)
   115  		assert.Equal(t, db.MentionCountRoot, m.MentionCountRoot)
   116  		assert.Equal(t, db.NotifyProps, m.NotifyProps)
   117  		assert.Equal(t, db.LastUpdateAt, m.LastUpdateAt)
   118  		assert.Equal(t, db.SchemeGuest.Bool, m.SchemeGuest)
   119  		assert.Equal(t, db.SchemeUser.Bool, m.SchemeUser)
   120  		assert.Equal(t, db.SchemeAdmin.Bool, m.SchemeAdmin)
   121  		assert.Equal(t, db.Roles, m.ExplicitRoles)
   122  	})
   123  
   124  	// Example data *before* the Phase 2 migration has taken place.
   125  	t.Run("Unmigrated_NoScheme_User", func(t *testing.T) {
   126  		db := channelMemberWithSchemeRoles{
   127  			Roles:                         "channel_user",
   128  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
   129  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
   130  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
   131  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   132  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   133  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   134  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   135  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   136  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   137  		}
   138  
   139  		cm := db.ToModel()
   140  
   141  		assert.Equal(t, "channel_user", cm.Roles)
   142  		assert.Equal(t, false, cm.SchemeGuest)
   143  		assert.Equal(t, true, cm.SchemeUser)
   144  		assert.Equal(t, false, cm.SchemeAdmin)
   145  		assert.Equal(t, "", cm.ExplicitRoles)
   146  	})
   147  
   148  	t.Run("Unmigrated_NoScheme_Admin", func(t *testing.T) {
   149  		db := channelMemberWithSchemeRoles{
   150  			Roles:                         "channel_admin channel_user",
   151  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
   152  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
   153  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
   154  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   155  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   156  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   157  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   158  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   159  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   160  		}
   161  
   162  		cm := db.ToModel()
   163  
   164  		assert.Equal(t, "channel_user channel_admin", cm.Roles)
   165  		assert.Equal(t, false, cm.SchemeGuest)
   166  		assert.Equal(t, true, cm.SchemeUser)
   167  		assert.Equal(t, true, cm.SchemeAdmin)
   168  		assert.Equal(t, "", cm.ExplicitRoles)
   169  	})
   170  
   171  	t.Run("Unmigrated_NoScheme_CustomRole", func(t *testing.T) {
   172  		db := channelMemberWithSchemeRoles{
   173  			Roles:                         "custom_role",
   174  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
   175  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
   176  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
   177  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   178  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   179  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   180  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   181  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   182  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   183  		}
   184  
   185  		cm := db.ToModel()
   186  
   187  		assert.Equal(t, "custom_role", cm.Roles)
   188  		assert.Equal(t, false, cm.SchemeUser)
   189  		assert.Equal(t, false, cm.SchemeAdmin)
   190  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   191  	})
   192  
   193  	t.Run("Unmigrated_NoScheme_UserAndCustomRole", func(t *testing.T) {
   194  		db := channelMemberWithSchemeRoles{
   195  			Roles:                         "channel_user custom_role",
   196  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
   197  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
   198  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
   199  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   200  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   201  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   202  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   203  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   204  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   205  		}
   206  
   207  		cm := db.ToModel()
   208  
   209  		assert.Equal(t, "custom_role channel_user", cm.Roles)
   210  		assert.Equal(t, false, cm.SchemeGuest)
   211  		assert.Equal(t, true, cm.SchemeUser)
   212  		assert.Equal(t, false, cm.SchemeAdmin)
   213  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   214  	})
   215  
   216  	t.Run("Unmigrated_NoScheme_AdminAndCustomRole", func(t *testing.T) {
   217  		db := channelMemberWithSchemeRoles{
   218  			Roles:                         "channel_user channel_admin custom_role",
   219  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
   220  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
   221  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
   222  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   223  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   224  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   225  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   226  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   227  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   228  		}
   229  
   230  		cm := db.ToModel()
   231  
   232  		assert.Equal(t, "custom_role channel_user channel_admin", cm.Roles)
   233  		assert.Equal(t, false, cm.SchemeGuest)
   234  		assert.Equal(t, true, cm.SchemeUser)
   235  		assert.Equal(t, true, cm.SchemeAdmin)
   236  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   237  	})
   238  
   239  	t.Run("Unmigrated_NoScheme_NoRoles", func(t *testing.T) {
   240  		db := channelMemberWithSchemeRoles{
   241  			Roles:                         "",
   242  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
   243  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
   244  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
   245  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   246  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   247  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   248  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   249  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   250  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   251  		}
   252  
   253  		cm := db.ToModel()
   254  
   255  		assert.Equal(t, "", cm.Roles)
   256  		assert.Equal(t, false, cm.SchemeGuest)
   257  		assert.Equal(t, false, cm.SchemeUser)
   258  		assert.Equal(t, false, cm.SchemeAdmin)
   259  		assert.Equal(t, "", cm.ExplicitRoles)
   260  	})
   261  
   262  	// Example data *after* the Phase 2 migration has taken place.
   263  	t.Run("Migrated_NoScheme_User", func(t *testing.T) {
   264  		db := channelMemberWithSchemeRoles{
   265  			Roles:                         "",
   266  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   267  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   268  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   269  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   270  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   271  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   272  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   273  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   274  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   275  		}
   276  
   277  		cm := db.ToModel()
   278  
   279  		assert.Equal(t, "channel_user", cm.Roles)
   280  		assert.Equal(t, false, cm.SchemeGuest)
   281  		assert.Equal(t, true, cm.SchemeUser)
   282  		assert.Equal(t, false, cm.SchemeAdmin)
   283  		assert.Equal(t, "", cm.ExplicitRoles)
   284  	})
   285  
   286  	t.Run("Migrated_NoScheme_Admin", func(t *testing.T) {
   287  		db := channelMemberWithSchemeRoles{
   288  			Roles:                         "",
   289  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   290  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   291  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
   292  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   293  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   294  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   295  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   296  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   297  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   298  		}
   299  
   300  		cm := db.ToModel()
   301  
   302  		assert.Equal(t, "channel_user channel_admin", cm.Roles)
   303  		assert.Equal(t, false, cm.SchemeGuest)
   304  		assert.Equal(t, true, cm.SchemeUser)
   305  		assert.Equal(t, true, cm.SchemeAdmin)
   306  		assert.Equal(t, "", cm.ExplicitRoles)
   307  	})
   308  
   309  	t.Run("Migrated_NoScheme_Guest", func(t *testing.T) {
   310  		db := channelMemberWithSchemeRoles{
   311  			Roles:                         "",
   312  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   313  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   314  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   315  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   316  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   317  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   318  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   319  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   320  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   321  		}
   322  
   323  		cm := db.ToModel()
   324  
   325  		assert.Equal(t, "channel_guest", cm.Roles)
   326  		assert.Equal(t, true, cm.SchemeGuest)
   327  		assert.Equal(t, false, cm.SchemeUser)
   328  		assert.Equal(t, false, cm.SchemeAdmin)
   329  		assert.Equal(t, "", cm.ExplicitRoles)
   330  	})
   331  
   332  	t.Run("Migrated_NoScheme_CustomRole", func(t *testing.T) {
   333  		db := channelMemberWithSchemeRoles{
   334  			Roles:                         "custom_role",
   335  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   336  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   337  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   338  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   339  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   340  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   341  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   342  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   343  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   344  		}
   345  
   346  		cm := db.ToModel()
   347  
   348  		assert.Equal(t, "custom_role", cm.Roles)
   349  		assert.Equal(t, false, cm.SchemeGuest)
   350  		assert.Equal(t, false, cm.SchemeUser)
   351  		assert.Equal(t, false, cm.SchemeAdmin)
   352  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   353  	})
   354  
   355  	t.Run("Migrated_NoScheme_UserAndCustomRole", func(t *testing.T) {
   356  		db := channelMemberWithSchemeRoles{
   357  			Roles:                         "custom_role",
   358  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   359  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   360  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   361  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   362  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   363  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   364  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   365  		}
   366  
   367  		cm := db.ToModel()
   368  
   369  		assert.Equal(t, "custom_role channel_user", cm.Roles)
   370  		assert.Equal(t, false, cm.SchemeGuest)
   371  		assert.Equal(t, true, cm.SchemeUser)
   372  		assert.Equal(t, false, cm.SchemeAdmin)
   373  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   374  	})
   375  
   376  	t.Run("Migrated_NoScheme_AdminAndCustomRole", func(t *testing.T) {
   377  		db := channelMemberWithSchemeRoles{
   378  			Roles:                         "custom_role",
   379  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   380  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   381  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
   382  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   383  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   384  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   385  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   386  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   387  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   388  		}
   389  
   390  		cm := db.ToModel()
   391  
   392  		assert.Equal(t, "custom_role channel_user channel_admin", cm.Roles)
   393  		assert.Equal(t, false, cm.SchemeGuest)
   394  		assert.Equal(t, true, cm.SchemeUser)
   395  		assert.Equal(t, true, cm.SchemeAdmin)
   396  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   397  	})
   398  
   399  	t.Run("Migrated_NoScheme_GuestAndCustomRole", func(t *testing.T) {
   400  		db := channelMemberWithSchemeRoles{
   401  			Roles:                         "custom_role",
   402  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   403  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   404  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   405  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   406  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   407  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   408  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   409  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   410  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   411  		}
   412  
   413  		cm := db.ToModel()
   414  
   415  		assert.Equal(t, "custom_role channel_guest", cm.Roles)
   416  		assert.Equal(t, true, cm.SchemeGuest)
   417  		assert.Equal(t, false, cm.SchemeUser)
   418  		assert.Equal(t, false, cm.SchemeAdmin)
   419  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   420  	})
   421  
   422  	t.Run("Migrated_NoScheme_NoRoles", func(t *testing.T) {
   423  		db := channelMemberWithSchemeRoles{
   424  			Roles:                         "",
   425  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   426  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   427  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   428  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   429  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   430  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   431  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   432  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   433  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   434  		}
   435  
   436  		cm := db.ToModel()
   437  
   438  		assert.Equal(t, "", cm.Roles)
   439  		assert.Equal(t, false, cm.SchemeGuest)
   440  		assert.Equal(t, false, cm.SchemeUser)
   441  		assert.Equal(t, false, cm.SchemeAdmin)
   442  		assert.Equal(t, "", cm.ExplicitRoles)
   443  	})
   444  
   445  	// Example data with a channel scheme.
   446  	t.Run("Migrated_ChannelScheme_User", func(t *testing.T) {
   447  		db := channelMemberWithSchemeRoles{
   448  			Roles:                         "",
   449  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   450  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   451  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   452  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   453  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   454  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   455  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   456  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   457  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   458  		}
   459  
   460  		cm := db.ToModel()
   461  
   462  		assert.Equal(t, "cscheme_user", cm.Roles)
   463  		assert.Equal(t, false, cm.SchemeGuest)
   464  		assert.Equal(t, true, cm.SchemeUser)
   465  		assert.Equal(t, false, cm.SchemeAdmin)
   466  		assert.Equal(t, "", cm.ExplicitRoles)
   467  	})
   468  
   469  	t.Run("Migrated_ChannelScheme_Admin", func(t *testing.T) {
   470  		db := channelMemberWithSchemeRoles{
   471  			Roles:                         "",
   472  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   473  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   474  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
   475  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   476  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   477  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   478  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   479  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   480  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   481  		}
   482  
   483  		cm := db.ToModel()
   484  
   485  		assert.Equal(t, "cscheme_user cscheme_admin", cm.Roles)
   486  		assert.Equal(t, false, cm.SchemeGuest)
   487  		assert.Equal(t, true, cm.SchemeUser)
   488  		assert.Equal(t, true, cm.SchemeAdmin)
   489  		assert.Equal(t, "", cm.ExplicitRoles)
   490  	})
   491  
   492  	t.Run("Migrated_ChannelScheme_Guest", func(t *testing.T) {
   493  		db := channelMemberWithSchemeRoles{
   494  			Roles:                         "",
   495  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   496  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   497  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   498  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   499  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   500  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   501  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   502  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   503  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   504  		}
   505  
   506  		cm := db.ToModel()
   507  
   508  		assert.Equal(t, "cscheme_guest", cm.Roles)
   509  		assert.Equal(t, true, cm.SchemeGuest)
   510  		assert.Equal(t, false, cm.SchemeUser)
   511  		assert.Equal(t, false, cm.SchemeAdmin)
   512  		assert.Equal(t, "", cm.ExplicitRoles)
   513  	})
   514  
   515  	t.Run("Migrated_ChannelScheme_CustomRole", func(t *testing.T) {
   516  		db := channelMemberWithSchemeRoles{
   517  			Roles:                         "custom_role",
   518  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   519  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   520  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   521  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   522  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   523  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   524  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   525  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   526  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   527  		}
   528  
   529  		cm := db.ToModel()
   530  
   531  		assert.Equal(t, "custom_role", cm.Roles)
   532  		assert.Equal(t, false, cm.SchemeGuest)
   533  		assert.Equal(t, false, cm.SchemeUser)
   534  		assert.Equal(t, false, cm.SchemeAdmin)
   535  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   536  	})
   537  
   538  	t.Run("Migrated_ChannelScheme_UserAndCustomRole", func(t *testing.T) {
   539  		db := channelMemberWithSchemeRoles{
   540  			Roles:                         "custom_role",
   541  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   542  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   543  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   544  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   545  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   546  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   547  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   548  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   549  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   550  		}
   551  
   552  		cm := db.ToModel()
   553  
   554  		assert.Equal(t, "custom_role cscheme_user", cm.Roles)
   555  		assert.Equal(t, false, cm.SchemeGuest)
   556  		assert.Equal(t, true, cm.SchemeUser)
   557  		assert.Equal(t, false, cm.SchemeAdmin)
   558  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   559  	})
   560  
   561  	t.Run("Migrated_ChannelScheme_AdminAndCustomRole", func(t *testing.T) {
   562  		db := channelMemberWithSchemeRoles{
   563  			Roles:                         "custom_role",
   564  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   565  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   566  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
   567  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   568  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   569  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   570  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   571  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   572  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   573  		}
   574  
   575  		cm := db.ToModel()
   576  
   577  		assert.Equal(t, "custom_role cscheme_user cscheme_admin", cm.Roles)
   578  		assert.Equal(t, false, cm.SchemeGuest)
   579  		assert.Equal(t, true, cm.SchemeUser)
   580  		assert.Equal(t, true, cm.SchemeAdmin)
   581  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   582  	})
   583  
   584  	t.Run("Migrated_ChannelScheme_GuestAndCustomRole", func(t *testing.T) {
   585  		db := channelMemberWithSchemeRoles{
   586  			Roles:                         "custom_role",
   587  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   588  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   589  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   590  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   591  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   592  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   593  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   594  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   595  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   596  		}
   597  
   598  		cm := db.ToModel()
   599  
   600  		assert.Equal(t, "custom_role cscheme_guest", cm.Roles)
   601  		assert.Equal(t, true, cm.SchemeGuest)
   602  		assert.Equal(t, false, cm.SchemeUser)
   603  		assert.Equal(t, false, cm.SchemeAdmin)
   604  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   605  	})
   606  
   607  	t.Run("Migrated_ChannelScheme_NoRoles", func(t *testing.T) {
   608  		db := channelMemberWithSchemeRoles{
   609  			Roles:                         "",
   610  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   611  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   612  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   613  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   614  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   615  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   616  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   617  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   618  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   619  		}
   620  
   621  		cm := db.ToModel()
   622  
   623  		assert.Equal(t, "", cm.Roles)
   624  		assert.Equal(t, false, cm.SchemeGuest)
   625  		assert.Equal(t, false, cm.SchemeUser)
   626  		assert.Equal(t, false, cm.SchemeAdmin)
   627  		assert.Equal(t, "", cm.ExplicitRoles)
   628  	})
   629  
   630  	// Example data with a team scheme.
   631  	t.Run("Migrated_TeamScheme_User", func(t *testing.T) {
   632  		db := channelMemberWithSchemeRoles{
   633  			Roles:                         "",
   634  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   635  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   636  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   637  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   638  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   639  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   640  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   641  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   642  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   643  		}
   644  
   645  		cm := db.ToModel()
   646  
   647  		assert.Equal(t, "tscheme_channeluser", cm.Roles)
   648  		assert.Equal(t, false, cm.SchemeGuest)
   649  		assert.Equal(t, true, cm.SchemeUser)
   650  		assert.Equal(t, false, cm.SchemeAdmin)
   651  		assert.Equal(t, "", cm.ExplicitRoles)
   652  	})
   653  
   654  	t.Run("Migrated_TeamScheme_Admin", func(t *testing.T) {
   655  		db := channelMemberWithSchemeRoles{
   656  			Roles:                         "",
   657  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   658  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   659  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
   660  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   661  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   662  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   663  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   664  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   665  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   666  		}
   667  
   668  		cm := db.ToModel()
   669  
   670  		assert.Equal(t, "tscheme_channeluser tscheme_channeladmin", cm.Roles)
   671  		assert.Equal(t, false, cm.SchemeGuest)
   672  		assert.Equal(t, true, cm.SchemeUser)
   673  		assert.Equal(t, true, cm.SchemeAdmin)
   674  		assert.Equal(t, "", cm.ExplicitRoles)
   675  	})
   676  
   677  	t.Run("Migrated_TeamScheme_Guest", func(t *testing.T) {
   678  		db := channelMemberWithSchemeRoles{
   679  			Roles:                         "",
   680  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   681  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   682  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   683  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   684  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   685  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   686  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   687  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   688  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   689  		}
   690  
   691  		cm := db.ToModel()
   692  
   693  		assert.Equal(t, "tscheme_channelguest", cm.Roles)
   694  		assert.Equal(t, true, cm.SchemeGuest)
   695  		assert.Equal(t, false, cm.SchemeUser)
   696  		assert.Equal(t, false, cm.SchemeAdmin)
   697  		assert.Equal(t, "", cm.ExplicitRoles)
   698  	})
   699  
   700  	t.Run("Migrated_TeamScheme_CustomRole", func(t *testing.T) {
   701  		db := channelMemberWithSchemeRoles{
   702  			Roles:                         "custom_role",
   703  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   704  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   705  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   706  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   707  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   708  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   709  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   710  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   711  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   712  		}
   713  
   714  		cm := db.ToModel()
   715  
   716  		assert.Equal(t, "custom_role", cm.Roles)
   717  		assert.Equal(t, false, cm.SchemeGuest)
   718  		assert.Equal(t, false, cm.SchemeUser)
   719  		assert.Equal(t, false, cm.SchemeAdmin)
   720  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   721  	})
   722  
   723  	t.Run("Migrated_TeamScheme_UserAndCustomRole", func(t *testing.T) {
   724  		db := channelMemberWithSchemeRoles{
   725  			Roles:                         "custom_role",
   726  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   727  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   728  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   729  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   730  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   731  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   732  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   733  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   734  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   735  		}
   736  
   737  		cm := db.ToModel()
   738  
   739  		assert.Equal(t, "custom_role tscheme_channeluser", cm.Roles)
   740  		assert.Equal(t, false, cm.SchemeGuest)
   741  		assert.Equal(t, true, cm.SchemeUser)
   742  		assert.Equal(t, false, cm.SchemeAdmin)
   743  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   744  	})
   745  
   746  	t.Run("Migrated_TeamScheme_AdminAndCustomRole", func(t *testing.T) {
   747  		db := channelMemberWithSchemeRoles{
   748  			Roles:                         "custom_role",
   749  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   750  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   751  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
   752  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   753  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   754  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   755  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   756  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   757  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   758  		}
   759  
   760  		cm := db.ToModel()
   761  
   762  		assert.Equal(t, "custom_role tscheme_channeluser tscheme_channeladmin", cm.Roles)
   763  		assert.Equal(t, false, cm.SchemeGuest)
   764  		assert.Equal(t, true, cm.SchemeUser)
   765  		assert.Equal(t, true, cm.SchemeAdmin)
   766  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   767  	})
   768  
   769  	t.Run("Migrated_TeamScheme_GuestAndCustomRole", func(t *testing.T) {
   770  		db := channelMemberWithSchemeRoles{
   771  			Roles:                         "custom_role",
   772  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   773  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   774  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   775  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   776  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   777  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   778  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   779  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   780  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   781  		}
   782  
   783  		cm := db.ToModel()
   784  
   785  		assert.Equal(t, "custom_role tscheme_channelguest", cm.Roles)
   786  		assert.Equal(t, true, cm.SchemeGuest)
   787  		assert.Equal(t, false, cm.SchemeUser)
   788  		assert.Equal(t, false, cm.SchemeAdmin)
   789  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   790  	})
   791  
   792  	t.Run("Migrated_TeamScheme_NoRoles", func(t *testing.T) {
   793  		db := channelMemberWithSchemeRoles{
   794  			Roles:                         "",
   795  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   796  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   797  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   798  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   799  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   800  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   801  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   802  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   803  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   804  		}
   805  
   806  		cm := db.ToModel()
   807  
   808  		assert.Equal(t, "", cm.Roles)
   809  		assert.Equal(t, false, cm.SchemeGuest)
   810  		assert.Equal(t, false, cm.SchemeUser)
   811  		assert.Equal(t, false, cm.SchemeAdmin)
   812  		assert.Equal(t, "", cm.ExplicitRoles)
   813  	})
   814  
   815  	// Example data with a team and channel scheme.
   816  	t.Run("Migrated_TeamAndChannelScheme_User", func(t *testing.T) {
   817  		db := channelMemberWithSchemeRoles{
   818  			Roles:                         "",
   819  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   820  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   821  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   822  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   823  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   824  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   825  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   826  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   827  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   828  		}
   829  
   830  		cm := db.ToModel()
   831  
   832  		assert.Equal(t, "cscheme_user", cm.Roles)
   833  		assert.Equal(t, false, cm.SchemeGuest)
   834  		assert.Equal(t, true, cm.SchemeUser)
   835  		assert.Equal(t, false, cm.SchemeAdmin)
   836  		assert.Equal(t, "", cm.ExplicitRoles)
   837  	})
   838  
   839  	t.Run("Migrated_TeamAndChannelScheme_Admin", func(t *testing.T) {
   840  		db := channelMemberWithSchemeRoles{
   841  			Roles:                         "",
   842  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   843  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   844  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
   845  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   846  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   847  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   848  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   849  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   850  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   851  		}
   852  
   853  		cm := db.ToModel()
   854  
   855  		assert.Equal(t, "cscheme_user cscheme_admin", cm.Roles)
   856  		assert.Equal(t, false, cm.SchemeGuest)
   857  		assert.Equal(t, true, cm.SchemeUser)
   858  		assert.Equal(t, true, cm.SchemeAdmin)
   859  		assert.Equal(t, "", cm.ExplicitRoles)
   860  	})
   861  
   862  	t.Run("Migrated_TeamAndChannelScheme_Guest", func(t *testing.T) {
   863  		db := channelMemberWithSchemeRoles{
   864  			Roles:                         "",
   865  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   866  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   867  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   868  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   869  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   870  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   871  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   872  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   873  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   874  		}
   875  
   876  		cm := db.ToModel()
   877  
   878  		assert.Equal(t, "cscheme_guest", cm.Roles)
   879  		assert.Equal(t, true, cm.SchemeGuest)
   880  		assert.Equal(t, false, cm.SchemeUser)
   881  		assert.Equal(t, false, cm.SchemeAdmin)
   882  		assert.Equal(t, "", cm.ExplicitRoles)
   883  	})
   884  
   885  	t.Run("Migrated_TeamAndChannelScheme_CustomRole", func(t *testing.T) {
   886  		db := channelMemberWithSchemeRoles{
   887  			Roles:                         "custom_role",
   888  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   889  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   890  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   891  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   892  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   893  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   894  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   895  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   896  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   897  		}
   898  
   899  		cm := db.ToModel()
   900  
   901  		assert.Equal(t, "custom_role", cm.Roles)
   902  		assert.Equal(t, false, cm.SchemeGuest)
   903  		assert.Equal(t, false, cm.SchemeUser)
   904  		assert.Equal(t, false, cm.SchemeAdmin)
   905  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   906  	})
   907  
   908  	t.Run("Migrated_TeamAndChannelScheme_UserAndCustomRole", func(t *testing.T) {
   909  		db := channelMemberWithSchemeRoles{
   910  			Roles:                         "custom_role",
   911  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   912  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   913  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   914  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   915  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   916  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   917  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   918  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   919  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   920  		}
   921  
   922  		cm := db.ToModel()
   923  
   924  		assert.Equal(t, "custom_role cscheme_user", cm.Roles)
   925  		assert.Equal(t, false, cm.SchemeGuest)
   926  		assert.Equal(t, true, cm.SchemeUser)
   927  		assert.Equal(t, false, cm.SchemeAdmin)
   928  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   929  	})
   930  
   931  	t.Run("Migrated_TeamAndChannelScheme_AdminAndCustomRole", func(t *testing.T) {
   932  		db := channelMemberWithSchemeRoles{
   933  			Roles:                         "custom_role",
   934  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   935  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   936  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
   937  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   938  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   939  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   940  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   941  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   942  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   943  		}
   944  
   945  		cm := db.ToModel()
   946  
   947  		assert.Equal(t, "custom_role cscheme_user cscheme_admin", cm.Roles)
   948  		assert.Equal(t, false, cm.SchemeGuest)
   949  		assert.Equal(t, true, cm.SchemeUser)
   950  		assert.Equal(t, true, cm.SchemeAdmin)
   951  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   952  	})
   953  
   954  	t.Run("Migrated_TeamAndChannelScheme_GuestAndCustomRole", func(t *testing.T) {
   955  		db := channelMemberWithSchemeRoles{
   956  			Roles:                         "custom_role",
   957  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   958  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   959  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   960  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   961  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   962  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   963  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   964  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   965  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   966  		}
   967  
   968  		cm := db.ToModel()
   969  
   970  		assert.Equal(t, "custom_role cscheme_guest", cm.Roles)
   971  		assert.Equal(t, true, cm.SchemeGuest)
   972  		assert.Equal(t, false, cm.SchemeUser)
   973  		assert.Equal(t, false, cm.SchemeAdmin)
   974  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   975  	})
   976  
   977  	t.Run("Migrated_TeamAndChannelScheme_NoRoles", func(t *testing.T) {
   978  		db := channelMemberWithSchemeRoles{
   979  			Roles:                         "",
   980  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   981  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   982  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   983  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   984  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   985  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   986  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   987  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   988  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   989  		}
   990  
   991  		cm := db.ToModel()
   992  
   993  		assert.Equal(t, "", cm.Roles)
   994  		assert.Equal(t, false, cm.SchemeGuest)
   995  		assert.Equal(t, false, cm.SchemeUser)
   996  		assert.Equal(t, false, cm.SchemeAdmin)
   997  		assert.Equal(t, "", cm.ExplicitRoles)
   998  	})
   999  }
  1000  
  1001  func testAllChannelMemberProcess(t *testing.T) {
  1002  	t.Run("Unmigrated_User", func(t *testing.T) {
  1003  		db := allChannelMember{
  1004  			Roles:                         "channel_user",
  1005  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
  1006  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
  1007  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
  1008  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1009  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1010  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1011  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1012  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1013  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1014  		}
  1015  
  1016  		_, roles := db.Process()
  1017  
  1018  		assert.Equal(t, "channel_user", roles)
  1019  	})
  1020  
  1021  	t.Run("Unmigrated_Admin", func(t *testing.T) {
  1022  		db := allChannelMember{
  1023  			Roles:                         "channel_user channel_admin",
  1024  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
  1025  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
  1026  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
  1027  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1028  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1029  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1030  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1031  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1032  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1033  		}
  1034  
  1035  		_, roles := db.Process()
  1036  
  1037  		assert.Equal(t, "channel_user channel_admin", roles)
  1038  	})
  1039  
  1040  	t.Run("Unmigrated_None", func(t *testing.T) {
  1041  		db := allChannelMember{
  1042  			Roles:                         "",
  1043  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
  1044  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
  1045  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
  1046  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1047  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1048  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1049  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1050  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1051  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1052  		}
  1053  
  1054  		_, roles := db.Process()
  1055  
  1056  		assert.Equal(t, "", roles)
  1057  	})
  1058  
  1059  	t.Run("Unmigrated_Custom", func(t *testing.T) {
  1060  		db := allChannelMember{
  1061  			Roles:                         "custom",
  1062  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
  1063  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
  1064  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
  1065  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1066  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1067  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1068  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1069  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1070  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1071  		}
  1072  
  1073  		_, roles := db.Process()
  1074  
  1075  		assert.Equal(t, "custom", roles)
  1076  	})
  1077  
  1078  	t.Run("MigratedNoScheme_User", func(t *testing.T) {
  1079  		db := allChannelMember{
  1080  			Roles:                         "",
  1081  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1082  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1083  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1084  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1085  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1086  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1087  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1088  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1089  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1090  		}
  1091  
  1092  		_, roles := db.Process()
  1093  
  1094  		assert.Equal(t, "channel_user", roles)
  1095  	})
  1096  
  1097  	t.Run("MigratedNoScheme_Admin", func(t *testing.T) {
  1098  		db := allChannelMember{
  1099  			Roles:                         "",
  1100  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1101  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1102  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
  1103  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1104  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1105  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1106  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1107  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1108  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1109  		}
  1110  
  1111  		_, roles := db.Process()
  1112  
  1113  		assert.Equal(t, "channel_user channel_admin", roles)
  1114  	})
  1115  
  1116  	t.Run("MigratedNoScheme_Guest", func(t *testing.T) {
  1117  		db := allChannelMember{
  1118  			Roles:                         "",
  1119  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
  1120  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1121  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1122  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1123  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1124  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1125  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1126  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1127  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1128  		}
  1129  
  1130  		_, roles := db.Process()
  1131  
  1132  		assert.Equal(t, "channel_guest", roles)
  1133  	})
  1134  
  1135  	t.Run("MigratedNoScheme_None", func(t *testing.T) {
  1136  		db := allChannelMember{
  1137  			Roles:                         "",
  1138  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1139  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1140  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1141  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1142  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1143  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1144  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1145  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1146  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1147  		}
  1148  
  1149  		_, roles := db.Process()
  1150  
  1151  		assert.Equal(t, "", roles)
  1152  	})
  1153  
  1154  	t.Run("MigratedChannelScheme_User", func(t *testing.T) {
  1155  		db := allChannelMember{
  1156  			Roles:                         "",
  1157  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1158  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1159  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1160  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1161  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1162  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1163  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1164  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1165  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1166  		}
  1167  
  1168  		_, roles := db.Process()
  1169  
  1170  		assert.Equal(t, "cscheme_user", roles)
  1171  	})
  1172  
  1173  	t.Run("MigratedChannelScheme_Admin", func(t *testing.T) {
  1174  		db := allChannelMember{
  1175  			Roles:                         "",
  1176  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1177  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1178  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
  1179  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1180  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1181  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1182  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1183  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1184  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1185  		}
  1186  
  1187  		_, roles := db.Process()
  1188  
  1189  		assert.Equal(t, "cscheme_user cscheme_admin", roles)
  1190  	})
  1191  
  1192  	t.Run("MigratedChannelScheme_Guest", func(t *testing.T) {
  1193  		db := allChannelMember{
  1194  			Roles:                         "",
  1195  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
  1196  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1197  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1198  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1199  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1200  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1201  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1202  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1203  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1204  		}
  1205  
  1206  		_, roles := db.Process()
  1207  
  1208  		assert.Equal(t, "cscheme_guest", roles)
  1209  	})
  1210  
  1211  	t.Run("MigratedChannelScheme_None", func(t *testing.T) {
  1212  		db := allChannelMember{
  1213  			Roles:                         "",
  1214  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1215  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1216  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1217  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1218  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1219  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1220  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1221  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1222  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1223  		}
  1224  
  1225  		_, roles := db.Process()
  1226  
  1227  		assert.Equal(t, "", roles)
  1228  	})
  1229  
  1230  	t.Run("MigratedTeamScheme_User", func(t *testing.T) {
  1231  		db := allChannelMember{
  1232  			Roles:                         "",
  1233  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1234  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1235  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1236  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1237  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1238  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1239  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1240  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1241  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1242  		}
  1243  
  1244  		_, roles := db.Process()
  1245  
  1246  		assert.Equal(t, "tscheme_channeluser", roles)
  1247  	})
  1248  
  1249  	t.Run("MigratedTeamScheme_Admin", func(t *testing.T) {
  1250  		db := allChannelMember{
  1251  			Roles:                         "",
  1252  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1253  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1254  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
  1255  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1256  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1257  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1258  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1259  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1260  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1261  		}
  1262  
  1263  		_, roles := db.Process()
  1264  
  1265  		assert.Equal(t, "tscheme_channeluser tscheme_channeladmin", roles)
  1266  	})
  1267  
  1268  	t.Run("MigratedTeamScheme_Guest", func(t *testing.T) {
  1269  		db := allChannelMember{
  1270  			Roles:                         "",
  1271  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
  1272  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1273  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1274  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1275  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1276  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1277  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1278  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1279  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1280  		}
  1281  
  1282  		_, roles := db.Process()
  1283  
  1284  		assert.Equal(t, "tscheme_channelguest", roles)
  1285  	})
  1286  
  1287  	t.Run("MigratedTeamScheme_None", func(t *testing.T) {
  1288  		db := allChannelMember{
  1289  			Roles:                         "",
  1290  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1291  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1292  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1293  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1294  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1295  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1296  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1297  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1298  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1299  		}
  1300  
  1301  		_, roles := db.Process()
  1302  
  1303  		assert.Equal(t, "", roles)
  1304  	})
  1305  
  1306  	t.Run("MigratedTeamAndChannelScheme_User", func(t *testing.T) {
  1307  		db := allChannelMember{
  1308  			Roles:                         "",
  1309  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1310  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1311  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1312  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1313  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1314  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1315  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1316  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1317  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1318  		}
  1319  
  1320  		_, roles := db.Process()
  1321  
  1322  		assert.Equal(t, "cscheme_user", roles)
  1323  	})
  1324  
  1325  	t.Run("MigratedTeamAndChannelScheme_Admin", func(t *testing.T) {
  1326  		db := allChannelMember{
  1327  			Roles:                         "",
  1328  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1329  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1330  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
  1331  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1332  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1333  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1334  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1335  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1336  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1337  		}
  1338  
  1339  		_, roles := db.Process()
  1340  
  1341  		assert.Equal(t, "cscheme_user cscheme_admin", roles)
  1342  	})
  1343  
  1344  	t.Run("MigratedTeamAndChannelScheme_Guest", func(t *testing.T) {
  1345  		db := allChannelMember{
  1346  			Roles:                         "",
  1347  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
  1348  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1349  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1350  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1351  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1352  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1353  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1354  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1355  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1356  		}
  1357  
  1358  		_, roles := db.Process()
  1359  
  1360  		assert.Equal(t, "cscheme_guest", roles)
  1361  	})
  1362  
  1363  	t.Run("MigratedTeamAndChannelScheme_None", func(t *testing.T) {
  1364  		db := allChannelMember{
  1365  			Roles:                         "",
  1366  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1367  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1368  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1369  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1370  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1371  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1372  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1373  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1374  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1375  		}
  1376  
  1377  		_, roles := db.Process()
  1378  
  1379  		assert.Equal(t, "", roles)
  1380  	})
  1381  
  1382  	t.Run("DeduplicationCheck", func(t *testing.T) {
  1383  		db := allChannelMember{
  1384  			Roles:                         "channel_user",
  1385  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1386  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1387  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1388  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1389  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1390  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1391  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1392  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1393  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1394  		}
  1395  
  1396  		_, roles := db.Process()
  1397  
  1398  		assert.Equal(t, "channel_user", roles)
  1399  	})
  1400  }