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

+36 -5
View File
@@ -24,17 +24,27 @@ const (
)
type mockPurgeSettingsRepo struct {
settings purge.Settings
fail failSwitch
getCalls int
saveCalls int
mu sync.Mutex
settings purge.Settings
fail failSwitch
getCalls int
saveCalls int
beforeRunWrite func()
}
func newMockPurgeSettingsRepo() *mockPurgeSettingsRepo {
return &mockPurgeSettingsRepo{settings: purge.DefaultSettings()}
}
func (m *mockPurgeSettingsRepo) snapshot() purge.Settings {
m.mu.Lock()
defer m.mu.Unlock()
return m.settings
}
func (m *mockPurgeSettingsRepo) Get() (purge.Settings, error) {
m.mu.Lock()
defer m.mu.Unlock()
m.getCalls++
if err := m.fail.trigger("Get"); err != nil {
return purge.Settings{}, err
@@ -43,6 +53,8 @@ func (m *mockPurgeSettingsRepo) Get() (purge.Settings, error) {
}
func (m *mockPurgeSettingsRepo) Save(settings purge.Settings) error {
m.mu.Lock()
defer m.mu.Unlock()
m.saveCalls++
if err := m.fail.trigger("Save"); err != nil {
return err
@@ -51,6 +63,25 @@ func (m *mockPurgeSettingsRepo) Save(settings purge.Settings) error {
return nil
}
func (m *mockPurgeSettingsRepo) SaveLastRun(at time.Time, merged int, articlesUpdated int) error {
m.mu.Lock()
m.saveCalls++
hook := m.beforeRunWrite
m.mu.Unlock()
if hook != nil {
hook()
}
m.mu.Lock()
defer m.mu.Unlock()
if err := m.fail.trigger("SaveLastRun"); err != nil {
return err
}
m.settings.LastPurgeAt = &at
m.settings.LastPurgeMerged = merged
m.settings.LastPurgeArticlesUpdated = articlesUpdated
return nil
}
var _ purge.Repository = &mockPurgeSettingsRepo{}
func purgeTime(value string) *time.Time {
@@ -796,7 +827,7 @@ func TestPurgeRun(t *testing.T) {
env := newPurgeEnv(t)
env.seedGroup(hashA, 1, 2)
env.useImages(10, 1)
env.purgeSettings.fail.failNext("Save")
env.purgeSettings.fail.failNext("SaveLastRun")
expectRaw(t, env.run(t, `{}`), 500, internalError)
expectIds(t, env.imageIds(), []uint32{1})