mirror of
https://github.com/mattermost/focalboard.git
synced 2024-11-27 08:31:20 +02:00
ab3bf6312c
* Persistent user config (#2133) * Added user config API * Add unit tests * lint fix * Fixed webapp tests * Fixed webapp tests * Updated props in store after updating * Minor fixes * Removed redundent data from audit logs * Onboarding Tour (#2287) * Created private board * Roughly displayed tour * Synced with Dhama's changes * WIP * Trying to add GIF * Added 3 tour steps * WIP * WIP * WIP * checked in missed file * Synced with feature branch * WIp * Adde skip tour option * Fixed image loading for on-prem * Made tour work on presonal server: * Adde missed file * Adding telemetry * Adding telemetry * Added tour tip telemetry * Fixed pulsating dot styling for personal server * reverted personal config * Added reset tour button * Displayed share tour tip of feature is enabled * Lint fixes * Fixed webapp tests * Fixed webapp tests * Completed webapp tests * Completed webapp tests * Webapp lint fixes * Added server tests * Testing cypress skip tour fix * Fixed Cypress tests * Added share board tour step * Added share board tour step * webapp lint fixes * Updated logic to pick welcome board * Updated tests: * lint fixes * Updating UI changes * Fixed a bug causing card tour to re-appear * FIxed minor issue * FIxed bug where card tour didn't start in clickingh on card * Fixed tests * Make update user props use string instead of interface * Fixed a value type * Updating gif size * Updating resolution breakpoint * Updating tutorial tip * Updating view selector * Refactored tour components * Misc fixes * minor refactoring * GH-2258: allow date range to overflow (#2268) * allow date range to overflow * Fixed issue with date overflowing into neighbouring column Co-authored-by: Harshil Sharma <harshilsharma63@gmail.com> Co-authored-by: Mattermod <mattermod@users.noreply.github.com> * Update readme with accurate Linux standalone app build instructions (#2351) * Bump follow-redirects from 1.14.7 to 1.14.8 in /experiments/webext (#2339) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Switch component style fixed: selector specificity increased by adding additional class. (#2179) * Adding sever side undelete endpoint (#2222) * Adding sever side undelete endpoint * Removing long lines golangci-lint errors * Fixing linter errors * Fixing a test problem * Fixing tests Co-authored-by: Mattermod <mattermod@users.noreply.github.com> * Removing transactions from sqlite backend (#2361) * Removing transactions from sqlite backend * Skipping tests in sqlite because the lack of transactions * Generating the mocks * Fixing golangci-lint * Fixing problem opening the tour tooltip on card open * Fixing texts missmatch * Adding the Product Tour entry in the user settings menu * Fixing some tests * Fixing tests Co-authored-by: Asaad Mahmood <asaadmahmood@users.noreply.github.com> Co-authored-by: Scott Bishel <scott.bishel@mattermost.com> Co-authored-by: Mattermod <mattermod@users.noreply.github.com> Co-authored-by: Doug Lauder <wiggin77@warpmail.net> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kamre <eremchenko@gmail.com> Co-authored-by: Jesús Espino <jespinog@gmail.com> * Restored package json * Restored package json Co-authored-by: Asaad Mahmood <asaadmahmood@users.noreply.github.com> Co-authored-by: Scott Bishel <scott.bishel@mattermost.com> Co-authored-by: Mattermod <mattermod@users.noreply.github.com> Co-authored-by: Doug Lauder <wiggin77@warpmail.net> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: kamre <eremchenko@gmail.com> Co-authored-by: Jesús Espino <jespinog@gmail.com>
215 lines
5.2 KiB
Go
215 lines
5.2 KiB
Go
package app
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/golang/mock/gomock"
|
|
"github.com/mattermost/focalboard/server/model"
|
|
"github.com/mattermost/focalboard/server/services/store"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestPrepareOnboardingTour(t *testing.T) {
|
|
th, tearDown := SetupTestHelper(t)
|
|
defer tearDown()
|
|
|
|
t.Run("base case", func(t *testing.T) {
|
|
welcomeBoard := model.Block{
|
|
ID: "block_id_1",
|
|
Type: model.TypeBoard,
|
|
Title: "Welcome to Boards!",
|
|
Fields: map[string]interface{}{
|
|
"isTemplate": true,
|
|
},
|
|
}
|
|
|
|
blocks := []model.Block{welcomeBoard}
|
|
th.Store.EXPECT().GetDefaultTemplateBlocks().Return(blocks, nil)
|
|
|
|
th.Store.EXPECT().GetSubTree3(
|
|
store.Container{WorkspaceID: "0"},
|
|
"block_id_1",
|
|
gomock.Any(),
|
|
).Return([]model.Block{welcomeBoard}, nil)
|
|
|
|
th.Store.EXPECT().InsertBlock(
|
|
store.Container{WorkspaceID: "workspace_id_1"},
|
|
gomock.Any(),
|
|
"user_id_1",
|
|
).Return(nil)
|
|
|
|
th.Store.EXPECT().CreatePrivateWorkspace("user_id_1").Return("workspace_id_1", nil)
|
|
|
|
userPropPatch := model.UserPropPatch{
|
|
UpdatedFields: map[string]string{
|
|
KeyOnboardingTourStarted: "1",
|
|
KeyOnboardingTourStep: ValueOnboardingFirstStep,
|
|
KeyOnboardingTourCategory: ValueTourCategoryOnboarding,
|
|
},
|
|
}
|
|
|
|
th.Store.EXPECT().PatchUserProps("user_id_1", userPropPatch).Return(nil)
|
|
|
|
workspaceID, boardID, err := th.App.PrepareOnboardingTour("user_id_1")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "workspace_id_1", workspaceID)
|
|
assert.NotEmpty(t, boardID)
|
|
})
|
|
}
|
|
|
|
func TestCreateWelcomeBoard(t *testing.T) {
|
|
th, tearDown := SetupTestHelper(t)
|
|
defer tearDown()
|
|
|
|
t.Run("base case", func(t *testing.T) {
|
|
welcomeBoard := model.Block{
|
|
ID: "block_id_1",
|
|
Type: model.TypeBoard,
|
|
Title: "Welcome to Boards!",
|
|
Fields: map[string]interface{}{
|
|
"isTemplate": true,
|
|
},
|
|
}
|
|
|
|
blocks := []model.Block{welcomeBoard}
|
|
th.Store.EXPECT().GetDefaultTemplateBlocks().Return(blocks, nil)
|
|
|
|
th.Store.EXPECT().GetSubTree3(
|
|
store.Container{WorkspaceID: "0"},
|
|
"block_id_1",
|
|
gomock.Any(),
|
|
).Return([]model.Block{welcomeBoard}, nil)
|
|
|
|
th.Store.EXPECT().InsertBlock(
|
|
store.Container{WorkspaceID: "workspace_id_1"},
|
|
gomock.Any(),
|
|
"user_id_1",
|
|
).Return(nil)
|
|
|
|
boardID, err := th.App.createWelcomeBoard("user_id_1", "workspace_id_1")
|
|
assert.Nil(t, err)
|
|
assert.NotEmpty(t, boardID)
|
|
})
|
|
|
|
t.Run("template doesn't contain a board", func(t *testing.T) {
|
|
welcomeBoard := model.Block{
|
|
ID: "block_id_1",
|
|
Type: model.TypeComment,
|
|
Title: "Welcome to Boards!",
|
|
}
|
|
blocks := []model.Block{welcomeBoard}
|
|
th.Store.EXPECT().GetDefaultTemplateBlocks().Return(blocks, nil)
|
|
|
|
th.Store.EXPECT().GetSubTree3(
|
|
store.Container{WorkspaceID: "0"},
|
|
"buixxjic3xjfkieees4iafdrznc",
|
|
gomock.Any(),
|
|
).Return([]model.Block{welcomeBoard}, nil)
|
|
|
|
th.Store.EXPECT().InsertBlock(
|
|
store.Container{WorkspaceID: "workspace_id_1"},
|
|
gomock.Any(),
|
|
"user_id_1",
|
|
).Return(nil)
|
|
|
|
boardID, err := th.App.createWelcomeBoard("user_id_1", "workspace_id_1")
|
|
assert.Error(t, err)
|
|
assert.Empty(t, boardID)
|
|
})
|
|
|
|
t.Run("template doesn't contain the welcome board", func(t *testing.T) {
|
|
welcomeBoard := model.Block{
|
|
ID: "block_id_1",
|
|
Type: model.TypeBoard,
|
|
Title: "Jean luc Picard",
|
|
Fields: map[string]interface{}{
|
|
"isTemplate": true,
|
|
},
|
|
}
|
|
|
|
blocks := []model.Block{welcomeBoard}
|
|
th.Store.EXPECT().GetDefaultTemplateBlocks().Return(blocks, nil)
|
|
|
|
th.Store.EXPECT().GetSubTree3(
|
|
store.Container{WorkspaceID: "0"},
|
|
"buixxjic3xjfkieees4iafdrznc",
|
|
gomock.Any(),
|
|
).Return([]model.Block{welcomeBoard}, nil)
|
|
|
|
th.Store.EXPECT().InsertBlock(
|
|
store.Container{WorkspaceID: "workspace_id_1"},
|
|
gomock.Any(),
|
|
"user_id_1",
|
|
).Return(nil)
|
|
|
|
boardID, err := th.App.createWelcomeBoard("user_id_1", "workspace_id_1")
|
|
assert.Error(t, err)
|
|
assert.Empty(t, boardID)
|
|
})
|
|
}
|
|
|
|
func TestGetOnboardingBoardID(t *testing.T) {
|
|
th, tearDown := SetupTestHelper(t)
|
|
defer tearDown()
|
|
|
|
t.Run("base case", func(t *testing.T) {
|
|
board := model.Block{
|
|
ID: "board_id_1",
|
|
Type: model.TypeBoard,
|
|
Title: "Welcome to Boards!",
|
|
}
|
|
|
|
card := model.Block{
|
|
ID: "card_id_1",
|
|
Type: model.TypeCard,
|
|
ParentID: board.ID,
|
|
}
|
|
|
|
blocks := []model.Block{
|
|
board,
|
|
card,
|
|
}
|
|
|
|
th.Store.EXPECT().GetDefaultTemplateBlocks().Return(blocks, nil)
|
|
|
|
onboardingBoardID, err := th.App.getOnboardingBoardID()
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "board_id_1", onboardingBoardID)
|
|
})
|
|
|
|
t.Run("no blocks found", func(t *testing.T) {
|
|
blocks := []model.Block{}
|
|
|
|
th.Store.EXPECT().GetDefaultTemplateBlocks().Return(blocks, nil)
|
|
|
|
onboardingBoardID, err := th.App.getOnboardingBoardID()
|
|
assert.Error(t, err)
|
|
assert.Empty(t, onboardingBoardID)
|
|
})
|
|
|
|
t.Run("onboarding board doesn't exists", func(t *testing.T) {
|
|
board := model.Block{
|
|
ID: "board_id_1",
|
|
Type: model.TypeBoard,
|
|
Title: "Some board title",
|
|
}
|
|
|
|
card := model.Block{
|
|
ID: "card_id_1",
|
|
Type: model.TypeCard,
|
|
ParentID: board.ID,
|
|
}
|
|
|
|
blocks := []model.Block{
|
|
board,
|
|
card,
|
|
}
|
|
|
|
th.Store.EXPECT().GetDefaultTemplateBlocks().Return(blocks, nil)
|
|
|
|
onboardingBoardID, err := th.App.getOnboardingBoardID()
|
|
assert.Error(t, err)
|
|
assert.Empty(t, onboardingBoardID)
|
|
})
|
|
}
|