package main import ( "io" "log/slog" "testing" "git.yeij.top/AskaEth/Cyrene_v2/internal/channel/adapter" "git.yeij.top/AskaEth/Cyrene_v2/internal/logger" ) func testLog() *slog.Logger { return logger.New(logger.Options{Out: io.Discard}) } func TestBuildChannelAdapters_IncludesKook(t *testing.T) { t.Setenv("CHANNEL_KOOK_TOKEN", "kook-secret") adapters := buildChannelAdapters(testLog()) if !hasAdapter(adapters, "kook") { t.Fatalf("expected a kook adapter, got %v", names(adapters)) } } func TestBuildChannelAdapters_KookMultiAccount(t *testing.T) { t.Setenv("CHANNELS_JSON", `{"kook":[{"id":"conf0","config":{"bot_token":"kook-secret"},"allowUsers":["u-1"],"denyGroups":["g-9"]}]}`) adapters := buildChannelAdapters(testLog()) if !hasAdapter(adapters, "kook:conf0") { t.Fatalf("expected a kook:conf0 adapter, got %v", names(adapters)) } // The named adapter must expose its allow/deny lists via Config(). for _, a := range adapters { if a.Name() == "kook:conf0" { cfg := a.Config() if got, _ := cfg["allowUsers"].([]string); len(got) != 1 || got[0] != "u-1" { t.Errorf("allowUsers = %v, want [u-1]", cfg["allowUsers"]) } } } } func hasAdapter(adapters []adapter.PlatformAdapter, name string) bool { for _, a := range adapters { if a.Name() == name { return true } } return false } func names(adapters []adapter.PlatformAdapter) []string { out := make([]string, 0, len(adapters)) for _, a := range adapters { out = append(out, a.Name()) } return out }