package app import ( "testing" "github.com/golang/mock/gomock" "github.com/mattermost/focalboard/server/model" "github.com/mattermost/focalboard/server/utils" "github.com/stretchr/testify/require" "github.com/mattermost/mattermost-server/v6/plugin/plugintest/mock" ) func TestApp_initializeTemplates(t *testing.T) { board := &model.Board{ ID: utils.NewID(utils.IDTypeBoard), TeamID: model.GlobalTeamID, Type: model.BoardTypeOpen, Title: "test board", IsTemplate: true, TemplateVersion: defaultTemplateVersion, } block := model.Block{ ID: utils.NewID(utils.IDTypeBlock), ParentID: board.ID, BoardID: board.ID, Type: model.TypeText, Title: "test text", } boardsAndBlocks := &model.BoardsAndBlocks{ Boards: []*model.Board{board}, Blocks: []model.Block{block}, } boardMember := &model.BoardMember{ BoardID: board.ID, UserID: "test-user", } t.Run("Needs template init", func(t *testing.T) { th, tearDown := SetupTestHelper(t) defer tearDown() th.Store.EXPECT().GetTemplateBoards(model.GlobalTeamID, "").Return([]*model.Board{}, nil) th.Store.EXPECT().RemoveDefaultTemplates([]*model.Board{}).Return(nil) th.Store.EXPECT().CreateBoardsAndBlocks(gomock.Any(), gomock.Any()).AnyTimes().Return(boardsAndBlocks, nil) th.Store.EXPECT().GetMembersForBoard(board.ID).AnyTimes().Return([]*model.BoardMember{}, nil) th.Store.EXPECT().GetBoard(board.ID).AnyTimes().Return(board, nil) th.Store.EXPECT().GetMemberForBoard(gomock.Any(), gomock.Any()).AnyTimes().Return(boardMember, nil) th.FilesBackend.On("WriteFile", mock.Anything, mock.Anything).Return(int64(1), nil) done, err := th.App.initializeTemplates() require.NoError(t, err, "initializeTemplates should not error") require.True(t, done, "initialization was needed") }) t.Run("Skip template init", func(t *testing.T) { th, tearDown := SetupTestHelper(t) defer tearDown() th.Store.EXPECT().GetTemplateBoards(model.GlobalTeamID, "").Return([]*model.Board{board}, nil) done, err := th.App.initializeTemplates() require.NoError(t, err, "initializeTemplates should not error") require.False(t, done, "initialization was not needed") }) }