1
0
mirror of https://github.com/mattermost/focalboard.git synced 2024-11-27 08:31:20 +02:00
focalboard/server/app/onboarding_test.go
Harshil Sharma ab3bf6312c
Merge Onboarding feature branch into main (#2406)
* 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>
2022-02-28 12:28:16 +01:00

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