auth_test.go
TLDR
This file auth_test.go
contains test functions for the auth
package in the Demo Projects project.
Methods
setupTestHelper
This method sets up a test helper struct for running tests. It creates mock versions of various dependencies and initializes an Auth
object.
TestGetSession
This method tests the GetSession
function of the Auth
struct. It runs different test cases to check for expected behavior when calling GetSession
with different tokens.
TestIsValidReadToken
This method tests the IsValidReadToken
function of the Auth
struct. It is currently commented out, as it needs to be reimplemented. It contains various test cases to check the validity of different read tokens.
END
package auth
import (
"testing"
"github.com/golang/mock/gomock"
"github.com/mattermost/focalboard/server/model"
"github.com/mattermost/focalboard/server/services/config"
"github.com/mattermost/focalboard/server/services/permissions/localpermissions"
mockpermissions "github.com/mattermost/focalboard/server/services/permissions/mocks"
"github.com/mattermost/focalboard/server/services/store/mockstore"
"github.com/mattermost/focalboard/server/utils"
"github.com/pkg/errors"
"github.com/stretchr/testify/require"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
)
type TestHelper struct {
Auth *Auth
Session model.Session
Store *mockstore.MockStore
}
var mockSession = &model.Session{
ID: utils.NewID(utils.IDTypeSession),
Token: "goodToken",
UserID: "12345",
CreateAt: utils.GetMillis() - utils.SecondsToMillis(2000),
UpdateAt: utils.GetMillis() - utils.SecondsToMillis(2000),
}
func setupTestHelper(t *testing.T) *TestHelper {
ctrl := gomock.NewController(t)
ctrlPermissions := gomock.NewController(t)
cfg := config.Configuration{}
mockStore := mockstore.NewMockStore(ctrl)
mockPermissions := mockpermissions.NewMockStore(ctrlPermissions)
logger, err := mlog.NewLogger()
require.NoError(t, err)
newAuth := New(&cfg, mockStore, localpermissions.New(mockPermissions, logger))
// called during default template setup for every test
mockStore.EXPECT().GetTemplateBoards("0", "").AnyTimes()
mockStore.EXPECT().RemoveDefaultTemplates(gomock.Any()).AnyTimes()
mockStore.EXPECT().InsertBlock(gomock.Any(), gomock.Any()).AnyTimes()
return &TestHelper{
Auth: newAuth,
Session: *mockSession,
Store: mockStore,
}
}
func TestGetSession(t *testing.T) {
th := setupTestHelper(t)
testcases := []struct {
title string
token string
refreshTime int64
isError bool
}{
{"fail, no token", "", 0, true},
{"fail, invalid username", "badToken", 0, true},
{"success, good token", "goodToken", 1000, false},
}
th.Store.EXPECT().GetSession("badToken", gomock.Any()).Return(nil, errors.New("Invalid Token"))
th.Store.EXPECT().GetSession("goodToken", gomock.Any()).Return(mockSession, nil)
th.Store.EXPECT().RefreshSession(gomock.Any()).Return(nil)
for _, test := range testcases {
t.Run(test.title, func(t *testing.T) {
if test.refreshTime > 0 {
th.Auth.config.SessionRefreshTime = test.refreshTime
}
session, err := th.Auth.GetSession(test.token)
if test.isError {
require.Error(t, err)
} else {
require.NoError(t, err)
require.NotNil(t, session)
}
})
}
}
func TestIsValidReadToken(t *testing.T) {
// ToDo: reimplement
// th := setupTestHelper(t)
// validBlockID := "testBlockID"
// mockContainer := store.Container{
// TeamID: "testTeamID",
// }
// validReadToken := "testReadToken"
// mockSharing := model.Sharing{
// ID: "testRootID",
// Enabled: true,
// Token: validReadToken,
// }
// testcases := []struct {
// title string
// container store.Container
// blockID string
// readToken string
// isError bool
// isSuccess bool
// }{
// {"fail, error GetRootID", mockContainer, "badBlock", "", true, false},
// {"fail, rootID not found", mockContainer, "goodBlockID", "", false, false},
// {"fail, sharing throws error", mockContainer, "goodBlockID2", "", true, false},
// {"fail, bad readToken", mockContainer, validBlockID, "invalidReadToken", false, false},
// {"success", mockContainer, validBlockID, validReadToken, false, true},
// }
// th.Store.EXPECT().GetRootID(gomock.Eq(mockContainer), "badBlock").Return("", errors.New("invalid block"))
// th.Store.EXPECT().GetRootID(gomock.Eq(mockContainer), "goodBlockID").Return("rootNotFound", nil)
// th.Store.EXPECT().GetRootID(gomock.Eq(mockContainer), "goodBlockID2").Return("rootError", nil)
// th.Store.EXPECT().GetRootID(gomock.Eq(mockContainer), validBlockID).Return("testRootID", nil).Times(2)
// th.Store.EXPECT().GetSharing(gomock.Eq(mockContainer), "rootNotFound").Return(nil, sql.ErrNoRows)
// th.Store.EXPECT().GetSharing(gomock.Eq(mockContainer), "rootError").Return(nil, errors.New("another error"))
// th.Store.EXPECT().GetSharing(gomock.Eq(mockContainer), "testRootID").Return(&mockSharing, nil).Times(2)
// for _, test := range testcases {
// t.Run(test.title, func(t *testing.T) {
// success, err := th.Auth.IsValidReadToken(test.container, test.blockID, test.readToken)
// if test.isError {
// require.Error(t, err)
// } else {
// require.NoError(t, err)
// }
// if test.isSuccess {
// require.True(t, success)
// } else {
// require.False(t, success)
// }
// })
// }
}