github.com/levb/mattermost-server@v5.3.1+incompatible/store/storetest/team_store.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package storetest
     5  
     6  import (
     7  	"strings"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  
    14  	"github.com/mattermost/mattermost-server/model"
    15  	"github.com/mattermost/mattermost-server/store"
    16  )
    17  
    18  func TestTeamStore(t *testing.T, ss store.Store) {
    19  	createDefaultRoles(t, ss)
    20  
    21  	t.Run("Save", func(t *testing.T) { testTeamStoreSave(t, ss) })
    22  	t.Run("Update", func(t *testing.T) { testTeamStoreUpdate(t, ss) })
    23  	t.Run("UpdateDisplayName", func(t *testing.T) { testTeamStoreUpdateDisplayName(t, ss) })
    24  	t.Run("Get", func(t *testing.T) { testTeamStoreGet(t, ss) })
    25  	t.Run("GetByName", func(t *testing.T) { testTeamStoreGetByName(t, ss) })
    26  	t.Run("SearchByName", func(t *testing.T) { testTeamStoreSearchByName(t, ss) })
    27  	t.Run("SearchAll", func(t *testing.T) { testTeamStoreSearchAll(t, ss) })
    28  	t.Run("SearchOpen", func(t *testing.T) { testTeamStoreSearchOpen(t, ss) })
    29  	t.Run("GetByIniviteId", func(t *testing.T) { testTeamStoreGetByIniviteId(t, ss) })
    30  	t.Run("ByUserId", func(t *testing.T) { testTeamStoreByUserId(t, ss) })
    31  	t.Run("GetAllTeamListing", func(t *testing.T) { testGetAllTeamListing(t, ss) })
    32  	t.Run("GetAllTeamPageListing", func(t *testing.T) { testGetAllTeamPageListing(t, ss) })
    33  	t.Run("Delete", func(t *testing.T) { testDelete(t, ss) })
    34  	t.Run("TeamCount", func(t *testing.T) { testTeamCount(t, ss) })
    35  	t.Run("TeamMembers", func(t *testing.T) { testTeamMembers(t, ss) })
    36  	t.Run("SaveTeamMemberMaxMembers", func(t *testing.T) { testSaveTeamMemberMaxMembers(t, ss) })
    37  	t.Run("GetTeamMember", func(t *testing.T) { testGetTeamMember(t, ss) })
    38  	t.Run("GetTeamMembersByIds", func(t *testing.T) { testGetTeamMembersByIds(t, ss) })
    39  	t.Run("MemberCount", func(t *testing.T) { testTeamStoreMemberCount(t, ss) })
    40  	t.Run("GetChannelUnreadsForAllTeams", func(t *testing.T) { testGetChannelUnreadsForAllTeams(t, ss) })
    41  	t.Run("GetChannelUnreadsForTeam", func(t *testing.T) { testGetChannelUnreadsForTeam(t, ss) })
    42  	t.Run("UpdateLastTeamIconUpdate", func(t *testing.T) { testUpdateLastTeamIconUpdate(t, ss) })
    43  	t.Run("GetTeamsByScheme", func(t *testing.T) { testGetTeamsByScheme(t, ss) })
    44  	t.Run("MigrateTeamMembers", func(t *testing.T) { testTeamStoreMigrateTeamMembers(t, ss) })
    45  	t.Run("ResetAllTeamSchemes", func(t *testing.T) { testResetAllTeamSchemes(t, ss) })
    46  	t.Run("ClearAllCustomRoleAssignments", func(t *testing.T) { testTeamStoreClearAllCustomRoleAssignments(t, ss) })
    47  	t.Run("AnalyticsGetTeamCountForScheme", func(t *testing.T) { testTeamStoreAnalyticsGetTeamCountForScheme(t, ss) })
    48  }
    49  
    50  func testTeamStoreSave(t *testing.T, ss store.Store) {
    51  	o1 := model.Team{}
    52  	o1.DisplayName = "DisplayName"
    53  	o1.Name = "z-z-z" + model.NewId() + "b"
    54  	o1.Email = MakeEmail()
    55  	o1.Type = model.TEAM_OPEN
    56  
    57  	if err := (<-ss.Team().Save(&o1)).Err; err != nil {
    58  		t.Fatal("couldn't save item", err)
    59  	}
    60  
    61  	if err := (<-ss.Team().Save(&o1)).Err; err == nil {
    62  		t.Fatal("shouldn't be able to update from save")
    63  	}
    64  
    65  	o1.Id = ""
    66  	if err := (<-ss.Team().Save(&o1)).Err; err == nil {
    67  		t.Fatal("should be unique domain")
    68  	}
    69  }
    70  
    71  func testTeamStoreUpdate(t *testing.T, ss store.Store) {
    72  	o1 := model.Team{}
    73  	o1.DisplayName = "DisplayName"
    74  	o1.Name = "z-z-z" + model.NewId() + "b"
    75  	o1.Email = MakeEmail()
    76  	o1.Type = model.TEAM_OPEN
    77  	if err := (<-ss.Team().Save(&o1)).Err; err != nil {
    78  		t.Fatal(err)
    79  	}
    80  
    81  	time.Sleep(100 * time.Millisecond)
    82  
    83  	if err := (<-ss.Team().Update(&o1)).Err; err != nil {
    84  		t.Fatal(err)
    85  	}
    86  
    87  	o1.Id = "missing"
    88  	if err := (<-ss.Team().Update(&o1)).Err; err == nil {
    89  		t.Fatal("Update should have failed because of missing key")
    90  	}
    91  
    92  	o1.Id = model.NewId()
    93  	if err := (<-ss.Team().Update(&o1)).Err; err == nil {
    94  		t.Fatal("Update should have faile because id change")
    95  	}
    96  }
    97  
    98  func testTeamStoreUpdateDisplayName(t *testing.T, ss store.Store) {
    99  	o1 := &model.Team{}
   100  	o1.DisplayName = "Display Name"
   101  	o1.Name = "z-z-z" + model.NewId() + "b"
   102  	o1.Email = MakeEmail()
   103  	o1.Type = model.TEAM_OPEN
   104  	o1 = (<-ss.Team().Save(o1)).Data.(*model.Team)
   105  
   106  	newDisplayName := "NewDisplayName"
   107  
   108  	if err := (<-ss.Team().UpdateDisplayName(newDisplayName, o1.Id)).Err; err != nil {
   109  		t.Fatal(err)
   110  	}
   111  
   112  	ro1 := (<-ss.Team().Get(o1.Id)).Data.(*model.Team)
   113  	if ro1.DisplayName != newDisplayName {
   114  		t.Fatal("DisplayName not updated")
   115  	}
   116  }
   117  
   118  func testTeamStoreGet(t *testing.T, ss store.Store) {
   119  	o1 := model.Team{}
   120  	o1.DisplayName = "DisplayName"
   121  	o1.Name = "z-z-z" + model.NewId() + "b"
   122  	o1.Email = MakeEmail()
   123  	o1.Type = model.TEAM_OPEN
   124  	store.Must(ss.Team().Save(&o1))
   125  
   126  	if r1 := <-ss.Team().Get(o1.Id); r1.Err != nil {
   127  		t.Fatal(r1.Err)
   128  	} else {
   129  		if r1.Data.(*model.Team).ToJson() != o1.ToJson() {
   130  			t.Fatal("invalid returned team")
   131  		}
   132  	}
   133  
   134  	if err := (<-ss.Team().Get("")).Err; err == nil {
   135  		t.Fatal("Missing id should have failed")
   136  	}
   137  }
   138  
   139  func testTeamStoreGetByName(t *testing.T, ss store.Store) {
   140  	o1 := model.Team{}
   141  	o1.DisplayName = "DisplayName"
   142  	o1.Name = "z-z-z" + model.NewId() + "b"
   143  	o1.Email = MakeEmail()
   144  	o1.Type = model.TEAM_OPEN
   145  
   146  	if err := (<-ss.Team().Save(&o1)).Err; err != nil {
   147  		t.Fatal(err)
   148  	}
   149  
   150  	if r1 := <-ss.Team().GetByName(o1.Name); r1.Err != nil {
   151  		t.Fatal(r1.Err)
   152  	} else {
   153  		if r1.Data.(*model.Team).ToJson() != o1.ToJson() {
   154  			t.Fatal("invalid returned team")
   155  		}
   156  	}
   157  
   158  	if err := (<-ss.Team().GetByName("")).Err; err == nil {
   159  		t.Fatal("Missing id should have failed")
   160  	}
   161  }
   162  
   163  func testTeamStoreSearchByName(t *testing.T, ss store.Store) {
   164  	o1 := model.Team{}
   165  	o1.DisplayName = "DisplayName"
   166  	var name = "zzz" + model.NewId()
   167  	o1.Name = name + "b"
   168  	o1.Email = MakeEmail()
   169  	o1.Type = model.TEAM_OPEN
   170  
   171  	if err := (<-ss.Team().Save(&o1)).Err; err != nil {
   172  		t.Fatal(err)
   173  	}
   174  
   175  	if r1 := <-ss.Team().SearchByName(name); r1.Err != nil {
   176  		t.Fatal(r1.Err)
   177  	} else {
   178  		if r1.Data.([]*model.Team)[0].ToJson() != o1.ToJson() {
   179  			t.Fatal("invalid returned team")
   180  		}
   181  	}
   182  }
   183  
   184  func testTeamStoreSearchAll(t *testing.T, ss store.Store) {
   185  	o1 := model.Team{}
   186  	o1.DisplayName = "ADisplayName" + model.NewId()
   187  	o1.Name = "zz" + model.NewId() + "a"
   188  	o1.Email = MakeEmail()
   189  	o1.Type = model.TEAM_OPEN
   190  
   191  	if err := (<-ss.Team().Save(&o1)).Err; err != nil {
   192  		t.Fatal(err)
   193  	}
   194  
   195  	p2 := model.Team{}
   196  	p2.DisplayName = "BDisplayName" + model.NewId()
   197  	p2.Name = "b" + model.NewId() + "b"
   198  	p2.Email = MakeEmail()
   199  	p2.Type = model.TEAM_INVITE
   200  
   201  	if err := (<-ss.Team().Save(&p2)).Err; err != nil {
   202  		t.Fatal(err)
   203  	}
   204  
   205  	r1 := <-ss.Team().SearchAll(o1.Name)
   206  	if r1.Err != nil {
   207  		t.Fatal(r1.Err)
   208  	}
   209  	if len(r1.Data.([]*model.Team)) != 1 {
   210  		t.Fatal("should have returned 1 team")
   211  	}
   212  	if r1.Data.([]*model.Team)[0].ToJson() != o1.ToJson() {
   213  		t.Fatal("invalid returned team")
   214  	}
   215  
   216  	r1 = <-ss.Team().SearchAll(p2.DisplayName)
   217  	if r1.Err != nil {
   218  		t.Fatal(r1.Err)
   219  	}
   220  	if len(r1.Data.([]*model.Team)) != 1 {
   221  		t.Fatal("should have returned 1 team")
   222  	}
   223  	if r1.Data.([]*model.Team)[0].ToJson() != p2.ToJson() {
   224  		t.Fatal("invalid returned team")
   225  	}
   226  
   227  	r1 = <-ss.Team().SearchAll("junk")
   228  	if r1.Err != nil {
   229  		t.Fatal(r1.Err)
   230  	}
   231  	if len(r1.Data.([]*model.Team)) != 0 {
   232  		t.Fatal("should have not returned a team")
   233  	}
   234  }
   235  
   236  func testTeamStoreSearchOpen(t *testing.T, ss store.Store) {
   237  	o1 := model.Team{}
   238  	o1.DisplayName = "ADisplayName" + model.NewId()
   239  	o1.Name = "zz" + model.NewId() + "a"
   240  	o1.Email = MakeEmail()
   241  	o1.Type = model.TEAM_OPEN
   242  	o1.AllowOpenInvite = true
   243  
   244  	if err := (<-ss.Team().Save(&o1)).Err; err != nil {
   245  		t.Fatal(err)
   246  	}
   247  
   248  	o2 := model.Team{}
   249  	o2.DisplayName = "ADisplayName" + model.NewId()
   250  	o2.Name = "zz" + model.NewId() + "a"
   251  	o2.Email = MakeEmail()
   252  	o2.Type = model.TEAM_OPEN
   253  	o2.AllowOpenInvite = false
   254  
   255  	if err := (<-ss.Team().Save(&o2)).Err; err != nil {
   256  		t.Fatal(err)
   257  	}
   258  
   259  	p2 := model.Team{}
   260  	p2.DisplayName = "BDisplayName" + model.NewId()
   261  	p2.Name = "b" + model.NewId() + "b"
   262  	p2.Email = MakeEmail()
   263  	p2.Type = model.TEAM_INVITE
   264  	p2.AllowOpenInvite = true
   265  
   266  	if err := (<-ss.Team().Save(&p2)).Err; err != nil {
   267  		t.Fatal(err)
   268  	}
   269  
   270  	r1 := <-ss.Team().SearchOpen(o1.Name)
   271  	if r1.Err != nil {
   272  		t.Fatal(r1.Err)
   273  	}
   274  	if len(r1.Data.([]*model.Team)) != 1 {
   275  		t.Fatal("should have returned 1 team")
   276  	}
   277  	if r1.Data.([]*model.Team)[0].ToJson() != o1.ToJson() {
   278  		t.Fatal("invalid returned team")
   279  	}
   280  
   281  	r1 = <-ss.Team().SearchOpen(o1.DisplayName)
   282  	if r1.Err != nil {
   283  		t.Fatal(r1.Err)
   284  	}
   285  	if len(r1.Data.([]*model.Team)) != 1 {
   286  		t.Fatal("should have returned 1 team")
   287  	}
   288  	if r1.Data.([]*model.Team)[0].ToJson() != o1.ToJson() {
   289  		t.Fatal("invalid returned team")
   290  	}
   291  
   292  	r1 = <-ss.Team().SearchOpen(p2.Name)
   293  	if r1.Err != nil {
   294  		t.Fatal(r1.Err)
   295  	}
   296  	if len(r1.Data.([]*model.Team)) != 0 {
   297  		t.Fatal("should have not returned a team")
   298  	}
   299  
   300  	r1 = <-ss.Team().SearchOpen(p2.DisplayName)
   301  	if r1.Err != nil {
   302  		t.Fatal(r1.Err)
   303  	}
   304  	if len(r1.Data.([]*model.Team)) != 0 {
   305  		t.Fatal("should have not returned a team")
   306  	}
   307  
   308  	r1 = <-ss.Team().SearchOpen("junk")
   309  	if r1.Err != nil {
   310  		t.Fatal(r1.Err)
   311  	}
   312  	if len(r1.Data.([]*model.Team)) != 0 {
   313  		t.Fatal("should have not returned a team")
   314  	}
   315  
   316  	r1 = <-ss.Team().SearchOpen(o2.DisplayName)
   317  	if r1.Err != nil {
   318  		t.Fatal(r1.Err)
   319  	}
   320  	if len(r1.Data.([]*model.Team)) != 0 {
   321  		t.Fatal("should have not returned a team")
   322  	}
   323  }
   324  
   325  func testTeamStoreGetByIniviteId(t *testing.T, ss store.Store) {
   326  	o1 := model.Team{}
   327  	o1.DisplayName = "DisplayName"
   328  	o1.Name = "z-z-z" + model.NewId() + "b"
   329  	o1.Email = MakeEmail()
   330  	o1.Type = model.TEAM_OPEN
   331  	o1.InviteId = model.NewId()
   332  
   333  	if err := (<-ss.Team().Save(&o1)).Err; err != nil {
   334  		t.Fatal(err)
   335  	}
   336  
   337  	o2 := model.Team{}
   338  	o2.DisplayName = "DisplayName"
   339  	o2.Name = "zz" + model.NewId() + "b"
   340  	o2.Email = MakeEmail()
   341  	o2.Type = model.TEAM_OPEN
   342  
   343  	if err := (<-ss.Team().Save(&o2)).Err; err != nil {
   344  		t.Fatal(err)
   345  	}
   346  
   347  	if r1 := <-ss.Team().GetByInviteId(o1.InviteId); r1.Err != nil {
   348  		t.Fatal(r1.Err)
   349  	} else {
   350  		if r1.Data.(*model.Team).ToJson() != o1.ToJson() {
   351  			t.Fatal("invalid returned team")
   352  		}
   353  	}
   354  
   355  	o2.InviteId = ""
   356  	<-ss.Team().Update(&o2)
   357  
   358  	if r1 := <-ss.Team().GetByInviteId(o2.Id); r1.Err != nil {
   359  		t.Fatal(r1.Err)
   360  	} else {
   361  		if r1.Data.(*model.Team).Id != o2.Id {
   362  			t.Fatal("invalid returned team")
   363  		}
   364  	}
   365  
   366  	if err := (<-ss.Team().GetByInviteId("")).Err; err == nil {
   367  		t.Fatal("Missing id should have failed")
   368  	}
   369  }
   370  
   371  func testTeamStoreByUserId(t *testing.T, ss store.Store) {
   372  	o1 := &model.Team{}
   373  	o1.DisplayName = "DisplayName"
   374  	o1.Name = "z-z-z" + model.NewId() + "b"
   375  	o1.Email = MakeEmail()
   376  	o1.Type = model.TEAM_OPEN
   377  	o1.InviteId = model.NewId()
   378  	o1 = store.Must(ss.Team().Save(o1)).(*model.Team)
   379  
   380  	m1 := &model.TeamMember{TeamId: o1.Id, UserId: model.NewId()}
   381  	store.Must(ss.Team().SaveMember(m1, -1))
   382  
   383  	if r1 := <-ss.Team().GetTeamsByUserId(m1.UserId); r1.Err != nil {
   384  		t.Fatal(r1.Err)
   385  	} else {
   386  		teams := r1.Data.([]*model.Team)
   387  		if len(teams) == 0 {
   388  			t.Fatal("Should return a team")
   389  		}
   390  
   391  		if teams[0].Id != o1.Id {
   392  			t.Fatal("should be a member")
   393  		}
   394  
   395  	}
   396  }
   397  
   398  func testGetAllTeamListing(t *testing.T, ss store.Store) {
   399  	o1 := model.Team{}
   400  	o1.DisplayName = "DisplayName"
   401  	o1.Name = "z-z-z" + model.NewId() + "b"
   402  	o1.Email = MakeEmail()
   403  	o1.Type = model.TEAM_OPEN
   404  	o1.AllowOpenInvite = true
   405  	store.Must(ss.Team().Save(&o1))
   406  
   407  	o2 := model.Team{}
   408  	o2.DisplayName = "DisplayName"
   409  	o2.Name = "zz" + model.NewId() + "b"
   410  	o2.Email = MakeEmail()
   411  	o2.Type = model.TEAM_OPEN
   412  	store.Must(ss.Team().Save(&o2))
   413  
   414  	o3 := model.Team{}
   415  	o3.DisplayName = "DisplayName"
   416  	o3.Name = "z-z-z" + model.NewId() + "b"
   417  	o3.Email = MakeEmail()
   418  	o3.Type = model.TEAM_INVITE
   419  	o3.AllowOpenInvite = true
   420  	store.Must(ss.Team().Save(&o3))
   421  
   422  	o4 := model.Team{}
   423  	o4.DisplayName = "DisplayName"
   424  	o4.Name = "zz" + model.NewId() + "b"
   425  	o4.Email = MakeEmail()
   426  	o4.Type = model.TEAM_INVITE
   427  	store.Must(ss.Team().Save(&o4))
   428  
   429  	if r1 := <-ss.Team().GetAllTeamListing(); r1.Err != nil {
   430  		t.Fatal(r1.Err)
   431  	} else {
   432  		teams := r1.Data.([]*model.Team)
   433  
   434  		for _, team := range teams {
   435  			if !team.AllowOpenInvite {
   436  				t.Fatal("should have returned team with AllowOpenInvite as true")
   437  			}
   438  		}
   439  
   440  		if len(teams) == 0 {
   441  			t.Fatal("failed team listing")
   442  		}
   443  	}
   444  }
   445  
   446  func testGetAllTeamPageListing(t *testing.T, ss store.Store) {
   447  	o1 := model.Team{}
   448  	o1.DisplayName = "DisplayName"
   449  	o1.Name = "z-z-z" + model.NewId() + "b"
   450  	o1.Email = MakeEmail()
   451  	o1.Type = model.TEAM_OPEN
   452  	o1.AllowOpenInvite = true
   453  	store.Must(ss.Team().Save(&o1))
   454  
   455  	o2 := model.Team{}
   456  	o2.DisplayName = "DisplayName"
   457  	o2.Name = "zz" + model.NewId() + "b"
   458  	o2.Email = MakeEmail()
   459  	o2.Type = model.TEAM_OPEN
   460  	o2.AllowOpenInvite = false
   461  	store.Must(ss.Team().Save(&o2))
   462  
   463  	o3 := model.Team{}
   464  	o3.DisplayName = "DisplayName"
   465  	o3.Name = "z-z-z" + model.NewId() + "b"
   466  	o3.Email = MakeEmail()
   467  	o3.Type = model.TEAM_INVITE
   468  	o3.AllowOpenInvite = true
   469  	store.Must(ss.Team().Save(&o3))
   470  
   471  	o4 := model.Team{}
   472  	o4.DisplayName = "DisplayName"
   473  	o4.Name = "zz" + model.NewId() + "b"
   474  	o4.Email = MakeEmail()
   475  	o4.Type = model.TEAM_INVITE
   476  	o4.AllowOpenInvite = false
   477  	store.Must(ss.Team().Save(&o4))
   478  
   479  	if r1 := <-ss.Team().GetAllTeamPageListing(0, 10); r1.Err != nil {
   480  		t.Fatal(r1.Err)
   481  	} else {
   482  		teams := r1.Data.([]*model.Team)
   483  
   484  		for _, team := range teams {
   485  			if !team.AllowOpenInvite {
   486  				t.Fatal("should have returned team with AllowOpenInvite as true")
   487  			}
   488  		}
   489  
   490  		if len(teams) > 10 {
   491  			t.Fatal("should have returned max of 10 teams")
   492  		}
   493  	}
   494  
   495  	o5 := model.Team{}
   496  	o5.DisplayName = "DisplayName"
   497  	o5.Name = "z-z-z" + model.NewId() + "b"
   498  	o5.Email = MakeEmail()
   499  	o5.Type = model.TEAM_OPEN
   500  	o5.AllowOpenInvite = true
   501  	store.Must(ss.Team().Save(&o5))
   502  
   503  	if r1 := <-ss.Team().GetAllTeamPageListing(0, 4); r1.Err != nil {
   504  		t.Fatal(r1.Err)
   505  	} else {
   506  		teams := r1.Data.([]*model.Team)
   507  
   508  		for _, team := range teams {
   509  			if !team.AllowOpenInvite {
   510  				t.Fatal("should have returned team with AllowOpenInvite as true")
   511  			}
   512  		}
   513  
   514  		if len(teams) > 4 {
   515  			t.Fatal("should have returned max of 4 teams")
   516  		}
   517  	}
   518  
   519  	if r1 := <-ss.Team().GetAllTeamPageListing(1, 1); r1.Err != nil {
   520  		t.Fatal(r1.Err)
   521  	} else {
   522  		teams := r1.Data.([]*model.Team)
   523  
   524  		for _, team := range teams {
   525  			if !team.AllowOpenInvite {
   526  				t.Fatal("should have returned team with AllowOpenInvite as true")
   527  			}
   528  		}
   529  
   530  		if len(teams) > 1 {
   531  			t.Fatal("should have returned max of 1 team")
   532  		}
   533  	}
   534  }
   535  
   536  func testDelete(t *testing.T, ss store.Store) {
   537  	o1 := model.Team{}
   538  	o1.DisplayName = "DisplayName"
   539  	o1.Name = "z-z-z" + model.NewId() + "b"
   540  	o1.Email = MakeEmail()
   541  	o1.Type = model.TEAM_OPEN
   542  	o1.AllowOpenInvite = true
   543  	store.Must(ss.Team().Save(&o1))
   544  
   545  	o2 := model.Team{}
   546  	o2.DisplayName = "DisplayName"
   547  	o2.Name = "zz" + model.NewId() + "b"
   548  	o2.Email = MakeEmail()
   549  	o2.Type = model.TEAM_OPEN
   550  	store.Must(ss.Team().Save(&o2))
   551  
   552  	if r1 := <-ss.Team().PermanentDelete(o1.Id); r1.Err != nil {
   553  		t.Fatal(r1.Err)
   554  	}
   555  }
   556  
   557  func testTeamCount(t *testing.T, ss store.Store) {
   558  	o1 := model.Team{}
   559  	o1.DisplayName = "DisplayName"
   560  	o1.Name = "z-z-z" + model.NewId() + "b"
   561  	o1.Email = MakeEmail()
   562  	o1.Type = model.TEAM_OPEN
   563  	o1.AllowOpenInvite = true
   564  	store.Must(ss.Team().Save(&o1))
   565  
   566  	if r1 := <-ss.Team().AnalyticsTeamCount(); r1.Err != nil {
   567  		t.Fatal(r1.Err)
   568  	} else {
   569  		if r1.Data.(int64) == 0 {
   570  			t.Fatal("should be at least 1 team")
   571  		}
   572  	}
   573  }
   574  
   575  func testTeamMembers(t *testing.T, ss store.Store) {
   576  	teamId1 := model.NewId()
   577  	teamId2 := model.NewId()
   578  
   579  	m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()}
   580  	m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()}
   581  	m3 := &model.TeamMember{TeamId: teamId2, UserId: model.NewId()}
   582  
   583  	if r1 := <-ss.Team().SaveMember(m1, -1); r1.Err != nil {
   584  		t.Fatal(r1.Err)
   585  	}
   586  
   587  	store.Must(ss.Team().SaveMember(m2, -1))
   588  	store.Must(ss.Team().SaveMember(m3, -1))
   589  
   590  	if r1 := <-ss.Team().GetMembers(teamId1, 0, 100); r1.Err != nil {
   591  		t.Fatal(r1.Err)
   592  	} else {
   593  		ms := r1.Data.([]*model.TeamMember)
   594  		require.Len(t, ms, 2)
   595  	}
   596  
   597  	if r1 := <-ss.Team().GetMembers(teamId2, 0, 100); r1.Err != nil {
   598  		t.Fatal(r1.Err)
   599  	} else {
   600  		ms := r1.Data.([]*model.TeamMember)
   601  
   602  		require.Len(t, ms, 1)
   603  		require.Equal(t, m3.UserId, ms[0].UserId)
   604  	}
   605  
   606  	if r1 := <-ss.Team().GetTeamsForUser(m1.UserId); r1.Err != nil {
   607  		t.Fatal(r1.Err)
   608  	} else {
   609  		ms := r1.Data.([]*model.TeamMember)
   610  
   611  		require.Len(t, ms, 1)
   612  		require.Equal(t, m1.TeamId, ms[0].TeamId)
   613  	}
   614  
   615  	if r1 := <-ss.Team().RemoveMember(teamId1, m1.UserId); r1.Err != nil {
   616  		t.Fatal(r1.Err)
   617  	}
   618  
   619  	if r1 := <-ss.Team().GetMembers(teamId1, 0, 100); r1.Err != nil {
   620  		t.Fatal(r1.Err)
   621  	} else {
   622  		ms := r1.Data.([]*model.TeamMember)
   623  
   624  		require.Len(t, ms, 1)
   625  		require.Equal(t, m2.UserId, ms[0].UserId)
   626  	}
   627  
   628  	store.Must(ss.Team().SaveMember(m1, -1))
   629  
   630  	if r1 := <-ss.Team().RemoveAllMembersByTeam(teamId1); r1.Err != nil {
   631  		t.Fatal(r1.Err)
   632  	}
   633  
   634  	if r1 := <-ss.Team().GetMembers(teamId1, 0, 100); r1.Err != nil {
   635  		t.Fatal(r1.Err)
   636  	} else {
   637  		ms := r1.Data.([]*model.TeamMember)
   638  
   639  		require.Len(t, ms, 0)
   640  	}
   641  
   642  	uid := model.NewId()
   643  	m4 := &model.TeamMember{TeamId: teamId1, UserId: uid}
   644  	m5 := &model.TeamMember{TeamId: teamId2, UserId: uid}
   645  	store.Must(ss.Team().SaveMember(m4, -1))
   646  	store.Must(ss.Team().SaveMember(m5, -1))
   647  
   648  	if r1 := <-ss.Team().GetTeamsForUser(uid); r1.Err != nil {
   649  		t.Fatal(r1.Err)
   650  	} else {
   651  		ms := r1.Data.([]*model.TeamMember)
   652  
   653  		require.Len(t, ms, 2)
   654  	}
   655  
   656  	if r1 := <-ss.Team().RemoveAllMembersByUser(uid); r1.Err != nil {
   657  		t.Fatal(r1.Err)
   658  	}
   659  
   660  	if r1 := <-ss.Team().GetTeamsForUser(m1.UserId); r1.Err != nil {
   661  		t.Fatal(r1.Err)
   662  	} else {
   663  		ms := r1.Data.([]*model.TeamMember)
   664  
   665  		require.Len(t, ms, 0)
   666  	}
   667  }
   668  
   669  func testSaveTeamMemberMaxMembers(t *testing.T, ss store.Store) {
   670  	maxUsersPerTeam := 5
   671  
   672  	team := store.Must(ss.Team().Save(&model.Team{
   673  		DisplayName: "DisplayName",
   674  		Name:        "z-z-z" + model.NewId() + "b",
   675  		Type:        model.TEAM_OPEN,
   676  	})).(*model.Team)
   677  	defer func() {
   678  		<-ss.Team().PermanentDelete(team.Id)
   679  	}()
   680  
   681  	userIds := make([]string, maxUsersPerTeam)
   682  
   683  	for i := 0; i < maxUsersPerTeam; i++ {
   684  		userIds[i] = store.Must(ss.User().Save(&model.User{
   685  			Username: model.NewId(),
   686  			Email:    MakeEmail(),
   687  		})).(*model.User).Id
   688  
   689  		defer func(userId string) {
   690  			<-ss.User().PermanentDelete(userId)
   691  		}(userIds[i])
   692  
   693  		store.Must(ss.Team().SaveMember(&model.TeamMember{
   694  			TeamId: team.Id,
   695  			UserId: userIds[i],
   696  		}, maxUsersPerTeam))
   697  
   698  		defer func(userId string) {
   699  			<-ss.Team().RemoveMember(team.Id, userId)
   700  		}(userIds[i])
   701  	}
   702  
   703  	if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil {
   704  		t.Fatal(result.Err)
   705  	} else if count := result.Data.(int64); int(count) != maxUsersPerTeam {
   706  		t.Fatalf("should start with 5 team members, had %v instead", count)
   707  	}
   708  
   709  	newUserId := store.Must(ss.User().Save(&model.User{
   710  		Username: model.NewId(),
   711  		Email:    MakeEmail(),
   712  	})).(*model.User).Id
   713  	defer func() {
   714  		<-ss.User().PermanentDelete(newUserId)
   715  	}()
   716  
   717  	if result := <-ss.Team().SaveMember(&model.TeamMember{
   718  		TeamId: team.Id,
   719  		UserId: newUserId,
   720  	}, maxUsersPerTeam); result.Err == nil {
   721  		t.Fatal("shouldn't be able to save member when at maximum members per team")
   722  	}
   723  
   724  	if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil {
   725  		t.Fatal(result.Err)
   726  	} else if count := result.Data.(int64); int(count) != maxUsersPerTeam {
   727  		t.Fatalf("should still have 5 team members, had %v instead", count)
   728  	}
   729  
   730  	// Leaving the team from the UI sets DeleteAt instead of using TeamStore.RemoveMember
   731  	store.Must(ss.Team().UpdateMember(&model.TeamMember{
   732  		TeamId:   team.Id,
   733  		UserId:   userIds[0],
   734  		DeleteAt: 1234,
   735  	}))
   736  
   737  	if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil {
   738  		t.Fatal(result.Err)
   739  	} else if count := result.Data.(int64); int(count) != maxUsersPerTeam-1 {
   740  		t.Fatalf("should now only have 4 team members, had %v instead", count)
   741  	}
   742  
   743  	if result := <-ss.Team().SaveMember(&model.TeamMember{TeamId: team.Id, UserId: newUserId}, maxUsersPerTeam); result.Err != nil {
   744  		t.Fatal("should've been able to save new member after deleting one", result.Err)
   745  	} else {
   746  		defer func(userId string) {
   747  			<-ss.Team().RemoveMember(team.Id, userId)
   748  		}(newUserId)
   749  	}
   750  
   751  	if result := <-ss.Team().GetTotalMemberCount(team.Id); result.Err != nil {
   752  		t.Fatal(result.Err)
   753  	} else if count := result.Data.(int64); int(count) != maxUsersPerTeam {
   754  		t.Fatalf("should have 5 team members again, had %v instead", count)
   755  	}
   756  
   757  	// Deactivating a user should make them stop counting against max members
   758  	user2 := store.Must(ss.User().Get(userIds[1])).(*model.User)
   759  	user2.DeleteAt = 1234
   760  	store.Must(ss.User().Update(user2, true))
   761  
   762  	newUserId2 := store.Must(ss.User().Save(&model.User{
   763  		Username: model.NewId(),
   764  		Email:    MakeEmail(),
   765  	})).(*model.User).Id
   766  	if result := <-ss.Team().SaveMember(&model.TeamMember{TeamId: team.Id, UserId: newUserId2}, maxUsersPerTeam); result.Err != nil {
   767  		t.Fatal("should've been able to save new member after deleting one", result.Err)
   768  	} else {
   769  		defer func(userId string) {
   770  			<-ss.Team().RemoveMember(team.Id, userId)
   771  		}(newUserId2)
   772  	}
   773  }
   774  
   775  func testGetTeamMember(t *testing.T, ss store.Store) {
   776  	teamId1 := model.NewId()
   777  
   778  	m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()}
   779  	store.Must(ss.Team().SaveMember(m1, -1))
   780  
   781  	if r := <-ss.Team().GetMember(m1.TeamId, m1.UserId); r.Err != nil {
   782  		t.Fatal(r.Err)
   783  	} else {
   784  		rm1 := r.Data.(*model.TeamMember)
   785  
   786  		if rm1.TeamId != m1.TeamId {
   787  			t.Fatal("bad team id")
   788  		}
   789  
   790  		if rm1.UserId != m1.UserId {
   791  			t.Fatal("bad user id")
   792  		}
   793  	}
   794  
   795  	if r := <-ss.Team().GetMember(m1.TeamId, ""); r.Err == nil {
   796  		t.Fatal("empty user id - should have failed")
   797  	}
   798  
   799  	if r := <-ss.Team().GetMember("", m1.UserId); r.Err == nil {
   800  		t.Fatal("empty team id - should have failed")
   801  	}
   802  
   803  	// Test with a custom team scheme.
   804  	s2 := &model.Scheme{
   805  		Name:        model.NewId(),
   806  		DisplayName: model.NewId(),
   807  		Description: model.NewId(),
   808  		Scope:       model.SCHEME_SCOPE_TEAM,
   809  	}
   810  	s2 = (<-ss.Scheme().Save(s2)).Data.(*model.Scheme)
   811  	t.Log(s2)
   812  
   813  	t2 := store.Must(ss.Team().Save(&model.Team{
   814  		DisplayName: "DisplayName",
   815  		Name:        "z-z-z" + model.NewId() + "b",
   816  		Type:        model.TEAM_OPEN,
   817  		SchemeId:    &s2.Id,
   818  	})).(*model.Team)
   819  
   820  	defer func() {
   821  		<-ss.Team().PermanentDelete(t2.Id)
   822  	}()
   823  
   824  	m2 := &model.TeamMember{TeamId: t2.Id, UserId: model.NewId(), SchemeUser: true}
   825  	store.Must(ss.Team().SaveMember(m2, -1))
   826  
   827  	r2 := <-ss.Team().GetMember(m2.TeamId, m2.UserId)
   828  	require.Nil(t, r2.Err)
   829  	m3 := r2.Data.(*model.TeamMember)
   830  	t.Log(m3)
   831  
   832  	assert.Equal(t, s2.DefaultTeamUserRole, m3.Roles)
   833  }
   834  
   835  func testGetTeamMembersByIds(t *testing.T, ss store.Store) {
   836  	teamId1 := model.NewId()
   837  
   838  	m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()}
   839  	store.Must(ss.Team().SaveMember(m1, -1))
   840  
   841  	if r := <-ss.Team().GetMembersByIds(m1.TeamId, []string{m1.UserId}); r.Err != nil {
   842  		t.Fatal(r.Err)
   843  	} else {
   844  		rm1 := r.Data.([]*model.TeamMember)[0]
   845  
   846  		if rm1.TeamId != m1.TeamId {
   847  			t.Fatal("bad team id")
   848  		}
   849  
   850  		if rm1.UserId != m1.UserId {
   851  			t.Fatal("bad user id")
   852  		}
   853  	}
   854  
   855  	m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()}
   856  	store.Must(ss.Team().SaveMember(m2, -1))
   857  
   858  	if r := <-ss.Team().GetMembersByIds(m1.TeamId, []string{m1.UserId, m2.UserId, model.NewId()}); r.Err != nil {
   859  		t.Fatal(r.Err)
   860  	} else {
   861  		rm := r.Data.([]*model.TeamMember)
   862  
   863  		if len(rm) != 2 {
   864  			t.Fatal("return wrong number of results")
   865  		}
   866  	}
   867  
   868  	if r := <-ss.Team().GetMembersByIds(m1.TeamId, []string{}); r.Err == nil {
   869  		t.Fatal("empty user ids - should have failed")
   870  	}
   871  }
   872  
   873  func testTeamStoreMemberCount(t *testing.T, ss store.Store) {
   874  	u1 := &model.User{}
   875  	u1.Email = MakeEmail()
   876  	store.Must(ss.User().Save(u1))
   877  
   878  	u2 := &model.User{}
   879  	u2.Email = MakeEmail()
   880  	u2.DeleteAt = 1
   881  	store.Must(ss.User().Save(u2))
   882  
   883  	teamId1 := model.NewId()
   884  	m1 := &model.TeamMember{TeamId: teamId1, UserId: u1.Id}
   885  	store.Must(ss.Team().SaveMember(m1, -1))
   886  
   887  	m2 := &model.TeamMember{TeamId: teamId1, UserId: u2.Id}
   888  	store.Must(ss.Team().SaveMember(m2, -1))
   889  
   890  	if result := <-ss.Team().GetTotalMemberCount(teamId1); result.Err != nil {
   891  		t.Fatal(result.Err)
   892  	} else {
   893  		if result.Data.(int64) != 2 {
   894  			t.Fatal("wrong count")
   895  		}
   896  	}
   897  
   898  	if result := <-ss.Team().GetActiveMemberCount(teamId1); result.Err != nil {
   899  		t.Fatal(result.Err)
   900  	} else {
   901  		if result.Data.(int64) != 1 {
   902  			t.Fatal("wrong count")
   903  		}
   904  	}
   905  
   906  	m3 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()}
   907  	store.Must(ss.Team().SaveMember(m3, -1))
   908  
   909  	if result := <-ss.Team().GetTotalMemberCount(teamId1); result.Err != nil {
   910  		t.Fatal(result.Err)
   911  	} else {
   912  		if result.Data.(int64) != 2 {
   913  			t.Fatal("wrong count")
   914  		}
   915  	}
   916  
   917  	if result := <-ss.Team().GetActiveMemberCount(teamId1); result.Err != nil {
   918  		t.Fatal(result.Err)
   919  	} else {
   920  		if result.Data.(int64) != 1 {
   921  			t.Fatal("wrong count")
   922  		}
   923  	}
   924  }
   925  
   926  func testGetChannelUnreadsForAllTeams(t *testing.T, ss store.Store) {
   927  	teamId1 := model.NewId()
   928  	teamId2 := model.NewId()
   929  
   930  	uid := model.NewId()
   931  	m1 := &model.TeamMember{TeamId: teamId1, UserId: uid}
   932  	m2 := &model.TeamMember{TeamId: teamId2, UserId: uid}
   933  	store.Must(ss.Team().SaveMember(m1, -1))
   934  	store.Must(ss.Team().SaveMember(m2, -1))
   935  
   936  	c1 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100}
   937  	store.Must(ss.Channel().Save(c1, -1))
   938  	c2 := &model.Channel{TeamId: m2.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100}
   939  	store.Must(ss.Channel().Save(c2, -1))
   940  
   941  	cm1 := &model.ChannelMember{ChannelId: c1.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90}
   942  	store.Must(ss.Channel().SaveMember(cm1))
   943  	cm2 := &model.ChannelMember{ChannelId: c2.Id, UserId: m2.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90}
   944  	store.Must(ss.Channel().SaveMember(cm2))
   945  
   946  	if r1 := <-ss.Team().GetChannelUnreadsForAllTeams("", uid); r1.Err != nil {
   947  		t.Fatal(r1.Err)
   948  	} else {
   949  		ms := r1.Data.([]*model.ChannelUnread)
   950  		membersMap := make(map[string]bool)
   951  		for i := range ms {
   952  			id := ms[i].TeamId
   953  			if _, ok := membersMap[id]; !ok {
   954  				membersMap[id] = true
   955  			}
   956  		}
   957  		if len(membersMap) != 2 {
   958  			t.Fatal("Should be the unreads for all the teams")
   959  		}
   960  
   961  		if ms[0].MsgCount != 10 {
   962  			t.Fatal("subtraction failed")
   963  		}
   964  	}
   965  
   966  	if r2 := <-ss.Team().GetChannelUnreadsForAllTeams(teamId1, uid); r2.Err != nil {
   967  		t.Fatal(r2.Err)
   968  	} else {
   969  		ms := r2.Data.([]*model.ChannelUnread)
   970  		membersMap := make(map[string]bool)
   971  		for i := range ms {
   972  			id := ms[i].TeamId
   973  			if _, ok := membersMap[id]; !ok {
   974  				membersMap[id] = true
   975  			}
   976  		}
   977  
   978  		if len(membersMap) != 1 {
   979  			t.Fatal("Should be the unreads for just one team")
   980  		}
   981  
   982  		if ms[0].MsgCount != 10 {
   983  			t.Fatal("subtraction failed")
   984  		}
   985  	}
   986  
   987  	if r1 := <-ss.Team().RemoveAllMembersByUser(uid); r1.Err != nil {
   988  		t.Fatal(r1.Err)
   989  	}
   990  }
   991  
   992  func testGetChannelUnreadsForTeam(t *testing.T, ss store.Store) {
   993  	teamId1 := model.NewId()
   994  
   995  	uid := model.NewId()
   996  	m1 := &model.TeamMember{TeamId: teamId1, UserId: uid}
   997  	store.Must(ss.Team().SaveMember(m1, -1))
   998  
   999  	c1 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100}
  1000  	store.Must(ss.Channel().Save(c1, -1))
  1001  	c2 := &model.Channel{TeamId: m1.TeamId, Name: model.NewId(), DisplayName: "Town Square", Type: model.CHANNEL_OPEN, TotalMsgCount: 100}
  1002  	store.Must(ss.Channel().Save(c2, -1))
  1003  
  1004  	cm1 := &model.ChannelMember{ChannelId: c1.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90}
  1005  	store.Must(ss.Channel().SaveMember(cm1))
  1006  	cm2 := &model.ChannelMember{ChannelId: c2.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90}
  1007  	store.Must(ss.Channel().SaveMember(cm2))
  1008  
  1009  	if r1 := <-ss.Team().GetChannelUnreadsForTeam(m1.TeamId, m1.UserId); r1.Err != nil {
  1010  		t.Fatal(r1.Err)
  1011  	} else {
  1012  		ms := r1.Data.([]*model.ChannelUnread)
  1013  		if len(ms) != 2 {
  1014  			t.Fatal("wrong length")
  1015  		}
  1016  
  1017  		if ms[0].MsgCount != 10 {
  1018  			t.Fatal("subtraction failed")
  1019  		}
  1020  	}
  1021  }
  1022  
  1023  func testUpdateLastTeamIconUpdate(t *testing.T, ss store.Store) {
  1024  
  1025  	// team icon initially updated a second ago
  1026  	lastTeamIconUpdateInitial := model.GetMillis() - 1000
  1027  
  1028  	o1 := &model.Team{}
  1029  	o1.DisplayName = "Display Name"
  1030  	o1.Name = "z-z-z" + model.NewId() + "b"
  1031  	o1.Email = MakeEmail()
  1032  	o1.Type = model.TEAM_OPEN
  1033  	o1.LastTeamIconUpdate = lastTeamIconUpdateInitial
  1034  	o1 = (<-ss.Team().Save(o1)).Data.(*model.Team)
  1035  
  1036  	curTime := model.GetMillis()
  1037  
  1038  	if err := (<-ss.Team().UpdateLastTeamIconUpdate(o1.Id, curTime)).Err; err != nil {
  1039  		t.Fatal(err)
  1040  	}
  1041  
  1042  	ro1 := (<-ss.Team().Get(o1.Id)).Data.(*model.Team)
  1043  	if ro1.LastTeamIconUpdate <= lastTeamIconUpdateInitial {
  1044  		t.Fatal("LastTeamIconUpdate not updated")
  1045  	}
  1046  }
  1047  
  1048  func testGetTeamsByScheme(t *testing.T, ss store.Store) {
  1049  	// Create some schemes.
  1050  	s1 := &model.Scheme{
  1051  		DisplayName: model.NewId(),
  1052  		Name:        model.NewId(),
  1053  		Description: model.NewId(),
  1054  		Scope:       model.SCHEME_SCOPE_TEAM,
  1055  	}
  1056  
  1057  	s2 := &model.Scheme{
  1058  		DisplayName: model.NewId(),
  1059  		Name:        model.NewId(),
  1060  		Description: model.NewId(),
  1061  		Scope:       model.SCHEME_SCOPE_TEAM,
  1062  	}
  1063  
  1064  	s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme)
  1065  	s2 = (<-ss.Scheme().Save(s2)).Data.(*model.Scheme)
  1066  
  1067  	// Create and save some teams.
  1068  	t1 := &model.Team{
  1069  		Name:        model.NewId(),
  1070  		DisplayName: model.NewId(),
  1071  		Email:       MakeEmail(),
  1072  		Type:        model.TEAM_OPEN,
  1073  		SchemeId:    &s1.Id,
  1074  	}
  1075  
  1076  	t2 := &model.Team{
  1077  		Name:        model.NewId(),
  1078  		DisplayName: model.NewId(),
  1079  		Email:       MakeEmail(),
  1080  		Type:        model.TEAM_OPEN,
  1081  		SchemeId:    &s1.Id,
  1082  	}
  1083  
  1084  	t3 := &model.Team{
  1085  		Name:        model.NewId(),
  1086  		DisplayName: model.NewId(),
  1087  		Email:       MakeEmail(),
  1088  		Type:        model.TEAM_OPEN,
  1089  	}
  1090  
  1091  	t1 = (<-ss.Team().Save(t1)).Data.(*model.Team)
  1092  	t2 = (<-ss.Team().Save(t2)).Data.(*model.Team)
  1093  	t3 = (<-ss.Team().Save(t3)).Data.(*model.Team)
  1094  
  1095  	// Get the teams by a valid Scheme ID.
  1096  	res1 := <-ss.Team().GetTeamsByScheme(s1.Id, 0, 100)
  1097  	assert.Nil(t, res1.Err)
  1098  	d1 := res1.Data.([]*model.Team)
  1099  	assert.Len(t, d1, 2)
  1100  
  1101  	// Get the teams by a valid Scheme ID where there aren't any matching Teams.
  1102  	res2 := <-ss.Team().GetTeamsByScheme(s2.Id, 0, 100)
  1103  	assert.Nil(t, res2.Err)
  1104  	d2 := res2.Data.([]*model.Team)
  1105  	assert.Len(t, d2, 0)
  1106  
  1107  	// Get the teams by an invalid Scheme ID.
  1108  	res3 := <-ss.Team().GetTeamsByScheme(model.NewId(), 0, 100)
  1109  	assert.Nil(t, res3.Err)
  1110  	d3 := res3.Data.([]*model.Team)
  1111  	assert.Len(t, d3, 0)
  1112  }
  1113  
  1114  func testTeamStoreMigrateTeamMembers(t *testing.T, ss store.Store) {
  1115  	s1 := model.NewId()
  1116  	t1 := &model.Team{
  1117  		DisplayName: "Name",
  1118  		Name:        "z-z-z" + model.NewId() + "b",
  1119  		Email:       MakeEmail(),
  1120  		Type:        model.TEAM_OPEN,
  1121  		InviteId:    model.NewId(),
  1122  		SchemeId:    &s1,
  1123  	}
  1124  	t1 = store.Must(ss.Team().Save(t1)).(*model.Team)
  1125  
  1126  	tm1 := &model.TeamMember{
  1127  		TeamId:        t1.Id,
  1128  		UserId:        model.NewId(),
  1129  		ExplicitRoles: "team_admin team_user",
  1130  	}
  1131  	tm2 := &model.TeamMember{
  1132  		TeamId:        t1.Id,
  1133  		UserId:        model.NewId(),
  1134  		ExplicitRoles: "team_user",
  1135  	}
  1136  	tm3 := &model.TeamMember{
  1137  		TeamId:        t1.Id,
  1138  		UserId:        model.NewId(),
  1139  		ExplicitRoles: "something_else",
  1140  	}
  1141  
  1142  	tm1 = (<-ss.Team().SaveMember(tm1, -1)).Data.(*model.TeamMember)
  1143  	tm2 = (<-ss.Team().SaveMember(tm2, -1)).Data.(*model.TeamMember)
  1144  	tm3 = (<-ss.Team().SaveMember(tm3, -1)).Data.(*model.TeamMember)
  1145  
  1146  	lastDoneTeamId := strings.Repeat("0", 26)
  1147  	lastDoneUserId := strings.Repeat("0", 26)
  1148  
  1149  	for {
  1150  		res := <-ss.Team().MigrateTeamMembers(lastDoneTeamId, lastDoneUserId)
  1151  		if assert.Nil(t, res.Err) {
  1152  			if res.Data == nil {
  1153  				break
  1154  			}
  1155  			data := res.Data.(map[string]string)
  1156  			lastDoneTeamId = data["TeamId"]
  1157  			lastDoneUserId = data["UserId"]
  1158  		}
  1159  	}
  1160  
  1161  	res1 := <-ss.Team().GetMember(tm1.TeamId, tm1.UserId)
  1162  	assert.Nil(t, res1.Err)
  1163  	tm1b := res1.Data.(*model.TeamMember)
  1164  	assert.Equal(t, "", tm1b.ExplicitRoles)
  1165  	assert.True(t, tm1b.SchemeUser)
  1166  	assert.True(t, tm1b.SchemeAdmin)
  1167  
  1168  	res2 := <-ss.Team().GetMember(tm2.TeamId, tm2.UserId)
  1169  	assert.Nil(t, res2.Err)
  1170  	tm2b := res2.Data.(*model.TeamMember)
  1171  	assert.Equal(t, "", tm2b.ExplicitRoles)
  1172  	assert.True(t, tm2b.SchemeUser)
  1173  	assert.False(t, tm2b.SchemeAdmin)
  1174  
  1175  	res3 := <-ss.Team().GetMember(tm3.TeamId, tm3.UserId)
  1176  	assert.Nil(t, res3.Err)
  1177  	tm3b := res3.Data.(*model.TeamMember)
  1178  	assert.Equal(t, "something_else", tm3b.ExplicitRoles)
  1179  	assert.False(t, tm3b.SchemeUser)
  1180  	assert.False(t, tm3b.SchemeAdmin)
  1181  }
  1182  
  1183  func testResetAllTeamSchemes(t *testing.T, ss store.Store) {
  1184  	s1 := &model.Scheme{
  1185  		Name:        model.NewId(),
  1186  		DisplayName: model.NewId(),
  1187  		Description: model.NewId(),
  1188  		Scope:       model.SCHEME_SCOPE_TEAM,
  1189  	}
  1190  	s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme)
  1191  
  1192  	t1 := &model.Team{
  1193  		Name:        model.NewId(),
  1194  		DisplayName: model.NewId(),
  1195  		Email:       MakeEmail(),
  1196  		Type:        model.TEAM_OPEN,
  1197  		SchemeId:    &s1.Id,
  1198  	}
  1199  
  1200  	t2 := &model.Team{
  1201  		Name:        model.NewId(),
  1202  		DisplayName: model.NewId(),
  1203  		Email:       MakeEmail(),
  1204  		Type:        model.TEAM_OPEN,
  1205  		SchemeId:    &s1.Id,
  1206  	}
  1207  
  1208  	t1 = (<-ss.Team().Save(t1)).Data.(*model.Team)
  1209  	t2 = (<-ss.Team().Save(t2)).Data.(*model.Team)
  1210  
  1211  	assert.Equal(t, s1.Id, *t1.SchemeId)
  1212  	assert.Equal(t, s1.Id, *t2.SchemeId)
  1213  
  1214  	res := <-ss.Team().ResetAllTeamSchemes()
  1215  	assert.Nil(t, res.Err)
  1216  
  1217  	t1 = (<-ss.Team().Get(t1.Id)).Data.(*model.Team)
  1218  	t2 = (<-ss.Team().Get(t2.Id)).Data.(*model.Team)
  1219  
  1220  	assert.Equal(t, "", *t1.SchemeId)
  1221  	assert.Equal(t, "", *t2.SchemeId)
  1222  }
  1223  
  1224  func testTeamStoreClearAllCustomRoleAssignments(t *testing.T, ss store.Store) {
  1225  	m1 := &model.TeamMember{
  1226  		TeamId:        model.NewId(),
  1227  		UserId:        model.NewId(),
  1228  		ExplicitRoles: "team_user team_admin team_post_all_public",
  1229  	}
  1230  	m2 := &model.TeamMember{
  1231  		TeamId:        model.NewId(),
  1232  		UserId:        model.NewId(),
  1233  		ExplicitRoles: "team_user custom_role team_admin another_custom_role",
  1234  	}
  1235  	m3 := &model.TeamMember{
  1236  		TeamId:        model.NewId(),
  1237  		UserId:        model.NewId(),
  1238  		ExplicitRoles: "team_user",
  1239  	}
  1240  	m4 := &model.TeamMember{
  1241  		TeamId:        model.NewId(),
  1242  		UserId:        model.NewId(),
  1243  		ExplicitRoles: "custom_only",
  1244  	}
  1245  
  1246  	store.Must(ss.Team().SaveMember(m1, -1))
  1247  	store.Must(ss.Team().SaveMember(m2, -1))
  1248  	store.Must(ss.Team().SaveMember(m3, -1))
  1249  	store.Must(ss.Team().SaveMember(m4, -1))
  1250  
  1251  	require.Nil(t, (<-ss.Team().ClearAllCustomRoleAssignments()).Err)
  1252  
  1253  	r1 := <-ss.Team().GetMember(m1.TeamId, m1.UserId)
  1254  	require.Nil(t, r1.Err)
  1255  	assert.Equal(t, m1.ExplicitRoles, r1.Data.(*model.TeamMember).Roles)
  1256  
  1257  	r2 := <-ss.Team().GetMember(m2.TeamId, m2.UserId)
  1258  	require.Nil(t, r2.Err)
  1259  	assert.Equal(t, "team_user team_admin", r2.Data.(*model.TeamMember).Roles)
  1260  
  1261  	r3 := <-ss.Team().GetMember(m3.TeamId, m3.UserId)
  1262  	require.Nil(t, r3.Err)
  1263  	assert.Equal(t, m3.ExplicitRoles, r3.Data.(*model.TeamMember).Roles)
  1264  
  1265  	r4 := <-ss.Team().GetMember(m4.TeamId, m4.UserId)
  1266  	require.Nil(t, r4.Err)
  1267  	assert.Equal(t, "", r4.Data.(*model.TeamMember).Roles)
  1268  }
  1269  
  1270  func testTeamStoreAnalyticsGetTeamCountForScheme(t *testing.T, ss store.Store) {
  1271  	s1 := &model.Scheme{
  1272  		DisplayName: model.NewId(),
  1273  		Name:        model.NewId(),
  1274  		Description: model.NewId(),
  1275  		Scope:       model.SCHEME_SCOPE_TEAM,
  1276  	}
  1277  	s1 = (<-ss.Scheme().Save(s1)).Data.(*model.Scheme)
  1278  
  1279  	count1 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64)
  1280  	assert.Equal(t, int64(0), count1)
  1281  
  1282  	t1 := &model.Team{
  1283  		Name:        model.NewId(),
  1284  		DisplayName: model.NewId(),
  1285  		Email:       MakeEmail(),
  1286  		Type:        model.TEAM_OPEN,
  1287  		SchemeId:    &s1.Id,
  1288  	}
  1289  	t1 = (<-ss.Team().Save(t1)).Data.(*model.Team)
  1290  
  1291  	count2 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64)
  1292  	assert.Equal(t, int64(1), count2)
  1293  
  1294  	t2 := &model.Team{
  1295  		Name:        model.NewId(),
  1296  		DisplayName: model.NewId(),
  1297  		Email:       MakeEmail(),
  1298  		Type:        model.TEAM_OPEN,
  1299  		SchemeId:    &s1.Id,
  1300  	}
  1301  	t2 = (<-ss.Team().Save(t2)).Data.(*model.Team)
  1302  
  1303  	count3 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64)
  1304  	assert.Equal(t, int64(2), count3)
  1305  
  1306  	t3 := &model.Team{
  1307  		Name:        model.NewId(),
  1308  		DisplayName: model.NewId(),
  1309  		Email:       MakeEmail(),
  1310  		Type:        model.TEAM_OPEN,
  1311  	}
  1312  	t3 = (<-ss.Team().Save(t3)).Data.(*model.Team)
  1313  
  1314  	count4 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64)
  1315  	assert.Equal(t, int64(2), count4)
  1316  
  1317  	t4 := &model.Team{
  1318  		Name:        model.NewId(),
  1319  		DisplayName: model.NewId(),
  1320  		Email:       MakeEmail(),
  1321  		Type:        model.TEAM_OPEN,
  1322  		SchemeId:    &s1.Id,
  1323  		DeleteAt:    model.GetMillis(),
  1324  	}
  1325  	t4 = (<-ss.Team().Save(t4)).Data.(*model.Team)
  1326  
  1327  	count5 := (<-ss.Team().AnalyticsGetTeamCountForScheme(s1.Id)).Data.(int64)
  1328  	assert.Equal(t, int64(2), count5)
  1329  }