feat: media duplicate purge, part 2 of 3: the automatic purge scheduler (Go only)

This commit is contained in:
fsylvain committed 2026-10-05 19:44:15 +02:00
1 parent e82d0ce254
commit 1a55a39425
18 files changed
+1389 -39

No files matched your search

+48
View File
@@ -64,6 +64,21 @@ func TestPurgeLayering(t *testing.T) {
}
}
})
t.Run("the scheduler imports only the stdlib and domain packages", func(t *testing.T) {
imports := list(t, `{{join .Imports "\n"}}`, "RenewCMS/internal/infrastructure/scheduler")
if len(imports) == 0 {
t.Fatal("expected imports")
}
for _, imported := range imports {
if strings.Contains(imported, ".") && !strings.HasPrefix(imported, "RenewCMS/internal/domain/") {
t.Errorf("unexpected import %s", imported)
}
if strings.HasPrefix(imported, "RenewCMS/") && !strings.HasPrefix(imported, "RenewCMS/internal/domain/") {
t.Errorf("scheduler must not import %s", imported)
}
}
})
}
func TestPurgeSettingsRepositoryRoundTrip(t *testing.T) {
@@ -107,6 +122,39 @@ func TestPurgeSettingsRepositoryRoundTrip(t *testing.T) {
}
})
t.Run("SaveLastRun writes only the last_purge_* columns", func(t *testing.T) {
repo := newRepo(t)
enabled := time.Date(2026, 10, 5, 9, 0, 0, 0, time.UTC)
if err := repo.Save(domainPurge.Settings{AutoPurgeEnabled: true, AutoPurgeIntervalDays: 9, EnabledAt: &enabled}); err != nil {
t.Fatal(err)
}
at := time.Date(2026, 10, 6, 9, 0, 0, 0, time.UTC)
if err := repo.SaveLastRun(at, 4, 2); err != nil {
t.Fatal(err)
}
got, err := repo.Get()
if err != nil || !got.AutoPurgeEnabled || got.AutoPurgeIntervalDays != 9 || got.EnabledAt == nil || !got.EnabledAt.Equal(enabled) || got.LastPurgeAt == nil || !got.LastPurgeAt.Equal(at) || got.LastPurgeMerged != 4 || got.LastPurgeArticlesUpdated != 2 {
t.Errorf("unexpected settings %+v, %v", got, err)
}
})
t.Run("SaveLastRun with no saved row keeps the defaults", func(t *testing.T) {
repo := newRepo(t)
at := time.Date(2026, 10, 6, 9, 0, 0, 0, time.UTC)
if err := repo.SaveLastRun(at, 0, 0); err != nil {
t.Fatal(err)
}
got, err := repo.Get()
defaults := domainPurge.DefaultSettings()
if err != nil || got.AutoPurgeEnabled != defaults.AutoPurgeEnabled || got.AutoPurgeIntervalDays != defaults.AutoPurgeIntervalDays || got.LastPurgeAt == nil || !got.LastPurgeAt.Equal(at) {
t.Errorf("unexpected settings %+v, %v", got, err)
}
})
t.Run("Repeated saves keep a single row", func(t *testing.T) {
db := openInMemoryDb(t)
if err := db.AutoMigrate(&models.PurgeSettings{}); err != nil {