Files
cmbone/internal/services/log_service_test.go
T

112 lines
3.3 KiB
Go
Raw Normal View History

2026-07-09 00:55:46 +08:00
package services
import (
"testing"
"cmbone/internal/models"
)
func TestAuditLogServiceRecordAndList(t *testing.T) {
store := newTestStore(t)
service := NewAuditLogService(store)
if err := service.Record("settings.update", "appconfig", "theme.mode", "changed theme"); err != nil {
t.Fatalf("record audit log: %v", err)
}
logs, err := service.List(models.AuditLogFilter{Action: "settings.update"})
if err != nil {
t.Fatalf("list audit logs: %v", err)
}
if len(logs) != 1 {
t.Fatalf("logs len = %d, want 1", len(logs))
}
if logs[0].Actor != "system" {
t.Fatalf("actor = %q, want system", logs[0].Actor)
}
if logs[0].TargetID != "theme.mode" {
t.Fatalf("target id = %q, want theme.mode", logs[0].TargetID)
}
}
func TestAppLogServiceRecordAndList(t *testing.T) {
store := newTestStore(t)
service := NewAppLogService(store)
if err := service.Record("error", "image_optimization", "provider failed", "timeout"); err != nil {
t.Fatalf("record app log: %v", err)
}
logs, err := service.List(models.AppLogFilter{Level: "error", Module: "image_optimization"})
if err != nil {
t.Fatalf("list app logs: %v", err)
}
if len(logs) != 1 {
t.Fatalf("logs len = %d, want 1", len(logs))
}
if logs[0].Message != "provider failed" {
t.Fatalf("message = %q, want provider failed", logs[0].Message)
}
}
func TestAppConfigServiceRecordsSettingsAudit(t *testing.T) {
store := newTestStore(t)
service := NewAppConfigService(store)
if err := service.SetAppConfig("theme.mode", "dark"); err != nil {
t.Fatalf("set theme: %v", err)
}
var count int
if err := store.DB.QueryRow("SELECT COUNT(*) FROM audit_logs WHERE action = ? AND target_id = ?", auditActionSettingsUpdate, "theme.mode").Scan(&count); err != nil {
t.Fatalf("count settings audit logs: %v", err)
}
if count != 1 {
t.Fatalf("settings audit count = %d, want 1", count)
}
}
func TestAppConfigServiceSkipsWindowStateAudit(t *testing.T) {
store := newTestStore(t)
service := NewAppConfigService(store)
if err := service.SetAppConfig(settingKeyWindowWidth, "1400"); err != nil {
t.Fatalf("set window width: %v", err)
}
var count int
if err := store.DB.QueryRow("SELECT COUNT(*) FROM audit_logs WHERE target_id = ?", settingKeyWindowWidth).Scan(&count); err != nil {
t.Fatalf("count window audit logs: %v", err)
}
if count != 0 {
t.Fatalf("window audit count = %d, want 0", count)
}
}
func TestImageOptimizationServiceRecordsTaskAuditAndFailureLog(t *testing.T) {
store := newTestStore(t)
service := NewImageOptimizationService(store)
detail, err := service.CreateTask(models.ImageTaskInput{SourcePath: "demo.jpg"})
if err != nil {
t.Fatalf("create task: %v", err)
}
var auditCount int
if err := store.DB.QueryRow("SELECT COUNT(*) FROM audit_logs WHERE action = ? AND target_id = ?", auditActionImageTaskCreate, detail.Task.ID).Scan(&auditCount); err != nil {
t.Fatalf("count image task audit logs: %v", err)
}
if auditCount != 1 {
t.Fatalf("image task audit count = %d, want 1", auditCount)
}
_, _ = service.CreateTask(models.ImageTaskInput{})
var appLogCount int
if err := store.DB.QueryRow("SELECT COUNT(*) FROM app_logs WHERE module = ? AND message = ?", "image_optimization", "create task failed").Scan(&appLogCount); err != nil {
t.Fatalf("count image task app logs: %v", err)
}
if appLogCount != 1 {
t.Fatalf("image task app log count = %d, want 1", appLogCount)
}
}