package market import "testing" func TestSelectCanonicalSymbolByQuotePriority(t *testing.T) { pairs := []string{"DOGEFDUSD", "DOGEUSDC", "DOGEUSDT"} got := selectCanonicalSymbolByQuotePriority("DOGE", pairs) if got != "DOGEUSDT" { t.Fatalf("expected DOGEUSDT, got %q", got) } } func TestSelectCanonicalSymbolByQuotePriority_FallbackOrder(t *testing.T) { pairs := []string{"DOGEFDUSD", "DOGEUSDC"} got := selectCanonicalSymbolByQuotePriority("DOGE", pairs) if got != "DOGEUSDC" { t.Fatalf("expected DOGEUSDC, got %q", got) } } func TestSelectCanonicalSymbolByQuotePriority_NoPreferredQuote(t *testing.T) { pairs := []string{"DOGEBUSD"} got := selectCanonicalSymbolByQuotePriority("DOGE", pairs) if got != "DOGEBUSD" { t.Fatalf("expected DOGEBUSD, got %q", got) } } func TestSelectCanonicalFutureSymbol_PrefersPrefixThenQuote(t *testing.T) { pairs := []string{"PEPEUSDC", "PEPEUSDT", "1000PEPEUSDC", "1000PEPEUSDT"} got := selectCanonicalFutureSymbol("PEPE", pairs) if got != "1000PEPEUSDT" { t.Fatalf("expected 1000PEPEUSDT, got %q", got) } } func TestSelectCanonicalFutureSymbol_UsesQuoteAbbreviation(t *testing.T) { pairs := []string{"PEPEUSDC"} got := selectCanonicalFutureSymbol("PEPEC", pairs) if got != "PEPEUSDC" { t.Fatalf("expected PEPEUSDC, got %q", got) } } func TestTokenKeyFromSymbol_PreservesUnmappedFutureToken(t *testing.T) { got := tokenKeyFromSymbol("LUNA2USDT") if got != "LUNA2" { t.Fatalf("expected LUNA2, got %q", got) } } func TestTokenKeyFromSymbol_StripsKnownPrefix(t *testing.T) { got := tokenKeyFromSymbol("1000PEPEUSDT") if got != "PEPE" { t.Fatalf("expected PEPE, got %q", got) } } func TestTokenKeyFromSymbol_UsesQuoteAbbreviation(t *testing.T) { got := tokenKeyFromSymbol("PEPEUSDC") if got != "PEPEC" { t.Fatalf("expected PEPEC, got %q", got) } }