dyzur-bot/service_test.go

56 lines
1.4 KiB
Go

package dyzurbot
import (
"fmt"
"testing"
"time"
)
func TestLoadConfigDefaults(t *testing.T) {
t.Setenv("GOOGLE_SHEETS_ID", "sheet-123")
t.Setenv("SHEET_RANGE", "")
t.Setenv("ROTA_CACHE_PATH", "")
t.Setenv("SYNC_INTERVAL", "")
cfg, err := LoadConfig()
if err != nil {
t.Fatalf("LoadConfig: %v", err)
}
if cfg.SpreadsheetID != "sheet-123" {
t.Errorf("SpreadsheetID: got %q", cfg.SpreadsheetID)
}
wantRange := fmt.Sprintf("%d!A1:F100", time.Now().Year())
if cfg.SheetRange != wantRange {
t.Errorf("SheetRange default: got %q, want %q", cfg.SheetRange, wantRange)
}
if cfg.CachePath != "rota.json" {
t.Errorf("CachePath default: got %q", cfg.CachePath)
}
if cfg.SyncInterval != 30*time.Minute {
t.Errorf("SyncInterval default: got %v", cfg.SyncInterval)
}
}
func TestLoadConfigRequiresSpreadsheetID(t *testing.T) {
t.Setenv("GOOGLE_SHEETS_ID", "")
if _, err := LoadConfig(); err == nil {
t.Fatal("expected error when GOOGLE_SHEETS_ID is missing")
}
}
func TestLoadConfigRejectsBadInterval(t *testing.T) {
t.Setenv("GOOGLE_SHEETS_ID", "sheet-123")
t.Setenv("SYNC_INTERVAL", "not-a-duration")
if _, err := LoadConfig(); err == nil {
t.Fatal("expected error for unparseable SYNC_INTERVAL")
}
}
func TestLoadConfigRejectsNonPositiveInterval(t *testing.T) {
t.Setenv("GOOGLE_SHEETS_ID", "sheet-123")
t.Setenv("SYNC_INTERVAL", "0s")
if _, err := LoadConfig(); err == nil {
t.Fatal("expected error for non-positive SYNC_INTERVAL")
}
}