1package app
2
3import (
4 "context"
5 "testing"
6
7 "github.com/bnema/zerowrap"
8 "github.com/stretchr/testify/assert"
9 "github.com/stretchr/testify/require"
10
11 "github.com/bnema/gordon/internal/usecase/images"
12)
13
14// TestStartImagePruneSchedulerRegistersWhenAppsExist proves the
15// scheduler is no longer disabled by app state: a configured schedule
16// registers even though the server has apps, and the job runs the same
17// use case as manual execution.
18func TestStartImagePruneSchedulerRegistersWhenAppsExist(t *testing.T) {
19 cfg := Config{}
20 cfg.Images.Prune.Enabled = true
21 cfg.Images.Prune.Schedule = "daily"
22 cfg.Images.Prune.KeepLast = 3
23
24 svc := &services{imageSvc: images.NewService(nil, nil, nil, zerowrap.Default())}
25
26 scheduler, err := startImagePruneScheduler(context.Background(), cfg, svc, zerowrap.Default(), nil)
27 require.NoError(t, err)
28 require.NotNil(t, scheduler, "a configured schedule must register regardless of app state")
29 assert.NotEmpty(t, scheduler.List())
30}
31
32func TestStartImagePruneSchedulerDisabledWhenNotConfigured(t *testing.T) {
33 svc := &services{imageSvc: images.NewService(nil, nil, nil, zerowrap.Default())}
34
35 scheduler, err := startImagePruneScheduler(context.Background(), Config{}, svc, zerowrap.Default(), nil)
36 require.NoError(t, err)
37 assert.Nil(t, scheduler)
38}
39
40func TestStartImagePruneSchedulerRejectsNegativeKeepLast(t *testing.T) {
41 cfg := Config{}
42 cfg.Images.Prune.Enabled = true
43 cfg.Images.Prune.Schedule = "daily"
44 cfg.Images.Prune.KeepLast = 3
45
46 svc := &services{imageSvc: images.NewService(nil, nil, nil, zerowrap.Default())}
47 scheduler, err := startImagePruneScheduler(context.Background(), cfg, svc, zerowrap.Default(), func() int { return -1 })
48 require.Error(t, err)
49 assert.Nil(t, scheduler)
50}