focalboard/server/app/teams_test.go
2022-07-15 08:34:36 -04:00

155 lines
3.8 KiB
Go

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)
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
})
}
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)
}