1
0
mirror of https://github.com/mattermost/focalboard.git synced 2024-12-24 13:43:12 +02:00
focalboard/server/services/store/storetests/compliance.go
Doug Lauder 81b0fd8453
Cherry-pick 4285 Compliance export into release-7.8 (#4558)
* fix merge conflicts

* fix linter

---------

Co-authored-by: Scott Bishel <scott.bishel@mattermost.com>
2023-02-08 16:12:06 -05:00

295 lines
8.6 KiB
Go

package storetests
import (
"math"
"testing"
"github.com/mattermost/focalboard/server/model"
"github.com/mattermost/focalboard/server/services/store"
"github.com/mattermost/focalboard/server/utils"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func StoreTestComplianceHistoryStore(t *testing.T, setup func(t *testing.T) (store.Store, func())) {
t.Run("GetBoardsForCompliance", func(t *testing.T) {
store, tearDown := setup(t)
defer tearDown()
testGetBoardsForCompliance(t, store)
})
t.Run("GetBoardsComplianceHistory", func(t *testing.T) {
store, tearDown := setup(t)
defer tearDown()
testGetBoardsComplianceHistory(t, store)
})
t.Run("GetBlocksComplianceHistory", func(t *testing.T) {
store, tearDown := setup(t)
defer tearDown()
testGetBlocksComplianceHistory(t, store)
})
}
func testGetBoardsForCompliance(t *testing.T, store store.Store) {
team1 := testTeamID
team2 := utils.NewID(utils.IDTypeTeam)
boardsAdded1 := createTestBoards(t, store, team1, testUserID, 10)
boardsAdded2 := createTestBoards(t, store, team2, testUserID, 7)
deleteTestBoard(t, store, boardsAdded1[0].ID, testUserID)
deleteTestBoard(t, store, boardsAdded1[1].ID, testUserID)
boardsAdded1 = boardsAdded1[2:]
t.Run("Invalid teamID", func(t *testing.T) {
opts := model.QueryBoardsForComplianceOptions{
TeamID: utils.NewID(utils.IDTypeTeam),
}
boards, hasMore, err := store.GetBoardsForCompliance(opts)
assert.Empty(t, boards)
assert.False(t, hasMore)
assert.NoError(t, err)
})
t.Run("All teams", func(t *testing.T) {
opts := model.QueryBoardsForComplianceOptions{}
boards, hasMore, err := store.GetBoardsForCompliance(opts)
assert.ElementsMatch(t, extractIDs(t, boards), extractIDs(t, boardsAdded1, boardsAdded2))
assert.False(t, hasMore)
assert.NoError(t, err)
})
t.Run("Specific team", func(t *testing.T) {
opts := model.QueryBoardsForComplianceOptions{
TeamID: team1,
}
boards, hasMore, err := store.GetBoardsForCompliance(opts)
assert.ElementsMatch(t, extractIDs(t, boards), extractIDs(t, boardsAdded1))
assert.False(t, hasMore)
assert.NoError(t, err)
})
t.Run("Pagination", func(t *testing.T) {
opts := model.QueryBoardsForComplianceOptions{
Page: 0,
PerPage: 3,
}
reps := 0
allBoards := make([]*model.Board, 0, 20)
for {
boards, hasMore, err := store.GetBoardsForCompliance(opts)
require.NoError(t, err)
require.NotEmpty(t, boards)
allBoards = append(allBoards, boards...)
if !hasMore {
break
}
opts.Page++
reps++
}
assert.ElementsMatch(t, extractIDs(t, allBoards), extractIDs(t, boardsAdded1, boardsAdded2))
})
}
func testGetBoardsComplianceHistory(t *testing.T, store store.Store) {
team1 := testTeamID
team2 := utils.NewID(utils.IDTypeTeam)
boardsTeam1 := createTestBoards(t, store, team1, testUserID, 11)
boardsTeam2 := createTestBoards(t, store, team2, testUserID, 7)
boardsAdded := make([]*model.Board, 0)
boardsAdded = append(boardsAdded, boardsTeam1...)
boardsAdded = append(boardsAdded, boardsTeam2...)
deleteTestBoard(t, store, boardsTeam1[0].ID, testUserID)
deleteTestBoard(t, store, boardsTeam1[1].ID, testUserID)
boardsDeleted := boardsTeam1[0:2]
boardsTeam1 = boardsTeam1[2:]
t.Log("boardsTeam1: ", extractIDs(t, boardsTeam1))
t.Log("boardsTeam2: ", extractIDs(t, boardsTeam2))
t.Log("boardsAdded: ", extractIDs(t, boardsAdded))
t.Log("boardsDeleted: ", extractIDs(t, boardsDeleted))
t.Run("Invalid teamID", func(t *testing.T) {
opts := model.QueryBoardsComplianceHistoryOptions{
TeamID: utils.NewID(utils.IDTypeTeam),
}
boardHistories, hasMore, err := store.GetBoardsComplianceHistory(opts)
assert.Empty(t, boardHistories)
assert.False(t, hasMore)
assert.NoError(t, err)
})
t.Run("All teams, include deleted", func(t *testing.T) {
opts := model.QueryBoardsComplianceHistoryOptions{
IncludeDeleted: true,
}
boardHistories, hasMore, err := store.GetBoardsComplianceHistory(opts)
// boardHistories should contain a record for each board added, plus a record for the 2 deleted.
assert.ElementsMatch(t, extractIDs(t, boardHistories), extractIDs(t, boardsAdded, boardsDeleted))
assert.False(t, hasMore)
assert.NoError(t, err)
})
t.Run("All teams, exclude deleted", func(t *testing.T) {
opts := model.QueryBoardsComplianceHistoryOptions{
IncludeDeleted: false,
}
boardHistories, hasMore, err := store.GetBoardsComplianceHistory(opts)
// boardHistories should contain a record for each board added, minus the two deleted.
assert.ElementsMatch(t, extractIDs(t, boardHistories), extractIDs(t, boardsTeam1, boardsTeam2))
assert.False(t, hasMore)
assert.NoError(t, err)
})
t.Run("Specific team", func(t *testing.T) {
opts := model.QueryBoardsComplianceHistoryOptions{
TeamID: team1,
}
boardHistories, hasMore, err := store.GetBoardsComplianceHistory(opts)
assert.ElementsMatch(t, extractIDs(t, boardHistories), extractIDs(t, boardsTeam1))
assert.False(t, hasMore)
assert.NoError(t, err)
})
t.Run("Pagination", func(t *testing.T) {
opts := model.QueryBoardsComplianceHistoryOptions{
Page: 0,
PerPage: 3,
}
reps := 0
allHistories := make([]*model.BoardHistory, 0)
for {
reps++
boardHistories, hasMore, err := store.GetBoardsComplianceHistory(opts)
require.NoError(t, err)
require.NotEmpty(t, boardHistories)
allHistories = append(allHistories, boardHistories...)
if !hasMore {
break
}
opts.Page++
}
assert.ElementsMatch(t, extractIDs(t, allHistories), extractIDs(t, boardsTeam1, boardsTeam2))
expectedCount := len(boardsTeam1) + len(boardsTeam2)
assert.Equal(t, math.Floor(float64(expectedCount/opts.PerPage)+1), float64(reps))
})
}
func testGetBlocksComplianceHistory(t *testing.T, store store.Store) {
team1 := testTeamID
team2 := utils.NewID(utils.IDTypeTeam)
boardsTeam1 := createTestBoards(t, store, team1, testUserID, 3)
boardsTeam2 := createTestBoards(t, store, team2, testUserID, 1)
// add cards (13 in total)
cards1Team1 := createTestCards(t, store, testUserID, boardsTeam1[0].ID, 3)
cards2Team1 := createTestCards(t, store, testUserID, boardsTeam1[1].ID, 5)
cards3Team1 := createTestCards(t, store, testUserID, boardsTeam1[2].ID, 2)
cards1Team2 := createTestCards(t, store, testUserID, boardsTeam2[0].ID, 3)
deleteTestBoard(t, store, boardsTeam1[0].ID, testUserID)
cardsDeleted := cards1Team1
t.Run("Invalid teamID", func(t *testing.T) {
opts := model.QueryBlocksComplianceHistoryOptions{
TeamID: utils.NewID(utils.IDTypeTeam),
}
boards, hasMore, err := store.GetBlocksComplianceHistory(opts)
assert.Empty(t, boards)
assert.False(t, hasMore)
assert.NoError(t, err)
})
t.Run("All teams, include deleted", func(t *testing.T) {
opts := model.QueryBlocksComplianceHistoryOptions{
IncludeDeleted: true,
}
blockHistories, hasMore, err := store.GetBlocksComplianceHistory(opts)
// blockHistories should have records for all cards added, plus all cards deleted
assert.ElementsMatch(t, extractIDs(t, blockHistories, nil),
extractIDs(t, cards1Team1, cards2Team1, cards3Team1, cards1Team2, cardsDeleted))
assert.False(t, hasMore)
assert.NoError(t, err)
})
t.Run("All teams, exclude deleted", func(t *testing.T) {
opts := model.QueryBlocksComplianceHistoryOptions{}
blockHistories, hasMore, err := store.GetBlocksComplianceHistory(opts)
// blockHistories should have records for all cards added that have not been deleted
assert.ElementsMatch(t, extractIDs(t, blockHistories, nil),
extractIDs(t, cards2Team1, cards3Team1, cards1Team2))
assert.False(t, hasMore)
assert.NoError(t, err)
})
t.Run("Specific team", func(t *testing.T) {
opts := model.QueryBlocksComplianceHistoryOptions{
TeamID: team1,
}
blockHistories, hasMore, err := store.GetBlocksComplianceHistory(opts)
assert.ElementsMatch(t, extractIDs(t, blockHistories), extractIDs(t, cards2Team1, cards3Team1))
assert.False(t, hasMore)
assert.NoError(t, err)
})
t.Run("Pagination", func(t *testing.T) {
opts := model.QueryBlocksComplianceHistoryOptions{
Page: 0,
PerPage: 3,
}
reps := 0
allHistories := make([]*model.BlockHistory, 0)
for {
reps++
blockHistories, hasMore, err := store.GetBlocksComplianceHistory(opts)
require.NoError(t, err)
require.NotEmpty(t, blockHistories)
allHistories = append(allHistories, blockHistories...)
if !hasMore {
break
}
opts.Page++
}
assert.ElementsMatch(t, extractIDs(t, allHistories), extractIDs(t, cards2Team1, cards3Team1, cards1Team2))
expectedCount := len(cards2Team1) + len(cards3Team1) + len(cards1Team2)
assert.Equal(t, math.Floor(float64(expectedCount/opts.PerPage)+1), float64(reps))
})
}