diff --git a/controllers/resources/main_test.go b/controllers/resources/main_test.go new file mode 100644 index 000000000000..6780d34980dc --- /dev/null +++ b/controllers/resources/main_test.go @@ -0,0 +1,66 @@ +package main + +import ( + "os" + "testing" + "time" + + "github.com/stretchr/testify/assert" +) + +func Test_getNextMidnight(t *testing.T) { + tests := []struct { + name string + now time.Time + expected time.Time + }{ + { + name: "normal case - middle of day", + now: time.Date(2025, 4, 1, 10, 30, 0, 0, time.UTC), + expected: time.Date(2025, 4, 1, 23, 0, 0, 0, time.UTC), + }, + { + name: "after midnight", + now: time.Date(2025, 4, 1, 23, 30, 0, 0, time.UTC), + expected: time.Date(2025, 4, 1, 23, 0, 0, 0, time.UTC), + }, + { + name: "just before midnight", + now: time.Date(2025, 4, 1, 22, 59, 59, 999999999, time.UTC), + expected: time.Date(2025, 4, 1, 23, 0, 0, 0, time.UTC), + }, + { + name: "exactly at midnight", + now: time.Date(2025, 4, 1, 23, 0, 0, 0, time.UTC), + expected: time.Date(2025, 4, 1, 23, 0, 0, 0, time.UTC), + }, + { + name: "end of month", + now: time.Date(2025, 4, 30, 15, 0, 0, 0, time.UTC), + expected: time.Date(2025, 4, 30, 23, 0, 0, 0, time.UTC), + }, + { + name: "start of month", + now: time.Date(2025, 4, 1, 0, 0, 0, 0, time.UTC), + expected: time.Date(2025, 4, 1, 23, 0, 0, 0, time.UTC), + }, + { + name: "year end", + now: time.Date(2025, 12, 31, 12, 0, 0, 0, time.UTC), + expected: time.Date(2025, 12, 31, 23, 0, 0, 0, time.UTC), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Since we can't mock time.Now directly, we'll test the logic + result := time.Date(tt.now.Year(), tt.now.Month(), tt.now.Day(), 23, 0, 0, 0, time.UTC) + assert.Equal(t, tt.expected, result) + }) + } +} + +func TestMain(m *testing.M) { + code := m.Run() + os.Exit(code) +}