Files
OpenFlare/backend/plugins/domain/admin/service/cleanup_test.go
T

79 lines
2.0 KiB
Go

// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
package service_test
import (
"Wavelet/core/contracts"
"Wavelet/plugins/domain/admin/model"
"Wavelet/plugins/domain/admin/service"
"context"
"sync/atomic"
"testing"
"time"
"github.com/glebarez/sqlite"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gorm.io/gorm"
)
func TestSystemCleanupHandler_Execute(t *testing.T) {
sqliteDB, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
require.NoError(t, err)
require.NoError(t, sqliteDB.AutoMigrate(&model.TaskExecution{}))
service.SetDBService(&testDBService{db: sqliteDB})
defer service.ResetServices()
now := time.Now()
oldTime := now.Add(-10 * 24 * time.Hour)
recentTime := now.Add(-1 * time.Hour)
// Seed old execution (should be cleaned)
oldExec := model.TaskExecution{
ID: 1,
TaskID: "task-old",
TaskType: "sample_task",
Status: "success",
CreatedAt: oldTime,
}
require.NoError(t, sqliteDB.Create(&oldExec).Error)
// Seed recent execution (should remain)
recentExec := model.TaskExecution{
ID: 2,
TaskID: "task-recent",
TaskType: "sample_task",
Status: "success",
CreatedAt: recentTime,
}
require.NoError(t, sqliteDB.Create(&recentExec).Error)
var eventFired atomic.Bool
service.SetEventEmitter(func(ctx context.Context, topic string, payload any) error {
if topic == contracts.EventTopicSystemCleanup {
eventFired.Store(true)
}
return nil
})
handler := &service.SystemCleanupHandler{}
res, err := handler.Execute(context.Background(), nil)
require.NoError(t, err)
require.NotNil(t, res)
assert.Contains(t, res.Message, "系统垃圾清理完成")
// Verify old execution is deleted and recent remains
var count int64
sqliteDB.Model(&model.TaskExecution{}).Count(&count)
assert.Equal(t, int64(1), count)
var remaining model.TaskExecution
sqliteDB.First(&remaining)
assert.Equal(t, uint64(2), remaining.ID)
assert.True(t, eventFired.Load(), "EventTopicSystemCleanup must be emitted")
}