mattermost-community-enterp.../channels/store/storetest/content_flagging_store.go
Claude ec1f89217a Merge: Complete Mattermost Server with Community Enterprise
Full Mattermost server source with integrated Community Enterprise features.
Includes vendor directory for offline/air-gapped builds.

Structure:
- enterprise-impl/: Enterprise feature implementations
- enterprise-community/: Init files that register implementations
- enterprise/: Bridge imports (community_imports.go)
- vendor/: All dependencies for offline builds

Build (online):
  go build ./cmd/mattermost

Build (offline/air-gapped):
  go build -mod=vendor ./cmd/mattermost

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 23:59:07 +09:00

336 lines
10 KiB
Go

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package storetest
import (
"testing"
"github.com/mattermost/mattermost/server/public/model"
"github.com/mattermost/mattermost/server/public/shared/request"
"github.com/mattermost/mattermost/server/v8/channels/store"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestContentFlaggingStore(t *testing.T, rctx request.CTX, ss store.Store, s SqlStore) {
t.Run("SaveReviewerSettings", func(t *testing.T) { testSaveReviewerSettings(t, rctx, ss, s) })
t.Run("GetReviewerSettings", func(t *testing.T) { testGetReviewerSettings(t, rctx, ss, s) })
t.Run("SaveAndGetReviewerSettings", func(t *testing.T) { testSaveAndGetReviewerSettings(t, rctx, ss, s) })
}
func testSaveReviewerSettings(t *testing.T, rctx request.CTX, ss store.Store, s SqlStore) {
t.Run("save empty settings", func(t *testing.T) {
ss.ContentFlagging().ClearCaches()
commonReviewers := []string{}
teamSettings := map[string]*model.TeamReviewerSetting{}
reviewerSettings := model.ReviewerIDsSettings{
CommonReviewerIds: commonReviewers,
TeamReviewersSetting: teamSettings,
}
err := ss.ContentFlagging().SaveReviewerSettings(reviewerSettings)
assert.NoError(t, err)
// Verify settings were saved (should be empty)
settings, err := ss.ContentFlagging().GetReviewerSettings()
assert.NoError(t, err)
assert.Equal(t, 0, len(settings.CommonReviewerIds))
assert.Equal(t, 0, len(settings.TeamReviewersSetting))
})
t.Run("save common reviewers only", func(t *testing.T) {
ss.ContentFlagging().ClearCaches()
userId1 := model.NewId()
userId2 := model.NewId()
commonReviewers := []string{userId1, userId2}
teamSettings := map[string]*model.TeamReviewerSetting{}
reviewerSettings := model.ReviewerIDsSettings{
CommonReviewerIds: commonReviewers,
TeamReviewersSetting: teamSettings,
}
err := ss.ContentFlagging().SaveReviewerSettings(reviewerSettings)
assert.NoError(t, err)
// Verify settings were saved
settings, err := ss.ContentFlagging().GetReviewerSettings()
assert.NoError(t, err)
assert.NotNil(t, settings.CommonReviewerIds)
assert.Equal(t, 2, len(settings.CommonReviewerIds))
assert.Contains(t, settings.CommonReviewerIds, userId1)
assert.Contains(t, settings.CommonReviewerIds, userId2)
})
t.Run("save team settings only", func(t *testing.T) {
ss.ContentFlagging().ClearCaches()
teamId1 := model.NewId()
teamId2 := model.NewId()
enabled1 := true
enabled2 := false
commonReviewers := []string{}
teamSettings := map[string]*model.TeamReviewerSetting{
teamId1: {
Enabled: &enabled1,
ReviewerIds: []string{},
},
teamId2: {
Enabled: &enabled2,
ReviewerIds: []string{},
},
}
reviewerSettings := model.ReviewerIDsSettings{
CommonReviewerIds: commonReviewers,
TeamReviewersSetting: teamSettings,
}
err := ss.ContentFlagging().SaveReviewerSettings(reviewerSettings)
assert.NoError(t, err)
// Verify settings were saved
settings, err := ss.ContentFlagging().GetReviewerSettings()
assert.NoError(t, err)
assert.NotNil(t, settings.TeamReviewersSetting)
assert.Equal(t, 2, len(settings.TeamReviewersSetting))
teamSetting1, exists := (settings.TeamReviewersSetting)[teamId1]
assert.True(t, exists)
assert.NotNil(t, teamSetting1.Enabled)
assert.True(t, *teamSetting1.Enabled)
teamSetting2, exists := (settings.TeamReviewersSetting)[teamId2]
assert.True(t, exists)
assert.NotNil(t, teamSetting2.Enabled)
assert.False(t, *teamSetting2.Enabled)
})
t.Run("save team reviewers", func(t *testing.T) {
ss.ContentFlagging().ClearCaches()
teamId := model.NewId()
userId1 := model.NewId()
userId2 := model.NewId()
enabled := true
commonReviewers := []string{}
teamSettings := map[string]*model.TeamReviewerSetting{
teamId: {
Enabled: &enabled,
ReviewerIds: []string{userId1, userId2},
},
}
reviewerSettings := model.ReviewerIDsSettings{
CommonReviewerIds: commonReviewers,
TeamReviewersSetting: teamSettings,
}
err := ss.ContentFlagging().SaveReviewerSettings(reviewerSettings)
assert.NoError(t, err)
// Verify settings were saved
settings, err := ss.ContentFlagging().GetReviewerSettings()
assert.NoError(t, err)
assert.NotNil(t, settings.TeamReviewersSetting)
teamSetting, exists := settings.TeamReviewersSetting[teamId]
assert.True(t, exists)
assert.NotNil(t, teamSetting.ReviewerIds)
assert.Equal(t, 2, len(teamSetting.ReviewerIds))
assert.Contains(t, teamSetting.ReviewerIds, userId1)
assert.Contains(t, teamSetting.ReviewerIds, userId2)
})
t.Run("update existing settings", func(t *testing.T) {
ss.ContentFlagging().ClearCaches()
// First save some initial settings
userId1 := model.NewId()
teamId1 := model.NewId()
enabled1 := true
commonReviewers := []string{userId1}
teamSettings := map[string]*model.TeamReviewerSetting{
teamId1: {
Enabled: &enabled1,
ReviewerIds: []string{userId1},
},
}
reviewerSettings := model.ReviewerIDsSettings{
CommonReviewerIds: commonReviewers,
TeamReviewersSetting: teamSettings,
}
err := ss.ContentFlagging().SaveReviewerSettings(reviewerSettings)
assert.NoError(t, err)
// Now update with different settings
userId2 := model.NewId()
userId3 := model.NewId()
teamId2 := model.NewId()
enabled2 := false
newCommonReviewers := []string{userId2, userId3}
newTeamSettings := map[string]*model.TeamReviewerSetting{
teamId2: {
Enabled: &enabled2,
ReviewerIds: []string{userId2},
},
}
newReviewerSettings := model.ReviewerIDsSettings{
CommonReviewerIds: newCommonReviewers,
TeamReviewersSetting: newTeamSettings,
}
err = ss.ContentFlagging().SaveReviewerSettings(newReviewerSettings)
assert.NoError(t, err)
// Verify old settings were replaced
settings, err := ss.ContentFlagging().GetReviewerSettings()
assert.NoError(t, err)
// Common reviewers should be updated
assert.NotNil(t, settings.CommonReviewerIds)
assert.Equal(t, 2, len(settings.CommonReviewerIds))
assert.Contains(t, settings.CommonReviewerIds, userId2)
assert.Contains(t, settings.CommonReviewerIds, userId3)
assert.NotContains(t, settings.CommonReviewerIds, userId1)
// Team settings should be updated
assert.NotNil(t, settings.TeamReviewersSetting)
assert.Equal(t, 1, len(settings.TeamReviewersSetting))
_, exists := (settings.TeamReviewersSetting)[teamId1]
assert.False(t, exists) // Old team should be gone
teamSetting2, exists := (settings.TeamReviewersSetting)[teamId2]
assert.True(t, exists)
assert.NotNil(t, teamSetting2.Enabled)
assert.False(t, *teamSetting2.Enabled)
})
}
func testGetReviewerSettings(t *testing.T, rctx request.CTX, ss store.Store, s SqlStore) {
t.Run("get empty settings", func(t *testing.T) {
ss.ContentFlagging().ClearCaches()
// Clear any existing settings first
emptyCommonReviewers := []string{}
emptyTeamSettings := map[string]*model.TeamReviewerSetting{}
reviewerSettings := model.ReviewerIDsSettings{
CommonReviewerIds: emptyCommonReviewers,
TeamReviewersSetting: emptyTeamSettings,
}
err := ss.ContentFlagging().SaveReviewerSettings(reviewerSettings)
assert.NoError(t, err)
settings, err := ss.ContentFlagging().GetReviewerSettings()
assert.NoError(t, err)
assert.NotNil(t, settings)
assert.Equal(t, 0, len(settings.CommonReviewerIds))
assert.Equal(t, 0, len(settings.TeamReviewersSetting))
})
}
func testSaveAndGetReviewerSettings(t *testing.T, rctx request.CTX, ss store.Store, s SqlStore) {
t.Run("comprehensive save and get", func(t *testing.T) {
ss.ContentFlagging().ClearCaches()
// Create comprehensive test data
commonUserId1 := model.NewId()
commonUserId2 := model.NewId()
commonUserId3 := model.NewId()
teamId1 := model.NewId()
teamId2 := model.NewId()
teamId3 := model.NewId()
teamUserId1 := model.NewId()
teamUserId2 := model.NewId()
teamUserId3 := model.NewId()
enabled1 := true
enabled2 := false
enabled3 := true
commonReviewers := []string{commonUserId1, commonUserId2, commonUserId3}
teamSettings := map[string]*model.TeamReviewerSetting{
teamId1: {
Enabled: &enabled1,
ReviewerIds: []string{teamUserId1, teamUserId2},
},
teamId2: {
Enabled: &enabled2,
ReviewerIds: []string{teamUserId3},
},
teamId3: {
Enabled: &enabled3,
ReviewerIds: []string{}, // Empty reviewers list
},
}
reviewerSettings := model.ReviewerIDsSettings{
CommonReviewerIds: commonReviewers,
TeamReviewersSetting: teamSettings,
}
// Save the settings
err := ss.ContentFlagging().SaveReviewerSettings(reviewerSettings)
assert.NoError(t, err)
// Get the settings back
retrievedSettings, err := ss.ContentFlagging().GetReviewerSettings()
assert.NoError(t, err)
require.NotNil(t, retrievedSettings)
// Verify common reviewers
assert.NotNil(t, retrievedSettings.CommonReviewerIds)
assert.Equal(t, 3, len(retrievedSettings.CommonReviewerIds))
assert.Contains(t, retrievedSettings.CommonReviewerIds, commonUserId1)
assert.Contains(t, retrievedSettings.CommonReviewerIds, commonUserId2)
assert.Contains(t, retrievedSettings.CommonReviewerIds, commonUserId3)
// Verify team settings
assert.NotNil(t, retrievedSettings.TeamReviewersSetting)
assert.Equal(t, 3, len(retrievedSettings.TeamReviewersSetting))
// Verify team 1
team1Setting, exists := (retrievedSettings.TeamReviewersSetting)[teamId1]
assert.True(t, exists)
assert.NotNil(t, team1Setting.Enabled)
assert.True(t, *team1Setting.Enabled)
assert.NotNil(t, team1Setting.ReviewerIds)
assert.Equal(t, 2, len(team1Setting.ReviewerIds))
assert.Contains(t, team1Setting.ReviewerIds, teamUserId1)
assert.Contains(t, team1Setting.ReviewerIds, teamUserId2)
// Verify team 2
team2Setting, exists := (retrievedSettings.TeamReviewersSetting)[teamId2]
assert.True(t, exists)
assert.NotNil(t, team2Setting.Enabled)
assert.False(t, *team2Setting.Enabled)
assert.NotNil(t, team2Setting.ReviewerIds)
assert.Equal(t, 1, len(team2Setting.ReviewerIds))
assert.Contains(t, team2Setting.ReviewerIds, teamUserId3)
// Verify team 3
team3Setting, exists := (retrievedSettings.TeamReviewersSetting)[teamId3]
assert.True(t, exists)
assert.NotNil(t, team3Setting.Enabled)
assert.True(t, *team3Setting.Enabled)
assert.NotNil(t, team3Setting.ReviewerIds)
assert.Equal(t, 0, len(team3Setting.ReviewerIds))
})
}