mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-06-29 00:51:22 +08:00
108 lines
2.9 KiB
Go
108 lines
2.9 KiB
Go
package kernel
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"nofx/provider/vergex"
|
|
)
|
|
|
|
func TestVergexDetailQueryCandidatesUseHIP3MarketAndMainnetChain(t *testing.T) {
|
|
candidates := vergexDetailQueryCandidates(vergex.Query{
|
|
MarketType: vergex.DefaultMarketType,
|
|
Symbol: "xyz:INTC",
|
|
Chain: vergex.DefaultChain,
|
|
Category: "stock",
|
|
})
|
|
|
|
if len(candidates) == 0 {
|
|
t.Fatal("expected detail query candidates")
|
|
}
|
|
if candidates[0].MarketType != "hip3_perp" || candidates[0].Chain != "mainnet" {
|
|
t.Fatalf("first candidate = %+v, want hip3_perp/mainnet", candidates[0])
|
|
}
|
|
|
|
if !hasVergexDetailCandidate(candidates, "hip3_perp", "") {
|
|
t.Fatalf("expected hip3_perp/default-chain fallback in %+v", candidates)
|
|
}
|
|
if hasVergexDetailCandidate(candidates, "stock", "mainnet") {
|
|
t.Fatalf("did not expect stock marketType fallback for Vergex detail endpoint: %+v", candidates)
|
|
}
|
|
}
|
|
|
|
func TestVergexDetailSymbolForLookupKeepsCoreCryptoBaseSymbols(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
marketType string
|
|
symbol string
|
|
want string
|
|
}{
|
|
{
|
|
name: "core crypto from all board",
|
|
marketType: "all",
|
|
symbol: "AAVE",
|
|
want: "AAVE",
|
|
},
|
|
{
|
|
name: "core crypto with usdt suffix",
|
|
marketType: "all",
|
|
symbol: "HYPEUSDT",
|
|
want: "HYPE",
|
|
},
|
|
{
|
|
name: "xyz stock keeps xyz prefix",
|
|
marketType: "all",
|
|
symbol: "xyz:INTC",
|
|
want: "xyz:INTC",
|
|
},
|
|
{
|
|
name: "hip3 symbol gains xyz prefix",
|
|
marketType: vergex.DefaultMarketType,
|
|
symbol: "SNDK",
|
|
want: "xyz:SNDK",
|
|
},
|
|
{
|
|
name: "core market strips suffix",
|
|
marketType: "core_perp",
|
|
symbol: "LITUSDT",
|
|
want: "LIT",
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
if got := vergexDetailSymbolForLookup(tc.marketType, tc.symbol); got != tc.want {
|
|
t.Fatalf("vergexDetailSymbolForLookup(%q, %q) = %q, want %q", tc.marketType, tc.symbol, got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestVergexDetailQueryCandidatesPreferMarketTypeBySymbolWhenSourceIsAll(t *testing.T) {
|
|
cryptoCandidates := vergexDetailQueryCandidates(vergex.Query{
|
|
MarketType: "all",
|
|
Symbol: "AAVE",
|
|
Chain: "mainnet",
|
|
})
|
|
if len(cryptoCandidates) == 0 || cryptoCandidates[0].MarketType != "core_perp" {
|
|
t.Fatalf("crypto candidates should prefer core_perp first: %+v", cryptoCandidates)
|
|
}
|
|
|
|
xyzCandidates := vergexDetailQueryCandidates(vergex.Query{
|
|
MarketType: "all",
|
|
Symbol: "xyz:SNDK",
|
|
Chain: "mainnet",
|
|
})
|
|
if len(xyzCandidates) == 0 || xyzCandidates[0].MarketType != vergex.DefaultMarketType {
|
|
t.Fatalf("xyz candidates should prefer hip3_perp first: %+v", xyzCandidates)
|
|
}
|
|
}
|
|
|
|
func hasVergexDetailCandidate(candidates []vergex.Query, marketType, chain string) bool {
|
|
for _, candidate := range candidates {
|
|
if candidate.MarketType == marketType && candidate.Chain == chain {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|