1package app
2
3import (
4 "testing"
5
6 "github.com/stretchr/testify/assert"
7 "github.com/stretchr/testify/require"
8)
9
10func TestValidateBackupRetentionRejectsNegativeValues(t *testing.T) {
11 tests := []struct {
12 name string
13 set func(*Config)
14 err string
15 }{
16 {
17 name: "hourly",
18 set: func(cfg *Config) {
19 cfg.Backups.Retention.Hourly = -1
20 },
21 err: "backups.retention.hourly",
22 },
23 {
24 name: "daily",
25 set: func(cfg *Config) {
26 cfg.Backups.Retention.Daily = -1
27 },
28 err: "backups.retention.daily",
29 },
30 {
31 name: "weekly",
32 set: func(cfg *Config) {
33 cfg.Backups.Retention.Weekly = -1
34 },
35 err: "backups.retention.weekly",
36 },
37 {
38 name: "monthly",
39 set: func(cfg *Config) {
40 cfg.Backups.Retention.Monthly = -1
41 },
42 err: "backups.retention.monthly",
43 },
44 }
45
46 for _, tt := range tests {
47 t.Run(tt.name, func(t *testing.T) {
48 var cfg Config
49 tt.set(&cfg)
50
51 _, err := validateBackupRetention(cfg)
52 require.Error(t, err)
53 assert.Contains(t, err.Error(), tt.err)
54 })
55 }
56}
57
58func TestValidateBackupRetentionAcceptsZeroAndPositiveValues(t *testing.T) {
59 t.Run("positive values", func(t *testing.T) {
60 var cfg Config
61 cfg.Backups.Retention.Hourly = 1
62 cfg.Backups.Retention.Daily = 7
63 cfg.Backups.Retention.Weekly = 4
64 cfg.Backups.Retention.Monthly = 12
65
66 retention, err := validateBackupRetention(cfg)
67 require.NoError(t, err)
68 assert.Equal(t, 1, retention.Hourly)
69 assert.Equal(t, 7, retention.Daily)
70 assert.Equal(t, 4, retention.Weekly)
71 assert.Equal(t, 12, retention.Monthly)
72 })
73
74 t.Run("zero values", func(t *testing.T) {
75 var cfg Config
76 cfg.Backups.Retention.Hourly = 0
77 cfg.Backups.Retention.Daily = 0
78 cfg.Backups.Retention.Weekly = 0
79 cfg.Backups.Retention.Monthly = 0
80
81 retention, err := validateBackupRetention(cfg)
82 require.NoError(t, err)
83 assert.Equal(t, 0, retention.Hourly)
84 assert.Equal(t, 0, retention.Daily)
85 assert.Equal(t, 0, retention.Weekly)
86 assert.Equal(t, 0, retention.Monthly)
87 })
88}