mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-30 14:26:36 +08:00
146 lines
4.0 KiB
Go
146 lines
4.0 KiB
Go
// Copyright 2026 Arctel.net
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package dao_test
|
|
|
|
import (
|
|
"Wavelet/pkg/idgen"
|
|
"Wavelet/pkg/testhelper"
|
|
"Wavelet/plugins/domain/msg_gateway/dao"
|
|
"Wavelet/plugins/domain/msg_gateway/model/entity"
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type stubDBService struct{ db *gorm.DB }
|
|
|
|
func (s stubDBService) GORM() *gorm.DB { return s.db }
|
|
func (s stubDBService) DB(_ context.Context) *gorm.DB { return s.db }
|
|
func (s stubDBService) Named(_ string) *gorm.DB { return s.db }
|
|
|
|
func TestPushChannelDAO_CRUD(t *testing.T) {
|
|
_ = idgen.Init(1)
|
|
db, _, cleanup := testhelper.SetupTestEnvironment(t)
|
|
defer cleanup()
|
|
require.NoError(t, db.AutoMigrate(&entity.PushChannel{}, &entity.PushEvent{}, &entity.PushHistory{}))
|
|
|
|
dao.SetDBServiceForTest(stubDBService{db: db})
|
|
t.Cleanup(func() { dao.SetDBServiceForTest(nil) })
|
|
|
|
ctx := context.Background()
|
|
|
|
ch := entity.PushChannel{
|
|
Name: "test_webhook",
|
|
Type: "custom",
|
|
URL: "https://example.com/hook",
|
|
Enabled: true,
|
|
}
|
|
require.NoError(t, dao.CreatePushChannelRecord(ctx, &ch))
|
|
assert.NotZero(t, ch.ID)
|
|
|
|
loaded, err := dao.GetPushChannelByIDRecord(ctx, ch.ID)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "test_webhook", loaded.Name)
|
|
|
|
active, err := dao.GetActivePushChannelByName(ctx, "test_webhook")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, ch.ID, active.ID)
|
|
|
|
channels, err := dao.ListPushChannelsRecord(ctx)
|
|
require.NoError(t, err)
|
|
assert.NotEmpty(t, channels)
|
|
|
|
require.NoError(t, dao.DeletePushChannelRecord(ctx, &ch))
|
|
_, err = dao.GetPushChannelByIDRecord(ctx, ch.ID)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestPushEventDAO_CRUD(t *testing.T) {
|
|
_ = idgen.Init(1)
|
|
db, _, cleanup := testhelper.SetupTestEnvironment(t)
|
|
defer cleanup()
|
|
require.NoError(t, db.AutoMigrate(&entity.PushChannel{}, &entity.PushEvent{}, &entity.PushHistory{}))
|
|
|
|
dao.SetDBServiceForTest(stubDBService{db: db})
|
|
t.Cleanup(func() { dao.SetDBServiceForTest(nil) })
|
|
|
|
ctx := context.Background()
|
|
|
|
ev := entity.PushEvent{
|
|
EventKey: "test_event",
|
|
Name: "测试事件",
|
|
Channels: []string{"test_webhook"},
|
|
Targets: []string{"admin"},
|
|
Template: `{"title":"Hello"}`,
|
|
Enabled: true,
|
|
}
|
|
require.NoError(t, dao.CreatePushEventRecord(ctx, &ev))
|
|
assert.NotZero(t, ev.ID)
|
|
|
|
loaded, err := dao.GetPushEventByKeyRecord(ctx, "test_event")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "测试事件", loaded.Name)
|
|
|
|
require.NoError(t, dao.UpdatePushEventEnabledRecord(ctx, &ev, false))
|
|
loadedDisabled, err := dao.GetPushEventByIDRecord(ctx, ev.ID)
|
|
require.NoError(t, err)
|
|
assert.False(t, loadedDisabled.Enabled)
|
|
|
|
require.NoError(t, dao.DeletePushEventRecord(ctx, &ev))
|
|
_, err = dao.GetPushEventByIDRecord(ctx, ev.ID)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestPushHistoryDAO_Cleanup(t *testing.T) {
|
|
_ = idgen.Init(1)
|
|
db, _, cleanup := testhelper.SetupTestEnvironment(t)
|
|
defer cleanup()
|
|
require.NoError(t, db.AutoMigrate(&entity.PushHistory{}))
|
|
|
|
dao.SetDBServiceForTest(stubDBService{db: db})
|
|
t.Cleanup(func() { dao.SetDBServiceForTest(nil) })
|
|
|
|
ctx := context.Background()
|
|
|
|
now := time.Now()
|
|
oldTime := now.Add(-40 * 24 * time.Hour)
|
|
recentTime := now.Add(-5 * 24 * time.Hour)
|
|
|
|
oldHistory := entity.PushHistory{
|
|
EventKey: "login",
|
|
Channel: "telegram",
|
|
Target: "123",
|
|
Title: "Old login",
|
|
Content: "Old content",
|
|
Level: "info",
|
|
Status: "success",
|
|
CreatedAt: oldTime,
|
|
}
|
|
recentHistory := entity.PushHistory{
|
|
EventKey: "login",
|
|
Channel: "telegram",
|
|
Target: "123",
|
|
Title: "Recent login",
|
|
Content: "Recent content",
|
|
Level: "info",
|
|
Status: "success",
|
|
CreatedAt: recentTime,
|
|
}
|
|
require.NoError(t, db.Create(&oldHistory).Error)
|
|
require.NoError(t, db.Create(&recentHistory).Error)
|
|
|
|
cutoff := now.Add(-30 * 24 * time.Hour)
|
|
deleted, err := dao.DeletePushHistoriesBeforeRecord(ctx, cutoff)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, int64(1), deleted)
|
|
|
|
var count int64
|
|
db.Model(&entity.PushHistory{}).Count(&count)
|
|
assert.Equal(t, int64(1), count)
|
|
}
|