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