mattermost-community-enterp.../channels/store/storetest/notify_admin_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

223 lines
6.7 KiB
Go

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package storetest
import (
"database/sql"
"testing"
"github.com/stretchr/testify/require"
"github.com/mattermost/mattermost/server/public/model"
"github.com/mattermost/mattermost/server/public/shared/request"
"github.com/mattermost/mattermost/server/v8/channels/store"
)
const PluginIDJenkins = "jenkins"
func TestNotifyAdminStore(t *testing.T, rctx request.CTX, ss store.Store) {
t.Run("Save", func(t *testing.T) { testNotifyAdminStoreSave(t, rctx, ss) })
t.Run("testGetDataByUserIdAndFeature", func(t *testing.T) { testGetDataByUserIDAndFeature(t, rctx, ss) })
t.Run("testGet", func(t *testing.T) { testGet(t, rctx, ss) })
t.Run("testDeleteBefore", func(t *testing.T) { testDeleteBefore(t, rctx, ss) })
t.Run("testUpdate", func(t *testing.T) { testUpdate(t, rctx, ss) })
}
func tearDown(t *testing.T, rctx request.CTX, ss store.Store) {
err := ss.NotifyAdmin().DeleteBefore(true, model.GetMillis()+model.GetMillis())
require.NoError(t, err)
err = ss.NotifyAdmin().DeleteBefore(false, model.GetMillis()+model.GetMillis())
require.NoError(t, err)
}
func testNotifyAdminStoreSave(t *testing.T, rctx request.CTX, ss store.Store) {
d1 := &model.NotifyAdminData{
UserId: model.NewId(),
RequiredPlan: model.LicenseShortSkuProfessional,
RequiredFeature: model.PaidFeatureAllProfessionalfeatures,
}
_, err := ss.NotifyAdmin().Save(d1)
require.NoError(t, err)
// unknow plan error
d2 := &model.NotifyAdminData{
UserId: model.NewId(),
RequiredPlan: model.LicenseShortSkuProfessional,
RequiredFeature: "Unknown feature",
}
_, err = ss.NotifyAdmin().Save(d2)
require.Error(t, err)
// unknown feature error
d3 := &model.NotifyAdminData{
UserId: model.NewId(),
RequiredPlan: "Unknown plan",
RequiredFeature: model.PaidFeatureAllProfessionalfeatures,
}
_, err = ss.NotifyAdmin().Save(d3)
require.Error(t, err)
// same user requesting same feature error
singleUserID := model.NewId()
d5 := &model.NotifyAdminData{
UserId: singleUserID,
RequiredPlan: model.LicenseShortSkuProfessional,
RequiredFeature: model.PaidFeatureAllProfessionalfeatures,
}
_, err = ss.NotifyAdmin().Save(d5)
require.NoError(t, err)
d6 := &model.NotifyAdminData{
UserId: singleUserID,
RequiredPlan: model.LicenseShortSkuProfessional,
RequiredFeature: model.PaidFeatureAllProfessionalfeatures,
}
_, err = ss.NotifyAdmin().Save(d6)
require.Error(t, err)
tearDown(t, rctx, ss)
}
func testGet(t *testing.T, rctx request.CTX, ss store.Store) {
userID1 := model.NewId()
d1 := &model.NotifyAdminData{
UserId: userID1,
RequiredPlan: model.LicenseShortSkuProfessional,
RequiredFeature: model.PaidFeatureAllProfessionalfeatures,
}
_, err := ss.NotifyAdmin().Save(d1)
require.NoError(t, err)
d1Trial := &model.NotifyAdminData{
UserId: userID1,
RequiredPlan: model.LicenseShortSkuEnterprise,
RequiredFeature: model.PaidFeatureAllEnterprisefeatures,
Trial: true,
}
_, err = ss.NotifyAdmin().Save(d1Trial)
require.NoError(t, err)
d1Trial2 := &model.NotifyAdminData{
UserId: model.NewId(),
RequiredPlan: model.LicenseShortSkuEnterprise,
RequiredFeature: model.PaidFeatureAllEnterprisefeatures,
Trial: true,
}
_, err = ss.NotifyAdmin().Save(d1Trial2)
require.NoError(t, err)
upgradeRequests, err := ss.NotifyAdmin().Get(false)
require.NoError(t, err)
require.Equal(t, len(upgradeRequests), 1)
trialRequests, err := ss.NotifyAdmin().Get(true)
require.NoError(t, err)
require.Equal(t, len(trialRequests), 2)
tearDown(t, rctx, ss)
}
func testGetDataByUserIDAndFeature(t *testing.T, rctx request.CTX, ss store.Store) {
userID1 := model.NewId()
d1 := &model.NotifyAdminData{
UserId: userID1,
RequiredPlan: model.LicenseShortSkuProfessional,
RequiredFeature: model.PaidFeatureAllProfessionalfeatures,
}
_, err := ss.NotifyAdmin().Save(d1)
require.NoError(t, err)
userID2 := model.NewId()
d2 := &model.NotifyAdminData{
UserId: userID2,
RequiredPlan: model.LicenseShortSkuProfessional,
RequiredFeature: model.PaidFeatureCustomUsergroups,
}
_, err = ss.NotifyAdmin().Save(d2)
require.NoError(t, err)
user1Request, err := ss.NotifyAdmin().GetDataByUserIdAndFeature(userID1, model.PaidFeatureAllProfessionalfeatures)
require.NoError(t, err)
require.Equal(t, len(user1Request), 1)
require.Equal(t, user1Request[0].RequiredFeature, model.PaidFeatureAllProfessionalfeatures)
tearDown(t, rctx, ss)
}
func testUpdate(t *testing.T, rctx request.CTX, ss store.Store) {
userID1 := model.NewId()
d1 := &model.NotifyAdminData{
UserId: userID1,
RequiredPlan: PluginIDJenkins,
RequiredFeature: model.PluginFeature,
}
_, err := ss.NotifyAdmin().Save(d1)
require.NoError(t, err)
err = ss.NotifyAdmin().Update(d1.UserId, d1.RequiredPlan, d1.RequiredFeature, 100)
require.NoError(t, err)
userRequest, err := ss.NotifyAdmin().GetDataByUserIdAndFeature(d1.UserId, d1.RequiredFeature)
require.NoError(t, err)
require.Equal(t, len(userRequest), 1)
require.Equal(t, userRequest[0].SentAt, sql.NullInt64{Int64: 100, Valid: true})
tearDown(t, rctx, ss)
}
func testDeleteBefore(t *testing.T, rctx request.CTX, ss store.Store) {
userID1 := model.NewId()
d1 := &model.NotifyAdminData{
UserId: userID1,
RequiredPlan: model.LicenseShortSkuProfessional,
RequiredFeature: model.PaidFeatureAllProfessionalfeatures,
}
_, err := ss.NotifyAdmin().Save(d1)
require.NoError(t, err)
d1Trial := &model.NotifyAdminData{
UserId: userID1,
RequiredPlan: model.LicenseShortSkuProfessional,
RequiredFeature: model.PaidFeatureAllEnterprisefeatures,
Trial: true,
}
_, err = ss.NotifyAdmin().Save(d1Trial)
require.NoError(t, err)
d1Trial2 := &model.NotifyAdminData{
UserId: model.NewId(),
RequiredPlan: model.LicenseShortSkuProfessional,
RequiredFeature: model.PaidFeatureAllEnterprisefeatures,
Trial: true,
}
_, err = ss.NotifyAdmin().Save(d1Trial2)
require.NoError(t, err)
err = ss.NotifyAdmin().DeleteBefore(false, model.GetMillis()+model.GetMillis()) // delete all upgrade requests
require.NoError(t, err)
upgradeRequests, err := ss.NotifyAdmin().Get(false)
require.NoError(t, err)
require.Equal(t, len(upgradeRequests), 0)
trialRequests, err := ss.NotifyAdmin().Get(true)
require.NoError(t, err)
require.Equal(t, len(trialRequests), 2) // trial requests should still exist
err = ss.NotifyAdmin().DeleteBefore(true, model.GetMillis()+model.GetMillis()) // delete all trial requests
require.NoError(t, err)
trialRequests, err = ss.NotifyAdmin().Get(false)
require.NoError(t, err)
require.Equal(t, len(trialRequests), 0)
}