package config import ( "testing" pkgtel "scrabble/pkg/telemetry" ) // setRequired sets the required connector variables (one bot + the Mini App URL) // so Load reaches the telemetry checks. func setRequired(t *testing.T) { t.Helper() t.Setenv("TELEGRAM_BOT_TOKEN_EN", "test-token") t.Setenv("TELEGRAM_MINIAPP_URL", "https://example.org/app") } // TestLoadBots verifies the per-language bot parsing: a present token enables a // language, its channel id is optional, and the result is keyed by language. func TestLoadBots(t *testing.T) { t.Setenv("TELEGRAM_MINIAPP_URL", "https://example.org/app") t.Setenv("TELEGRAM_BOT_TOKEN_EN", "en-token") t.Setenv("TELEGRAM_GAME_CHANNEL_ID_EN", "-100111") t.Setenv("TELEGRAM_BOT_TOKEN_RU", "ru-token") c, err := Load() if err != nil { t.Fatalf("Load: %v", err) } if len(c.Bots) != 2 { t.Fatalf("Bots = %d, want 2", len(c.Bots)) } if c.Bots["en"].Token != "en-token" || c.Bots["en"].GameChannelID != -100111 { t.Errorf("en bot = %+v", c.Bots["en"]) } if c.Bots["ru"].Token != "ru-token" || c.Bots["ru"].GameChannelID != 0 { t.Errorf("ru bot = %+v, want token ru-token / channel 0", c.Bots["ru"]) } } // TestLoadRequiresBot verifies Load fails when no bot token is configured. func TestLoadRequiresBot(t *testing.T) { t.Setenv("TELEGRAM_MINIAPP_URL", "https://example.org/app") if _, err := Load(); err == nil { t.Fatal("Load: expected an error when no bot token is set, got nil") } } // TestLoadTelemetryDefaults verifies the connector telemetry defaults: the // "scrabble-telegram" service name and both exporters off. func TestLoadTelemetryDefaults(t *testing.T) { setRequired(t) c, err := Load() if err != nil { t.Fatalf("Load: %v", err) } if c.Telemetry.ServiceName != "scrabble-telegram" { t.Errorf("Telemetry.ServiceName = %q, want scrabble-telegram", c.Telemetry.ServiceName) } if c.Telemetry.TracesExporter != pkgtel.ExporterNone || c.Telemetry.MetricsExporter != pkgtel.ExporterNone { t.Errorf("exporters = %q/%q, want none/none", c.Telemetry.TracesExporter, c.Telemetry.MetricsExporter) } } // TestLoadRejectsUnsupportedExporter verifies an exporter outside the supported // set fails validation. func TestLoadRejectsUnsupportedExporter(t *testing.T) { setRequired(t) t.Setenv("TELEGRAM_OTEL_TRACES_EXPORTER", "jaeger") if _, err := Load(); err == nil { t.Fatal("Load: expected an error for an unsupported exporter, got nil") } }