服务端媒体源导入/保存/客户端输出链路修复:支持 snake/camel、subcategories/sources,默认客户端可见,保存后发布兼容 media-types.json。
build-winui / winui (push) Has been cancelled
build-winui / winui (push) Has been cancelled
新增数据库同步 Job API、持久化状态、实时输出、最新任务恢复,以及系统日志聚合接口。 管理端优化:日志中心、运维实时状态框、同步输出自动滚动、仪表盘“输出”列、真实延迟空态、本地 favicon/avatar。 新增 server/unified-management/assets/favicon.ico 和 developer-avatar.png,并接好 /favicon.ico、/admin/favicon.ico、/setup/favicon.ico、/assets/*。 WinUI 随机放映室卡片优先显示子接口原始 Description。 Inno 安装器输出框改为选区末尾 + SendMessage 滚动到底部。
This commit is contained in:
@@ -391,3 +391,47 @@ func TestDashboardOverviewKeepsChecksForDeletedSources(t *testing.T) {
|
||||
t.Fatalf("deleted source check should have fallback sourceId/name: %#v", checks[0])
|
||||
}
|
||||
}
|
||||
|
||||
func TestDatabaseSyncJobPersistsLatestStatusAndOutput(t *testing.T) {
|
||||
root := t.TempDir()
|
||||
path := filepath.Join(root, "unified.sqlite")
|
||||
store, err := Open(&config.Config{
|
||||
StorageDir: root,
|
||||
Database: config.DatabaseConfig{
|
||||
Provider: "sqlite",
|
||||
SQLitePath: path,
|
||||
FailoverEnabled: true,
|
||||
HealthIntervalSec: 3600,
|
||||
MaxOpenConns: 1,
|
||||
MaxIdleConns: 1,
|
||||
ConnMaxLifetimeSeconds: 60,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer store.Close()
|
||||
|
||||
result, err := store.ImportSQLiteToRemote()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !result.Skipped || result.Status != "skipped" {
|
||||
t.Fatalf("expected missing remote sync to be skipped, got %#v", result)
|
||||
}
|
||||
latest, err := store.LatestDatabaseSyncJob()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if latest.Direction != "sqlite_to_remote" || latest.Status != "skipped" {
|
||||
t.Fatalf("unexpected latest sync job: %#v", latest)
|
||||
}
|
||||
if len(latest.Output) == 0 || latest.Tables == nil {
|
||||
t.Fatalf("latest job should include output and tables: %#v", latest)
|
||||
}
|
||||
store.restoreDatabaseSyncStatus()
|
||||
status := store.Status()
|
||||
if status.LastSyncAt == "" || status.LastSyncError != "" {
|
||||
t.Fatalf("sync status was not restored from latest job: %#v", status)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user