github.com/xzl8028/xenia-server@v0.0.0-20190809101854-18450a97da63/store/sqlstore/channel_store_test.go (about)

     1  // Copyright (c) 2015-present Xenia, 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  
    12  	"github.com/xzl8028/xenia-server/model"
    13  	"github.com/xzl8028/xenia-server/store/storetest"
    14  )
    15  
    16  func TestChannelStore(t *testing.T) {
    17  	StoreTestWithSqlSupplier(t, storetest.TestChannelStore)
    18  }
    19  
    20  func TestChannelStoreInternalDataTypes(t *testing.T) {
    21  	t.Run("NewChannelMemberFromModel", func(t *testing.T) { testNewChannelMemberFromModel(t) })
    22  	t.Run("ChannelMemberWithSchemeRolesToModel", func(t *testing.T) { testChannelMemberWithSchemeRolesToModel(t) })
    23  	t.Run("AllChannelMemberProcess", func(t *testing.T) { testAllChannelMemberProcess(t) })
    24  }
    25  
    26  func testNewChannelMemberFromModel(t *testing.T) {
    27  	m := model.ChannelMember{
    28  		ChannelId:     model.NewId(),
    29  		UserId:        model.NewId(),
    30  		Roles:         "channel_user channel_admin custom_role",
    31  		LastViewedAt:  12345,
    32  		MsgCount:      2,
    33  		MentionCount:  1,
    34  		NotifyProps:   model.StringMap{"key": "value"},
    35  		LastUpdateAt:  54321,
    36  		SchemeGuest:   false,
    37  		SchemeUser:    true,
    38  		SchemeAdmin:   true,
    39  		ExplicitRoles: "custom_role",
    40  	}
    41  
    42  	db := NewChannelMemberFromModel(&m)
    43  
    44  	assert.Equal(t, m.ChannelId, db.ChannelId)
    45  	assert.Equal(t, m.UserId, db.UserId)
    46  	assert.Equal(t, m.LastViewedAt, db.LastViewedAt)
    47  	assert.Equal(t, m.MsgCount, db.MsgCount)
    48  	assert.Equal(t, m.MentionCount, db.MentionCount)
    49  	assert.Equal(t, m.NotifyProps, db.NotifyProps)
    50  	assert.Equal(t, m.LastUpdateAt, db.LastUpdateAt)
    51  	assert.Equal(t, true, db.SchemeGuest.Valid)
    52  	assert.Equal(t, true, db.SchemeUser.Valid)
    53  	assert.Equal(t, true, db.SchemeAdmin.Valid)
    54  	assert.Equal(t, m.SchemeGuest, db.SchemeGuest.Bool)
    55  	assert.Equal(t, m.SchemeUser, db.SchemeUser.Bool)
    56  	assert.Equal(t, m.SchemeAdmin, db.SchemeAdmin.Bool)
    57  	assert.Equal(t, m.ExplicitRoles, db.Roles)
    58  }
    59  
    60  func testChannelMemberWithSchemeRolesToModel(t *testing.T) {
    61  	t.Run("BasicProperties", func(t *testing.T) {
    62  		// Test all the non-roles properties here.
    63  		db := channelMemberWithSchemeRoles{
    64  			ChannelId:                     model.NewId(),
    65  			UserId:                        model.NewId(),
    66  			Roles:                         "custom_role",
    67  			LastViewedAt:                  12345,
    68  			MsgCount:                      2,
    69  			MentionCount:                  1,
    70  			NotifyProps:                   model.StringMap{"key": "value"},
    71  			LastUpdateAt:                  54321,
    72  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
    73  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
    74  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
    75  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
    76  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
    77  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
    78  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
    79  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
    80  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
    81  		}
    82  
    83  		m := db.ToModel()
    84  
    85  		assert.Equal(t, db.ChannelId, m.ChannelId)
    86  		assert.Equal(t, db.UserId, m.UserId)
    87  		assert.Equal(t, "custom_role channel_user channel_admin", m.Roles)
    88  		assert.Equal(t, db.LastViewedAt, m.LastViewedAt)
    89  		assert.Equal(t, db.MsgCount, m.MsgCount)
    90  		assert.Equal(t, db.MentionCount, m.MentionCount)
    91  		assert.Equal(t, db.NotifyProps, m.NotifyProps)
    92  		assert.Equal(t, db.LastUpdateAt, m.LastUpdateAt)
    93  		assert.Equal(t, db.SchemeGuest.Bool, m.SchemeGuest)
    94  		assert.Equal(t, db.SchemeUser.Bool, m.SchemeUser)
    95  		assert.Equal(t, db.SchemeAdmin.Bool, m.SchemeAdmin)
    96  		assert.Equal(t, db.Roles, m.ExplicitRoles)
    97  	})
    98  
    99  	// Example data *before* the Phase 2 migration has taken place.
   100  	t.Run("Unmigrated_NoScheme_User", func(t *testing.T) {
   101  		db := channelMemberWithSchemeRoles{
   102  			Roles:                         "channel_user",
   103  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
   104  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
   105  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
   106  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   107  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   108  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   109  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   110  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   111  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   112  		}
   113  
   114  		cm := db.ToModel()
   115  
   116  		assert.Equal(t, "channel_user", cm.Roles)
   117  		assert.Equal(t, false, cm.SchemeGuest)
   118  		assert.Equal(t, true, cm.SchemeUser)
   119  		assert.Equal(t, false, cm.SchemeAdmin)
   120  		assert.Equal(t, "", cm.ExplicitRoles)
   121  	})
   122  
   123  	t.Run("Unmigrated_NoScheme_Admin", func(t *testing.T) {
   124  		db := channelMemberWithSchemeRoles{
   125  			Roles:                         "channel_admin 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_admin channel_user", cm.Roles)
   140  		assert.Equal(t, false, cm.SchemeGuest)
   141  		assert.Equal(t, true, cm.SchemeUser)
   142  		assert.Equal(t, true, cm.SchemeAdmin)
   143  		assert.Equal(t, "", cm.ExplicitRoles)
   144  	})
   145  
   146  	t.Run("Unmigrated_NoScheme_CustomRole", func(t *testing.T) {
   147  		db := channelMemberWithSchemeRoles{
   148  			Roles:                         "custom_role",
   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, "custom_role", cm.Roles)
   163  		assert.Equal(t, false, cm.SchemeUser)
   164  		assert.Equal(t, false, cm.SchemeAdmin)
   165  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   166  	})
   167  
   168  	t.Run("Unmigrated_NoScheme_UserAndCustomRole", func(t *testing.T) {
   169  		db := channelMemberWithSchemeRoles{
   170  			Roles:                         "channel_user custom_role",
   171  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
   172  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
   173  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
   174  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   175  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   176  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   177  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   178  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   179  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   180  		}
   181  
   182  		cm := db.ToModel()
   183  
   184  		assert.Equal(t, "channel_user custom_role", cm.Roles)
   185  		assert.Equal(t, false, cm.SchemeGuest)
   186  		assert.Equal(t, true, cm.SchemeUser)
   187  		assert.Equal(t, false, cm.SchemeAdmin)
   188  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   189  	})
   190  
   191  	t.Run("Unmigrated_NoScheme_AdminAndCustomRole", func(t *testing.T) {
   192  		db := channelMemberWithSchemeRoles{
   193  			Roles:                         "channel_user channel_admin 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, "channel_user channel_admin custom_role", cm.Roles)
   208  		assert.Equal(t, false, cm.SchemeGuest)
   209  		assert.Equal(t, true, cm.SchemeUser)
   210  		assert.Equal(t, true, cm.SchemeAdmin)
   211  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   212  	})
   213  
   214  	t.Run("Unmigrated_NoScheme_NoRoles", func(t *testing.T) {
   215  		db := channelMemberWithSchemeRoles{
   216  			Roles:                         "",
   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, "", cm.Roles)
   231  		assert.Equal(t, false, cm.SchemeGuest)
   232  		assert.Equal(t, false, cm.SchemeUser)
   233  		assert.Equal(t, false, cm.SchemeAdmin)
   234  		assert.Equal(t, "", cm.ExplicitRoles)
   235  	})
   236  
   237  	// Example data *after* the Phase 2 migration has taken place.
   238  	t.Run("Migrated_NoScheme_User", func(t *testing.T) {
   239  		db := channelMemberWithSchemeRoles{
   240  			Roles:                         "",
   241  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   242  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   243  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   244  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   245  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   246  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   247  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   248  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   249  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   250  		}
   251  
   252  		cm := db.ToModel()
   253  
   254  		assert.Equal(t, "channel_user", cm.Roles)
   255  		assert.Equal(t, false, cm.SchemeGuest)
   256  		assert.Equal(t, true, cm.SchemeUser)
   257  		assert.Equal(t, false, cm.SchemeAdmin)
   258  		assert.Equal(t, "", cm.ExplicitRoles)
   259  	})
   260  
   261  	t.Run("Migrated_NoScheme_Admin", 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: true},
   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 channel_admin", cm.Roles)
   278  		assert.Equal(t, false, cm.SchemeGuest)
   279  		assert.Equal(t, true, cm.SchemeUser)
   280  		assert.Equal(t, true, cm.SchemeAdmin)
   281  		assert.Equal(t, "", cm.ExplicitRoles)
   282  	})
   283  
   284  	t.Run("Migrated_NoScheme_Guest", func(t *testing.T) {
   285  		db := channelMemberWithSchemeRoles{
   286  			Roles:                         "",
   287  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   288  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   289  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   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_guest", cm.Roles)
   301  		assert.Equal(t, true, cm.SchemeGuest)
   302  		assert.Equal(t, false, cm.SchemeUser)
   303  		assert.Equal(t, false, cm.SchemeAdmin)
   304  		assert.Equal(t, "", cm.ExplicitRoles)
   305  	})
   306  
   307  	t.Run("Migrated_NoScheme_CustomRole", func(t *testing.T) {
   308  		db := channelMemberWithSchemeRoles{
   309  			Roles:                         "custom_role",
   310  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   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, "custom_role", cm.Roles)
   324  		assert.Equal(t, false, cm.SchemeGuest)
   325  		assert.Equal(t, false, cm.SchemeUser)
   326  		assert.Equal(t, false, cm.SchemeAdmin)
   327  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   328  	})
   329  
   330  	t.Run("Migrated_NoScheme_UserAndCustomRole", 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: true},
   335  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   336  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   337  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   338  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   339  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   340  		}
   341  
   342  		cm := db.ToModel()
   343  
   344  		assert.Equal(t, "custom_role channel_user", cm.Roles)
   345  		assert.Equal(t, false, cm.SchemeGuest)
   346  		assert.Equal(t, true, cm.SchemeUser)
   347  		assert.Equal(t, false, cm.SchemeAdmin)
   348  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   349  	})
   350  
   351  	t.Run("Migrated_NoScheme_AdminAndCustomRole", func(t *testing.T) {
   352  		db := channelMemberWithSchemeRoles{
   353  			Roles:                         "custom_role",
   354  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   355  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   356  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
   357  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   358  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   359  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   360  			ChannelSchemeDefaultGuestRole: 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 channel_admin", cm.Roles)
   368  		assert.Equal(t, false, cm.SchemeGuest)
   369  		assert.Equal(t, true, cm.SchemeUser)
   370  		assert.Equal(t, true, cm.SchemeAdmin)
   371  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   372  	})
   373  
   374  	t.Run("Migrated_NoScheme_GuestAndCustomRole", func(t *testing.T) {
   375  		db := channelMemberWithSchemeRoles{
   376  			Roles:                         "custom_role",
   377  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   378  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   379  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   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_guest", cm.Roles)
   391  		assert.Equal(t, true, cm.SchemeGuest)
   392  		assert.Equal(t, false, cm.SchemeUser)
   393  		assert.Equal(t, false, cm.SchemeAdmin)
   394  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   395  	})
   396  
   397  	t.Run("Migrated_NoScheme_NoRoles", func(t *testing.T) {
   398  		db := channelMemberWithSchemeRoles{
   399  			Roles:                         "",
   400  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   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, "", cm.Roles)
   414  		assert.Equal(t, false, cm.SchemeGuest)
   415  		assert.Equal(t, false, cm.SchemeUser)
   416  		assert.Equal(t, false, cm.SchemeAdmin)
   417  		assert.Equal(t, "", cm.ExplicitRoles)
   418  	})
   419  
   420  	// Example data with a channel scheme.
   421  	t.Run("Migrated_ChannelScheme_User", func(t *testing.T) {
   422  		db := channelMemberWithSchemeRoles{
   423  			Roles:                         "",
   424  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   425  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   426  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   427  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   428  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   429  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   430  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   431  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   432  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   433  		}
   434  
   435  		cm := db.ToModel()
   436  
   437  		assert.Equal(t, "cscheme_user", cm.Roles)
   438  		assert.Equal(t, false, cm.SchemeGuest)
   439  		assert.Equal(t, true, cm.SchemeUser)
   440  		assert.Equal(t, false, cm.SchemeAdmin)
   441  		assert.Equal(t, "", cm.ExplicitRoles)
   442  	})
   443  
   444  	t.Run("Migrated_ChannelScheme_Admin", 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: true},
   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 cscheme_admin", cm.Roles)
   461  		assert.Equal(t, false, cm.SchemeGuest)
   462  		assert.Equal(t, true, cm.SchemeUser)
   463  		assert.Equal(t, true, cm.SchemeAdmin)
   464  		assert.Equal(t, "", cm.ExplicitRoles)
   465  	})
   466  
   467  	t.Run("Migrated_ChannelScheme_Guest", func(t *testing.T) {
   468  		db := channelMemberWithSchemeRoles{
   469  			Roles:                         "",
   470  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   471  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   472  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   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_guest", cm.Roles)
   484  		assert.Equal(t, true, cm.SchemeGuest)
   485  		assert.Equal(t, false, cm.SchemeUser)
   486  		assert.Equal(t, false, cm.SchemeAdmin)
   487  		assert.Equal(t, "", cm.ExplicitRoles)
   488  	})
   489  
   490  	t.Run("Migrated_ChannelScheme_CustomRole", func(t *testing.T) {
   491  		db := channelMemberWithSchemeRoles{
   492  			Roles:                         "custom_role",
   493  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   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, "custom_role", cm.Roles)
   507  		assert.Equal(t, false, cm.SchemeGuest)
   508  		assert.Equal(t, false, cm.SchemeUser)
   509  		assert.Equal(t, false, cm.SchemeAdmin)
   510  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   511  	})
   512  
   513  	t.Run("Migrated_ChannelScheme_UserAndCustomRole", 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: true},
   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 cscheme_user", cm.Roles)
   530  		assert.Equal(t, false, cm.SchemeGuest)
   531  		assert.Equal(t, true, cm.SchemeUser)
   532  		assert.Equal(t, false, cm.SchemeAdmin)
   533  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   534  	})
   535  
   536  	t.Run("Migrated_ChannelScheme_AdminAndCustomRole", 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: true},
   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 cscheme_admin", cm.Roles)
   553  		assert.Equal(t, false, cm.SchemeGuest)
   554  		assert.Equal(t, true, cm.SchemeUser)
   555  		assert.Equal(t, true, cm.SchemeAdmin)
   556  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   557  	})
   558  
   559  	t.Run("Migrated_ChannelScheme_GuestAndCustomRole", func(t *testing.T) {
   560  		db := channelMemberWithSchemeRoles{
   561  			Roles:                         "custom_role",
   562  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   563  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   564  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   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_guest", cm.Roles)
   576  		assert.Equal(t, true, cm.SchemeGuest)
   577  		assert.Equal(t, false, cm.SchemeUser)
   578  		assert.Equal(t, false, cm.SchemeAdmin)
   579  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   580  	})
   581  
   582  	t.Run("Migrated_ChannelScheme_NoRoles", func(t *testing.T) {
   583  		db := channelMemberWithSchemeRoles{
   584  			Roles:                         "",
   585  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   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, "", cm.Roles)
   599  		assert.Equal(t, false, cm.SchemeGuest)
   600  		assert.Equal(t, false, cm.SchemeUser)
   601  		assert.Equal(t, false, cm.SchemeAdmin)
   602  		assert.Equal(t, "", cm.ExplicitRoles)
   603  	})
   604  
   605  	// Example data with a team scheme.
   606  	t.Run("Migrated_TeamScheme_User", func(t *testing.T) {
   607  		db := channelMemberWithSchemeRoles{
   608  			Roles:                         "",
   609  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   610  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   611  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   612  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   613  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   614  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   615  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   616  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   617  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   618  		}
   619  
   620  		cm := db.ToModel()
   621  
   622  		assert.Equal(t, "tscheme_channeluser", cm.Roles)
   623  		assert.Equal(t, false, cm.SchemeGuest)
   624  		assert.Equal(t, true, cm.SchemeUser)
   625  		assert.Equal(t, false, cm.SchemeAdmin)
   626  		assert.Equal(t, "", cm.ExplicitRoles)
   627  	})
   628  
   629  	t.Run("Migrated_TeamScheme_Admin", 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: true},
   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 tscheme_channeladmin", cm.Roles)
   646  		assert.Equal(t, false, cm.SchemeGuest)
   647  		assert.Equal(t, true, cm.SchemeUser)
   648  		assert.Equal(t, true, cm.SchemeAdmin)
   649  		assert.Equal(t, "", cm.ExplicitRoles)
   650  	})
   651  
   652  	t.Run("Migrated_TeamScheme_Guest", func(t *testing.T) {
   653  		db := channelMemberWithSchemeRoles{
   654  			Roles:                         "",
   655  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   656  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   657  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   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_channelguest", cm.Roles)
   669  		assert.Equal(t, true, cm.SchemeGuest)
   670  		assert.Equal(t, false, cm.SchemeUser)
   671  		assert.Equal(t, false, cm.SchemeAdmin)
   672  		assert.Equal(t, "", cm.ExplicitRoles)
   673  	})
   674  
   675  	t.Run("Migrated_TeamScheme_CustomRole", func(t *testing.T) {
   676  		db := channelMemberWithSchemeRoles{
   677  			Roles:                         "custom_role",
   678  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   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, "custom_role", cm.Roles)
   692  		assert.Equal(t, false, cm.SchemeGuest)
   693  		assert.Equal(t, false, cm.SchemeUser)
   694  		assert.Equal(t, false, cm.SchemeAdmin)
   695  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   696  	})
   697  
   698  	t.Run("Migrated_TeamScheme_UserAndCustomRole", 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: true},
   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 tscheme_channeluser", cm.Roles)
   715  		assert.Equal(t, false, cm.SchemeGuest)
   716  		assert.Equal(t, true, cm.SchemeUser)
   717  		assert.Equal(t, false, cm.SchemeAdmin)
   718  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   719  	})
   720  
   721  	t.Run("Migrated_TeamScheme_AdminAndCustomRole", 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: true},
   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 tscheme_channeladmin", cm.Roles)
   738  		assert.Equal(t, false, cm.SchemeGuest)
   739  		assert.Equal(t, true, cm.SchemeUser)
   740  		assert.Equal(t, true, cm.SchemeAdmin)
   741  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   742  	})
   743  
   744  	t.Run("Migrated_TeamScheme_GuestAndCustomRole", func(t *testing.T) {
   745  		db := channelMemberWithSchemeRoles{
   746  			Roles:                         "custom_role",
   747  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   748  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   749  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   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_channelguest", cm.Roles)
   761  		assert.Equal(t, true, cm.SchemeGuest)
   762  		assert.Equal(t, false, cm.SchemeUser)
   763  		assert.Equal(t, false, cm.SchemeAdmin)
   764  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   765  	})
   766  
   767  	t.Run("Migrated_TeamScheme_NoRoles", func(t *testing.T) {
   768  		db := channelMemberWithSchemeRoles{
   769  			Roles:                         "",
   770  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   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, "", cm.Roles)
   784  		assert.Equal(t, false, cm.SchemeGuest)
   785  		assert.Equal(t, false, cm.SchemeUser)
   786  		assert.Equal(t, false, cm.SchemeAdmin)
   787  		assert.Equal(t, "", cm.ExplicitRoles)
   788  	})
   789  
   790  	// Example data with a team and channel scheme.
   791  	t.Run("Migrated_TeamAndChannelScheme_User", func(t *testing.T) {
   792  		db := channelMemberWithSchemeRoles{
   793  			Roles:                         "",
   794  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   795  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
   796  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   797  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
   798  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
   799  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
   800  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
   801  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
   802  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
   803  		}
   804  
   805  		cm := db.ToModel()
   806  
   807  		assert.Equal(t, "cscheme_user", cm.Roles)
   808  		assert.Equal(t, false, cm.SchemeGuest)
   809  		assert.Equal(t, true, cm.SchemeUser)
   810  		assert.Equal(t, false, cm.SchemeAdmin)
   811  		assert.Equal(t, "", cm.ExplicitRoles)
   812  	})
   813  
   814  	t.Run("Migrated_TeamAndChannelScheme_Admin", 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: true},
   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 cscheme_admin", cm.Roles)
   831  		assert.Equal(t, false, cm.SchemeGuest)
   832  		assert.Equal(t, true, cm.SchemeUser)
   833  		assert.Equal(t, true, cm.SchemeAdmin)
   834  		assert.Equal(t, "", cm.ExplicitRoles)
   835  	})
   836  
   837  	t.Run("Migrated_TeamAndChannelScheme_Guest", func(t *testing.T) {
   838  		db := channelMemberWithSchemeRoles{
   839  			Roles:                         "",
   840  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   841  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   842  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   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_guest", cm.Roles)
   854  		assert.Equal(t, true, cm.SchemeGuest)
   855  		assert.Equal(t, false, cm.SchemeUser)
   856  		assert.Equal(t, false, cm.SchemeAdmin)
   857  		assert.Equal(t, "", cm.ExplicitRoles)
   858  	})
   859  
   860  	t.Run("Migrated_TeamAndChannelScheme_CustomRole", func(t *testing.T) {
   861  		db := channelMemberWithSchemeRoles{
   862  			Roles:                         "custom_role",
   863  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   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, "custom_role", cm.Roles)
   877  		assert.Equal(t, false, cm.SchemeGuest)
   878  		assert.Equal(t, false, cm.SchemeUser)
   879  		assert.Equal(t, false, cm.SchemeAdmin)
   880  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   881  	})
   882  
   883  	t.Run("Migrated_TeamAndChannelScheme_UserAndCustomRole", 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: true},
   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 cscheme_user", cm.Roles)
   900  		assert.Equal(t, false, cm.SchemeGuest)
   901  		assert.Equal(t, true, cm.SchemeUser)
   902  		assert.Equal(t, false, cm.SchemeAdmin)
   903  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   904  	})
   905  
   906  	t.Run("Migrated_TeamAndChannelScheme_AdminAndCustomRole", 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: true},
   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 cscheme_admin", cm.Roles)
   923  		assert.Equal(t, false, cm.SchemeGuest)
   924  		assert.Equal(t, true, cm.SchemeUser)
   925  		assert.Equal(t, true, cm.SchemeAdmin)
   926  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   927  	})
   928  
   929  	t.Run("Migrated_TeamAndChannelScheme_GuestAndCustomRole", func(t *testing.T) {
   930  		db := channelMemberWithSchemeRoles{
   931  			Roles:                         "custom_role",
   932  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
   933  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
   934  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
   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_guest", cm.Roles)
   946  		assert.Equal(t, true, cm.SchemeGuest)
   947  		assert.Equal(t, false, cm.SchemeUser)
   948  		assert.Equal(t, false, cm.SchemeAdmin)
   949  		assert.Equal(t, "custom_role", cm.ExplicitRoles)
   950  	})
   951  
   952  	t.Run("Migrated_TeamAndChannelScheme_NoRoles", func(t *testing.T) {
   953  		db := channelMemberWithSchemeRoles{
   954  			Roles:                         "",
   955  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
   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, "", cm.Roles)
   969  		assert.Equal(t, false, cm.SchemeGuest)
   970  		assert.Equal(t, false, cm.SchemeUser)
   971  		assert.Equal(t, false, cm.SchemeAdmin)
   972  		assert.Equal(t, "", cm.ExplicitRoles)
   973  	})
   974  }
   975  
   976  func testAllChannelMemberProcess(t *testing.T) {
   977  	t.Run("Unmigrated_User", func(t *testing.T) {
   978  		db := allChannelMember{
   979  			Roles:                         "channel_user",
   980  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
   981  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
   982  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
   983  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
   984  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
   985  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
   986  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
   987  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
   988  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
   989  		}
   990  
   991  		_, roles := db.Process()
   992  
   993  		assert.Equal(t, "channel_user", roles)
   994  	})
   995  
   996  	t.Run("Unmigrated_Admin", func(t *testing.T) {
   997  		db := allChannelMember{
   998  			Roles:                         "channel_user channel_admin",
   999  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
  1000  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
  1001  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
  1002  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1003  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1004  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1005  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1006  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1007  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1008  		}
  1009  
  1010  		_, roles := db.Process()
  1011  
  1012  		assert.Equal(t, "channel_user channel_admin", roles)
  1013  	})
  1014  
  1015  	t.Run("Unmigrated_None", func(t *testing.T) {
  1016  		db := allChannelMember{
  1017  			Roles:                         "",
  1018  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
  1019  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
  1020  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
  1021  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1022  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1023  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1024  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1025  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1026  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1027  		}
  1028  
  1029  		_, roles := db.Process()
  1030  
  1031  		assert.Equal(t, "", roles)
  1032  	})
  1033  
  1034  	t.Run("Unmigrated_Custom", func(t *testing.T) {
  1035  		db := allChannelMember{
  1036  			Roles:                         "custom",
  1037  			SchemeGuest:                   sql.NullBool{Valid: false, Bool: false},
  1038  			SchemeUser:                    sql.NullBool{Valid: false, Bool: false},
  1039  			SchemeAdmin:                   sql.NullBool{Valid: false, Bool: false},
  1040  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1041  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1042  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1043  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1044  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1045  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1046  		}
  1047  
  1048  		_, roles := db.Process()
  1049  
  1050  		assert.Equal(t, "custom", roles)
  1051  	})
  1052  
  1053  	t.Run("MigratedNoScheme_User", func(t *testing.T) {
  1054  		db := allChannelMember{
  1055  			Roles:                         "",
  1056  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1057  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1058  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1059  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1060  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1061  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1062  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1063  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1064  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1065  		}
  1066  
  1067  		_, roles := db.Process()
  1068  
  1069  		assert.Equal(t, "channel_user", roles)
  1070  	})
  1071  
  1072  	t.Run("MigratedNoScheme_Admin", func(t *testing.T) {
  1073  		db := allChannelMember{
  1074  			Roles:                         "",
  1075  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1076  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1077  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
  1078  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1079  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1080  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1081  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1082  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1083  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1084  		}
  1085  
  1086  		_, roles := db.Process()
  1087  
  1088  		assert.Equal(t, "channel_user channel_admin", roles)
  1089  	})
  1090  
  1091  	t.Run("MigratedNoScheme_Guest", func(t *testing.T) {
  1092  		db := allChannelMember{
  1093  			Roles:                         "",
  1094  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
  1095  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1096  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1097  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1098  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1099  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1100  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1101  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1102  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1103  		}
  1104  
  1105  		_, roles := db.Process()
  1106  
  1107  		assert.Equal(t, "channel_guest", roles)
  1108  	})
  1109  
  1110  	t.Run("MigratedNoScheme_None", func(t *testing.T) {
  1111  		db := allChannelMember{
  1112  			Roles:                         "",
  1113  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1114  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1115  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1116  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1117  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1118  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1119  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1120  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1121  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1122  		}
  1123  
  1124  		_, roles := db.Process()
  1125  
  1126  		assert.Equal(t, "", roles)
  1127  	})
  1128  
  1129  	t.Run("MigratedChannelScheme_User", func(t *testing.T) {
  1130  		db := allChannelMember{
  1131  			Roles:                         "",
  1132  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1133  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1134  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1135  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1136  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1137  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1138  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1139  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1140  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1141  		}
  1142  
  1143  		_, roles := db.Process()
  1144  
  1145  		assert.Equal(t, "cscheme_user", roles)
  1146  	})
  1147  
  1148  	t.Run("MigratedChannelScheme_Admin", func(t *testing.T) {
  1149  		db := allChannelMember{
  1150  			Roles:                         "",
  1151  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1152  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1153  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
  1154  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1155  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1156  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1157  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1158  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1159  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1160  		}
  1161  
  1162  		_, roles := db.Process()
  1163  
  1164  		assert.Equal(t, "cscheme_user cscheme_admin", roles)
  1165  	})
  1166  
  1167  	t.Run("MigratedChannelScheme_Guest", func(t *testing.T) {
  1168  		db := allChannelMember{
  1169  			Roles:                         "",
  1170  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
  1171  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1172  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1173  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1174  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1175  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1176  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1177  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1178  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1179  		}
  1180  
  1181  		_, roles := db.Process()
  1182  
  1183  		assert.Equal(t, "cscheme_guest", roles)
  1184  	})
  1185  
  1186  	t.Run("MigratedChannelScheme_None", func(t *testing.T) {
  1187  		db := allChannelMember{
  1188  			Roles:                         "",
  1189  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1190  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1191  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1192  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1193  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1194  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1195  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1196  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1197  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1198  		}
  1199  
  1200  		_, roles := db.Process()
  1201  
  1202  		assert.Equal(t, "", roles)
  1203  	})
  1204  
  1205  	t.Run("MigratedTeamScheme_User", func(t *testing.T) {
  1206  		db := allChannelMember{
  1207  			Roles:                         "",
  1208  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1209  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1210  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1211  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1212  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1213  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1214  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1215  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1216  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1217  		}
  1218  
  1219  		_, roles := db.Process()
  1220  
  1221  		assert.Equal(t, "tscheme_channeluser", roles)
  1222  	})
  1223  
  1224  	t.Run("MigratedTeamScheme_Admin", func(t *testing.T) {
  1225  		db := allChannelMember{
  1226  			Roles:                         "",
  1227  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1228  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1229  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
  1230  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1231  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1232  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1233  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1234  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1235  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1236  		}
  1237  
  1238  		_, roles := db.Process()
  1239  
  1240  		assert.Equal(t, "tscheme_channeluser tscheme_channeladmin", roles)
  1241  	})
  1242  
  1243  	t.Run("MigratedTeamScheme_Guest", func(t *testing.T) {
  1244  		db := allChannelMember{
  1245  			Roles:                         "",
  1246  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
  1247  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1248  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1249  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1250  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1251  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1252  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1253  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1254  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1255  		}
  1256  
  1257  		_, roles := db.Process()
  1258  
  1259  		assert.Equal(t, "tscheme_channelguest", roles)
  1260  	})
  1261  
  1262  	t.Run("MigratedTeamScheme_None", func(t *testing.T) {
  1263  		db := allChannelMember{
  1264  			Roles:                         "",
  1265  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1266  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1267  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1268  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1269  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1270  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1271  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1272  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1273  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1274  		}
  1275  
  1276  		_, roles := db.Process()
  1277  
  1278  		assert.Equal(t, "", roles)
  1279  	})
  1280  
  1281  	t.Run("MigratedTeamAndChannelScheme_User", func(t *testing.T) {
  1282  		db := allChannelMember{
  1283  			Roles:                         "",
  1284  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1285  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1286  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1287  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1288  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1289  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1290  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1291  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1292  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1293  		}
  1294  
  1295  		_, roles := db.Process()
  1296  
  1297  		assert.Equal(t, "cscheme_user", roles)
  1298  	})
  1299  
  1300  	t.Run("MigratedTeamAndChannelScheme_Admin", func(t *testing.T) {
  1301  		db := allChannelMember{
  1302  			Roles:                         "",
  1303  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1304  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1305  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: true},
  1306  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1307  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1308  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1309  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1310  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1311  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1312  		}
  1313  
  1314  		_, roles := db.Process()
  1315  
  1316  		assert.Equal(t, "cscheme_user cscheme_admin", roles)
  1317  	})
  1318  
  1319  	t.Run("MigratedTeamAndChannelScheme_Guest", func(t *testing.T) {
  1320  		db := allChannelMember{
  1321  			Roles:                         "",
  1322  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: true},
  1323  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1324  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1325  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1326  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1327  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1328  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1329  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1330  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1331  		}
  1332  
  1333  		_, roles := db.Process()
  1334  
  1335  		assert.Equal(t, "cscheme_guest", roles)
  1336  	})
  1337  
  1338  	t.Run("MigratedTeamAndChannelScheme_None", func(t *testing.T) {
  1339  		db := allChannelMember{
  1340  			Roles:                         "",
  1341  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1342  			SchemeUser:                    sql.NullBool{Valid: true, Bool: false},
  1343  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1344  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: true, String: "tscheme_channelguest"},
  1345  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: true, String: "tscheme_channeluser"},
  1346  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: true, String: "tscheme_channeladmin"},
  1347  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "cscheme_guest"},
  1348  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "cscheme_user"},
  1349  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "cscheme_admin"},
  1350  		}
  1351  
  1352  		_, roles := db.Process()
  1353  
  1354  		assert.Equal(t, "", roles)
  1355  	})
  1356  
  1357  	t.Run("DeduplicationCheck", func(t *testing.T) {
  1358  		db := allChannelMember{
  1359  			Roles:                         "channel_user",
  1360  			SchemeGuest:                   sql.NullBool{Valid: true, Bool: false},
  1361  			SchemeUser:                    sql.NullBool{Valid: true, Bool: true},
  1362  			SchemeAdmin:                   sql.NullBool{Valid: true, Bool: false},
  1363  			TeamSchemeDefaultGuestRole:    sql.NullString{Valid: false},
  1364  			TeamSchemeDefaultUserRole:     sql.NullString{Valid: false},
  1365  			TeamSchemeDefaultAdminRole:    sql.NullString{Valid: false},
  1366  			ChannelSchemeDefaultGuestRole: sql.NullString{Valid: false},
  1367  			ChannelSchemeDefaultUserRole:  sql.NullString{Valid: false},
  1368  			ChannelSchemeDefaultAdminRole: sql.NullString{Valid: false},
  1369  		}
  1370  
  1371  		_, roles := db.Process()
  1372  
  1373  		assert.Equal(t, "channel_user", roles)
  1374  	})
  1375  }