2022-03-22 15:24:34 +01:00
|
|
|
package app
|
|
|
|
|
|
|
|
import (
|
|
|
|
"database/sql"
|
|
|
|
"errors"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/golang/mock/gomock"
|
|
|
|
"github.com/mattermost/focalboard/server/model"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
var errInvalidTeam = errors.New("invalid team id")
|
|
|
|
|
|
|
|
var mockTeam = &model.Team{
|
|
|
|
ID: "mock-team-id",
|
|
|
|
Title: "MockTeam",
|
|
|
|
}
|
|
|
|
|
|
|
|
var errUpsertSignupToken = errors.New("upsert error")
|
|
|
|
|
|
|
|
func TestGetRootTeam(t *testing.T) {
|
|
|
|
var newRootTeam = &model.Team{
|
|
|
|
ID: "0",
|
|
|
|
Title: "NewRootTeam",
|
|
|
|
}
|
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
title string
|
|
|
|
teamToReturnBeforeUpsert *model.Team
|
|
|
|
teamToReturnAfterUpsert *model.Team
|
|
|
|
isError bool
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
"Success, Return new root team, when root team returned by mockstore is nil",
|
|
|
|
nil,
|
|
|
|
newRootTeam,
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"Success, Return existing root team, when root team returned by mockstore is notnil",
|
|
|
|
newRootTeam,
|
|
|
|
nil,
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"Fail, Return nil, when root team returned by mockstore is nil, and upsert new root team fails",
|
|
|
|
nil,
|
|
|
|
nil,
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
|
|
t.Run(tc.title, func(t *testing.T) {
|
|
|
|
th, tearDown := SetupTestHelper(t)
|
|
|
|
defer tearDown()
|
|
|
|
th.Store.EXPECT().GetTeam("0").Return(tc.teamToReturnBeforeUpsert, nil)
|
2022-07-15 14:34:36 +02:00
|
|
|
if tc.teamToReturnBeforeUpsert == nil {
|
|
|
|
th.Store.EXPECT().UpsertTeamSignupToken(gomock.Any()).DoAndReturn(
|
|
|
|
func(arg0 model.Team) error {
|
|
|
|
if tc.isError {
|
|
|
|
return errUpsertSignupToken
|
|
|
|
}
|
|
|
|
th.Store.EXPECT().GetTeam("0").Return(tc.teamToReturnAfterUpsert, nil)
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
}
|
2022-03-22 15:24:34 +01:00
|
|
|
rootTeam, err := th.App.GetRootTeam()
|
|
|
|
|
|
|
|
if tc.isError {
|
|
|
|
require.Error(t, err)
|
|
|
|
} else {
|
|
|
|
assert.NotNil(t, rootTeam.ID)
|
|
|
|
assert.NotNil(t, rootTeam.SignupToken)
|
|
|
|
assert.Equal(t, "", rootTeam.ModifiedBy)
|
|
|
|
assert.Equal(t, int64(0), rootTeam.UpdateAt)
|
|
|
|
assert.Equal(t, "NewRootTeam", rootTeam.Title)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotNil(t, rootTeam)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetTeam(t *testing.T) {
|
|
|
|
th, tearDown := SetupTestHelper(t)
|
|
|
|
defer tearDown()
|
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
title string
|
|
|
|
teamID string
|
|
|
|
isError bool
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
"Success, Return new root team, when team returned by mockstore is not nil",
|
|
|
|
"mock-team-id",
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"Success, Return nil, when get team returns an sql error",
|
|
|
|
"team-not-available-id",
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"Fail, Return nil, when get team by mockstore returns an error",
|
|
|
|
"invalid-team-id",
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
th.Store.EXPECT().GetTeam("mock-team-id").Return(mockTeam, nil)
|
|
|
|
th.Store.EXPECT().GetTeam("invalid-team-id").Return(nil, errInvalidTeam)
|
|
|
|
th.Store.EXPECT().GetTeam("team-not-available-id").Return(nil, sql.ErrNoRows)
|
|
|
|
for _, tc := range testCases {
|
|
|
|
t.Run(tc.title, func(t *testing.T) {
|
|
|
|
t.Log(tc.title)
|
|
|
|
team, err := th.App.GetTeam(tc.teamID)
|
|
|
|
|
|
|
|
if tc.isError {
|
|
|
|
require.Error(t, err)
|
|
|
|
} else if tc.teamID != "team-not-available-id" {
|
|
|
|
assert.NotNil(t, team.ID)
|
|
|
|
assert.NotNil(t, team.SignupToken)
|
|
|
|
assert.Equal(t, "mock-team-id", team.ID)
|
|
|
|
assert.Equal(t, "", team.ModifiedBy)
|
|
|
|
assert.Equal(t, int64(0), team.UpdateAt)
|
|
|
|
assert.Equal(t, "MockTeam", team.Title)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotNil(t, team)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestTeamOperations(t *testing.T) {
|
|
|
|
th, tearDown := SetupTestHelper(t)
|
|
|
|
defer tearDown()
|
|
|
|
|
|
|
|
th.Store.EXPECT().UpsertTeamSettings(*mockTeam).Return(nil)
|
|
|
|
th.Store.EXPECT().UpsertTeamSignupToken(*mockTeam).Return(nil)
|
|
|
|
th.Store.EXPECT().GetTeamCount().Return(int64(10), nil)
|
|
|
|
|
|
|
|
errUpsertTeamSettings := th.App.UpsertTeamSettings(*mockTeam)
|
|
|
|
assert.NoError(t, errUpsertTeamSettings)
|
|
|
|
|
|
|
|
errUpsertTeamSignupToken := th.App.UpsertTeamSignupToken(*mockTeam)
|
|
|
|
assert.NoError(t, errUpsertTeamSignupToken)
|
|
|
|
|
|
|
|
count, errGetTeamCount := th.App.GetTeamCount()
|
|
|
|
assert.NoError(t, errGetTeamCount)
|
|
|
|
assert.Equal(t, int64(10), count)
|
|
|
|
}
|