github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/store/sqlstore/team_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  
    12  	"github.com/mattermost/mattermost-server/v5/model"
    13  	"github.com/mattermost/mattermost-server/v5/store/storetest"
    14  )
    15  
    16  func TestTeamStore(t *testing.T) {
    17  	StoreTest(t, storetest.TestTeamStore)
    18  }
    19  
    20  func TestTeamStoreInternalDataTypes(t *testing.T) {
    21  	t.Run("NewTeamMemberFromModel", func(t *testing.T) { testNewTeamMemberFromModel(t) })
    22  	t.Run("TeamMemberWithSchemeRolesToModel", func(t *testing.T) { testTeamMemberWithSchemeRolesToModel(t) })
    23  }
    24  
    25  func testNewTeamMemberFromModel(t *testing.T) {
    26  	m := model.TeamMember{
    27  		TeamId:        model.NewId(),
    28  		UserId:        model.NewId(),
    29  		Roles:         "team_user team_admin custom_role",
    30  		DeleteAt:      12345,
    31  		SchemeGuest:   false,
    32  		SchemeUser:    true,
    33  		SchemeAdmin:   true,
    34  		ExplicitRoles: "custom_role",
    35  	}
    36  
    37  	db := NewTeamMemberFromModel(&m)
    38  
    39  	assert.Equal(t, m.TeamId, db.TeamId)
    40  	assert.Equal(t, m.UserId, db.UserId)
    41  	assert.Equal(t, m.DeleteAt, db.DeleteAt)
    42  	assert.Equal(t, true, db.SchemeGuest.Valid)
    43  	assert.Equal(t, true, db.SchemeUser.Valid)
    44  	assert.Equal(t, true, db.SchemeAdmin.Valid)
    45  	assert.Equal(t, m.SchemeGuest, db.SchemeGuest.Bool)
    46  	assert.Equal(t, m.SchemeUser, db.SchemeUser.Bool)
    47  	assert.Equal(t, m.SchemeAdmin, db.SchemeAdmin.Bool)
    48  	assert.Equal(t, m.ExplicitRoles, db.Roles)
    49  }
    50  
    51  func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
    52  	// Test all the non-role-related properties here.
    53  	t.Run("BasicProperties", func(t *testing.T) {
    54  		db := teamMemberWithSchemeRoles{
    55  			TeamId:                     model.NewId(),
    56  			UserId:                     model.NewId(),
    57  			Roles:                      "custom_role",
    58  			DeleteAt:                   12345,
    59  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
    60  			SchemeUser:                 sql.NullBool{Valid: true, Bool: true},
    61  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: true},
    62  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
    63  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
    64  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
    65  		}
    66  
    67  		m := db.ToModel()
    68  
    69  		assert.Equal(t, db.TeamId, m.TeamId)
    70  		assert.Equal(t, db.UserId, m.UserId)
    71  		assert.Equal(t, "custom_role team_user team_admin", m.Roles)
    72  		assert.Equal(t, db.DeleteAt, m.DeleteAt)
    73  		assert.Equal(t, db.SchemeGuest.Bool, m.SchemeGuest)
    74  		assert.Equal(t, db.SchemeUser.Bool, m.SchemeUser)
    75  		assert.Equal(t, db.SchemeAdmin.Bool, m.SchemeAdmin)
    76  		assert.Equal(t, db.Roles, m.ExplicitRoles)
    77  	})
    78  
    79  	// Example data *before* the Phase 2 migration has taken place.
    80  	t.Run("Unmigrated_NoScheme_User", func(t *testing.T) {
    81  		db := teamMemberWithSchemeRoles{
    82  			Roles:                      "team_user",
    83  			SchemeGuest:                sql.NullBool{Valid: false, Bool: false},
    84  			SchemeUser:                 sql.NullBool{Valid: false, Bool: false},
    85  			SchemeAdmin:                sql.NullBool{Valid: false, Bool: false},
    86  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
    87  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
    88  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
    89  		}
    90  
    91  		m := db.ToModel()
    92  
    93  		assert.Equal(t, "team_user", m.Roles)
    94  		assert.Equal(t, false, m.SchemeGuest)
    95  		assert.Equal(t, true, m.SchemeUser)
    96  		assert.Equal(t, false, m.SchemeAdmin)
    97  		assert.Equal(t, "", m.ExplicitRoles)
    98  	})
    99  
   100  	t.Run("Unmigrated_NoScheme_Admin", func(t *testing.T) {
   101  		db := teamMemberWithSchemeRoles{
   102  			Roles:                      "team_user team_admin",
   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  		}
   110  
   111  		m := db.ToModel()
   112  
   113  		assert.Equal(t, "team_user team_admin", m.Roles)
   114  		assert.Equal(t, false, m.SchemeGuest)
   115  		assert.Equal(t, true, m.SchemeUser)
   116  		assert.Equal(t, true, m.SchemeAdmin)
   117  		assert.Equal(t, "", m.ExplicitRoles)
   118  	})
   119  
   120  	t.Run("Unmigrated_NoScheme_CustomRole", func(t *testing.T) {
   121  		db := teamMemberWithSchemeRoles{
   122  			Roles:                      "custom_role",
   123  			SchemeGuest:                sql.NullBool{Valid: false, Bool: false},
   124  			SchemeUser:                 sql.NullBool{Valid: false, Bool: false},
   125  			SchemeAdmin:                sql.NullBool{Valid: false, Bool: false},
   126  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
   127  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
   128  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
   129  		}
   130  
   131  		m := db.ToModel()
   132  
   133  		assert.Equal(t, "custom_role", m.Roles)
   134  		assert.Equal(t, false, m.SchemeGuest)
   135  		assert.Equal(t, false, m.SchemeUser)
   136  		assert.Equal(t, false, m.SchemeAdmin)
   137  		assert.Equal(t, "custom_role", m.ExplicitRoles)
   138  	})
   139  
   140  	t.Run("Unmigrated_NoScheme_UserAndCustomRole", func(t *testing.T) {
   141  		db := teamMemberWithSchemeRoles{
   142  			Roles:                      "team_user custom_role",
   143  			SchemeGuest:                sql.NullBool{Valid: false, Bool: false},
   144  			SchemeUser:                 sql.NullBool{Valid: false, Bool: false},
   145  			SchemeAdmin:                sql.NullBool{Valid: false, Bool: false},
   146  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
   147  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
   148  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
   149  		}
   150  
   151  		m := db.ToModel()
   152  
   153  		assert.Equal(t, "custom_role team_user", m.Roles)
   154  		assert.Equal(t, false, m.SchemeGuest)
   155  		assert.Equal(t, true, m.SchemeUser)
   156  		assert.Equal(t, false, m.SchemeAdmin)
   157  		assert.Equal(t, "custom_role", m.ExplicitRoles)
   158  	})
   159  
   160  	t.Run("Unmigrated_NoScheme_AdminAndCustomRole", func(t *testing.T) {
   161  		db := teamMemberWithSchemeRoles{
   162  			Roles:                      "team_user team_admin custom_role",
   163  			SchemeGuest:                sql.NullBool{Valid: false, Bool: false},
   164  			SchemeUser:                 sql.NullBool{Valid: false, Bool: false},
   165  			SchemeAdmin:                sql.NullBool{Valid: false, Bool: false},
   166  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
   167  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
   168  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
   169  		}
   170  
   171  		m := db.ToModel()
   172  
   173  		assert.Equal(t, "custom_role team_user team_admin", m.Roles)
   174  		assert.Equal(t, false, m.SchemeGuest)
   175  		assert.Equal(t, true, m.SchemeUser)
   176  		assert.Equal(t, true, m.SchemeAdmin)
   177  		assert.Equal(t, "custom_role", m.ExplicitRoles)
   178  	})
   179  
   180  	t.Run("Unmigrated_NoScheme_NoRoles", func(t *testing.T) {
   181  		db := teamMemberWithSchemeRoles{
   182  			Roles:                      "",
   183  			SchemeGuest:                sql.NullBool{Valid: false, Bool: false},
   184  			SchemeUser:                 sql.NullBool{Valid: false, Bool: false},
   185  			SchemeAdmin:                sql.NullBool{Valid: false, Bool: false},
   186  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
   187  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
   188  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
   189  		}
   190  
   191  		m := db.ToModel()
   192  
   193  		assert.Equal(t, "", m.Roles)
   194  		assert.Equal(t, false, m.SchemeGuest)
   195  		assert.Equal(t, false, m.SchemeUser)
   196  		assert.Equal(t, false, m.SchemeAdmin)
   197  		assert.Equal(t, "", m.ExplicitRoles)
   198  	})
   199  
   200  	// Example data *after* the Phase 2 migration has taken place.
   201  	t.Run("Migrated_NoScheme_User", func(t *testing.T) {
   202  		db := teamMemberWithSchemeRoles{
   203  			Roles:                      "",
   204  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
   205  			SchemeUser:                 sql.NullBool{Valid: true, Bool: true},
   206  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: false},
   207  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
   208  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
   209  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
   210  		}
   211  
   212  		m := db.ToModel()
   213  
   214  		assert.Equal(t, "team_user", m.Roles)
   215  		assert.Equal(t, false, m.SchemeGuest)
   216  		assert.Equal(t, true, m.SchemeUser)
   217  		assert.Equal(t, false, m.SchemeAdmin)
   218  		assert.Equal(t, "", m.ExplicitRoles)
   219  	})
   220  
   221  	t.Run("Migrated_NoScheme_Admin", func(t *testing.T) {
   222  		db := teamMemberWithSchemeRoles{
   223  			Roles:                      "",
   224  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
   225  			SchemeUser:                 sql.NullBool{Valid: true, Bool: true},
   226  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: true},
   227  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
   228  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
   229  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
   230  		}
   231  
   232  		m := db.ToModel()
   233  
   234  		assert.Equal(t, "team_user team_admin", m.Roles)
   235  		assert.Equal(t, false, m.SchemeGuest)
   236  		assert.Equal(t, true, m.SchemeUser)
   237  		assert.Equal(t, true, m.SchemeAdmin)
   238  		assert.Equal(t, "", m.ExplicitRoles)
   239  	})
   240  
   241  	t.Run("Migrated_NoScheme_Guest", func(t *testing.T) {
   242  		db := teamMemberWithSchemeRoles{
   243  			Roles:                      "",
   244  			SchemeGuest:                sql.NullBool{Valid: true, Bool: true},
   245  			SchemeUser:                 sql.NullBool{Valid: true, Bool: false},
   246  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: false},
   247  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
   248  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
   249  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
   250  		}
   251  
   252  		m := db.ToModel()
   253  
   254  		assert.Equal(t, "team_guest", m.Roles)
   255  		assert.Equal(t, true, m.SchemeGuest)
   256  		assert.Equal(t, false, m.SchemeUser)
   257  		assert.Equal(t, false, m.SchemeAdmin)
   258  		assert.Equal(t, "", m.ExplicitRoles)
   259  	})
   260  
   261  	t.Run("Migrated_NoScheme_CustomRole", func(t *testing.T) {
   262  		db := teamMemberWithSchemeRoles{
   263  			Roles:                      "custom_role",
   264  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
   265  			SchemeUser:                 sql.NullBool{Valid: true, Bool: false},
   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  		}
   271  
   272  		m := db.ToModel()
   273  
   274  		assert.Equal(t, "custom_role", m.Roles)
   275  		assert.Equal(t, false, m.SchemeGuest)
   276  		assert.Equal(t, false, m.SchemeUser)
   277  		assert.Equal(t, false, m.SchemeAdmin)
   278  		assert.Equal(t, "custom_role", m.ExplicitRoles)
   279  	})
   280  
   281  	t.Run("Migrated_NoScheme_UserAndCustomRole", func(t *testing.T) {
   282  		db := teamMemberWithSchemeRoles{
   283  			Roles:                      "custom_role",
   284  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
   285  			SchemeUser:                 sql.NullBool{Valid: true, Bool: true},
   286  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: false},
   287  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
   288  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
   289  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
   290  		}
   291  
   292  		m := db.ToModel()
   293  
   294  		assert.Equal(t, "custom_role team_user", m.Roles)
   295  		assert.Equal(t, false, m.SchemeGuest)
   296  		assert.Equal(t, true, m.SchemeUser)
   297  		assert.Equal(t, false, m.SchemeAdmin)
   298  		assert.Equal(t, "custom_role", m.ExplicitRoles)
   299  	})
   300  
   301  	t.Run("Migrated_NoScheme_AdminAndCustomRole", func(t *testing.T) {
   302  		db := teamMemberWithSchemeRoles{
   303  			Roles:                      "custom_role",
   304  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
   305  			SchemeUser:                 sql.NullBool{Valid: true, Bool: true},
   306  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: true},
   307  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
   308  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
   309  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
   310  		}
   311  
   312  		m := db.ToModel()
   313  
   314  		assert.Equal(t, "custom_role team_user team_admin", m.Roles)
   315  		assert.Equal(t, false, m.SchemeGuest)
   316  		assert.Equal(t, true, m.SchemeUser)
   317  		assert.Equal(t, true, m.SchemeAdmin)
   318  		assert.Equal(t, "custom_role", m.ExplicitRoles)
   319  	})
   320  
   321  	t.Run("Migrated_NoScheme_GuestAndCustomRole", func(t *testing.T) {
   322  		db := teamMemberWithSchemeRoles{
   323  			Roles:                      "custom_role",
   324  			SchemeGuest:                sql.NullBool{Valid: true, Bool: true},
   325  			SchemeUser:                 sql.NullBool{Valid: true, Bool: false},
   326  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: false},
   327  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
   328  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
   329  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
   330  		}
   331  
   332  		m := db.ToModel()
   333  
   334  		assert.Equal(t, "custom_role team_guest", m.Roles)
   335  		assert.Equal(t, true, m.SchemeGuest)
   336  		assert.Equal(t, false, m.SchemeUser)
   337  		assert.Equal(t, false, m.SchemeAdmin)
   338  		assert.Equal(t, "custom_role", m.ExplicitRoles)
   339  	})
   340  
   341  	t.Run("Migrated_NoScheme_NoRoles", func(t *testing.T) {
   342  		db := teamMemberWithSchemeRoles{
   343  			Roles:                      "",
   344  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
   345  			SchemeUser:                 sql.NullBool{Valid: true, Bool: false},
   346  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: false},
   347  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
   348  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: false},
   349  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
   350  		}
   351  
   352  		m := db.ToModel()
   353  
   354  		assert.Equal(t, "", m.Roles)
   355  		assert.Equal(t, false, m.SchemeGuest)
   356  		assert.Equal(t, false, m.SchemeUser)
   357  		assert.Equal(t, false, m.SchemeAdmin)
   358  		assert.Equal(t, "", m.ExplicitRoles)
   359  	})
   360  
   361  	// Example data with a team scheme.
   362  	t.Run("Migrated_TeamScheme_User", func(t *testing.T) {
   363  		db := teamMemberWithSchemeRoles{
   364  			Roles:                      "",
   365  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
   366  			SchemeUser:                 sql.NullBool{Valid: true, Bool: true},
   367  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: false},
   368  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
   369  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "tscheme_user"},
   370  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
   371  		}
   372  
   373  		m := db.ToModel()
   374  
   375  		assert.Equal(t, "tscheme_user", m.Roles)
   376  		assert.Equal(t, false, m.SchemeGuest)
   377  		assert.Equal(t, true, m.SchemeUser)
   378  		assert.Equal(t, false, m.SchemeAdmin)
   379  		assert.Equal(t, "", m.ExplicitRoles)
   380  	})
   381  
   382  	t.Run("Migrated_TeamScheme_Admin", func(t *testing.T) {
   383  		db := teamMemberWithSchemeRoles{
   384  			Roles:                      "",
   385  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
   386  			SchemeUser:                 sql.NullBool{Valid: true, Bool: true},
   387  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: true},
   388  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
   389  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "tscheme_user"},
   390  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
   391  		}
   392  
   393  		m := db.ToModel()
   394  
   395  		assert.Equal(t, "tscheme_user tscheme_admin", m.Roles)
   396  		assert.Equal(t, false, m.SchemeGuest)
   397  		assert.Equal(t, true, m.SchemeUser)
   398  		assert.Equal(t, true, m.SchemeAdmin)
   399  		assert.Equal(t, "", m.ExplicitRoles)
   400  	})
   401  
   402  	t.Run("Migrated_TeamScheme_Guest", func(t *testing.T) {
   403  		db := teamMemberWithSchemeRoles{
   404  			Roles:                      "",
   405  			SchemeGuest:                sql.NullBool{Valid: true, Bool: true},
   406  			SchemeUser:                 sql.NullBool{Valid: true, Bool: false},
   407  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: false},
   408  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
   409  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "tscheme_user"},
   410  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
   411  		}
   412  
   413  		m := db.ToModel()
   414  
   415  		assert.Equal(t, "tscheme_guest", m.Roles)
   416  		assert.Equal(t, true, m.SchemeGuest)
   417  		assert.Equal(t, false, m.SchemeUser)
   418  		assert.Equal(t, false, m.SchemeAdmin)
   419  		assert.Equal(t, "", m.ExplicitRoles)
   420  	})
   421  
   422  	t.Run("Migrated_TeamScheme_CustomRole", func(t *testing.T) {
   423  		db := teamMemberWithSchemeRoles{
   424  			Roles:                      "custom_role",
   425  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
   426  			SchemeUser:                 sql.NullBool{Valid: true, Bool: false},
   427  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: false},
   428  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
   429  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "tscheme_user"},
   430  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
   431  		}
   432  
   433  		m := db.ToModel()
   434  
   435  		assert.Equal(t, "custom_role", m.Roles)
   436  		assert.Equal(t, false, m.SchemeGuest)
   437  		assert.Equal(t, false, m.SchemeUser)
   438  		assert.Equal(t, false, m.SchemeAdmin)
   439  		assert.Equal(t, "custom_role", m.ExplicitRoles)
   440  	})
   441  
   442  	t.Run("Migrated_TeamScheme_UserAndCustomRole", func(t *testing.T) {
   443  		db := teamMemberWithSchemeRoles{
   444  			Roles:                      "custom_role",
   445  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
   446  			SchemeUser:                 sql.NullBool{Valid: true, Bool: true},
   447  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: false},
   448  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
   449  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "tscheme_user"},
   450  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
   451  		}
   452  
   453  		m := db.ToModel()
   454  
   455  		assert.Equal(t, "custom_role tscheme_user", m.Roles)
   456  		assert.Equal(t, false, m.SchemeGuest)
   457  		assert.Equal(t, true, m.SchemeUser)
   458  		assert.Equal(t, false, m.SchemeAdmin)
   459  		assert.Equal(t, "custom_role", m.ExplicitRoles)
   460  	})
   461  
   462  	t.Run("Migrated_TeamScheme_AdminAndCustomRole", func(t *testing.T) {
   463  		db := teamMemberWithSchemeRoles{
   464  			Roles:                      "custom_role",
   465  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
   466  			SchemeUser:                 sql.NullBool{Valid: true, Bool: true},
   467  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: true},
   468  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
   469  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "tscheme_user"},
   470  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
   471  		}
   472  
   473  		m := db.ToModel()
   474  
   475  		assert.Equal(t, "custom_role tscheme_user tscheme_admin", m.Roles)
   476  		assert.Equal(t, false, m.SchemeGuest)
   477  		assert.Equal(t, true, m.SchemeUser)
   478  		assert.Equal(t, true, m.SchemeAdmin)
   479  		assert.Equal(t, "custom_role", m.ExplicitRoles)
   480  	})
   481  
   482  	t.Run("Migrated_TeamScheme_GuestAndCustomRole", func(t *testing.T) {
   483  		db := teamMemberWithSchemeRoles{
   484  			Roles:                      "custom_role",
   485  			SchemeGuest:                sql.NullBool{Valid: true, Bool: true},
   486  			SchemeUser:                 sql.NullBool{Valid: true, Bool: false},
   487  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: false},
   488  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
   489  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "tscheme_user"},
   490  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
   491  		}
   492  
   493  		m := db.ToModel()
   494  
   495  		assert.Equal(t, "custom_role tscheme_guest", m.Roles)
   496  		assert.Equal(t, true, m.SchemeGuest)
   497  		assert.Equal(t, false, m.SchemeUser)
   498  		assert.Equal(t, false, m.SchemeAdmin)
   499  		assert.Equal(t, "custom_role", m.ExplicitRoles)
   500  	})
   501  
   502  	t.Run("Migrated_TeamScheme_NoRoles", func(t *testing.T) {
   503  		db := teamMemberWithSchemeRoles{
   504  			Roles:                      "",
   505  			SchemeGuest:                sql.NullBool{Valid: true, Bool: false},
   506  			SchemeUser:                 sql.NullBool{Valid: true, Bool: false},
   507  			SchemeAdmin:                sql.NullBool{Valid: true, Bool: false},
   508  			TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
   509  			TeamSchemeDefaultUserRole:  sql.NullString{Valid: true, String: "tscheme_user"},
   510  			TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
   511  		}
   512  
   513  		m := db.ToModel()
   514  
   515  		assert.Equal(t, "", m.Roles)
   516  		assert.Equal(t, false, m.SchemeGuest)
   517  		assert.Equal(t, false, m.SchemeUser)
   518  		assert.Equal(t, false, m.SchemeAdmin)
   519  		assert.Equal(t, "", m.ExplicitRoles)
   520  	})
   521  }