package middleware import ( "testing" "time" "github.com/go-admin-team/go-admin-core/sdk/config" ) func TestResolveJWTTimeoutDefaultsToThirtyDays(t *testing.T) { for _, mode := range []string{"prod", "test", "demo"} { if got := resolveJWTTimeout(mode, 0); got != 30*24*time.Hour { t.Errorf("mode %s timeout=%s, want 720h", mode, got) } } } func TestResolveJWTTimeoutHonorsExplicitConfiguration(t *testing.T) { if got := resolveJWTTimeout("prod", 3600); got != time.Hour { t.Fatalf("timeout=%s, want 1h", got) } } func TestResolveJWTTimeoutKeepsUpstreamDevelopmentBehavior(t *testing.T) { if got := resolveJWTTimeout("dev", 1); got != 876010*time.Hour { t.Fatalf("development timeout=%s", got) } } func TestAuthInitSignsTokenExpiringAfterThirtyDays(t *testing.T) { oldMode := config.ApplicationConfig.Mode oldTimeout := config.JwtConfig.Timeout oldSecret := config.JwtConfig.Secret t.Cleanup(func() { config.ApplicationConfig.Mode = oldMode config.JwtConfig.Timeout = oldTimeout config.JwtConfig.Secret = oldSecret }) config.ApplicationConfig.Mode = "prod" config.JwtConfig.Timeout = 0 config.JwtConfig.Secret = "task-104-test-secret-not-for-production" auth, err := AuthInit() if err != nil { t.Fatal(err) } now := time.Date(2026, 8, 17, 10, 0, 0, 0, time.UTC) auth.TimeFunc = func() time.Time { return now } _, expiresAt, err := auth.TokenGenerator(map[string]interface{}{}) if err != nil { t.Fatal(err) } if got := expiresAt.Sub(now); got != 30*24*time.Hour { t.Fatalf("signed token validity=%s, want 720h", got) } }