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