diff --git a/exchanges/hitbtc/hitbtc_test.go b/exchanges/hitbtc/hitbtc_test.go index 4da6add0..4f8bc41e 100644 --- a/exchanges/hitbtc/hitbtc_test.go +++ b/exchanges/hitbtc/hitbtc_test.go @@ -56,6 +56,12 @@ func TestMain(m *testing.M) { if err != nil { log.Fatal("HitBTC setup error", err) } + + err = h.UpdateTradablePairs(context.Background(), false) + if err != nil { + log.Fatal("HitBTC setup error", err) + } + os.Exit(m.Run()) } @@ -161,7 +167,7 @@ func TestGetFeeByTypeOfflineTradeFee(t *testing.T) { } func TestUpdateTicker(t *testing.T) { - pairs, err := currency.NewPairsFromStrings([]string{"BTC-USD", "XRP-USD"}) + pairs, err := currency.NewPairsFromStrings([]string{"BTC-USD", "XRP-USDT"}) if err != nil { t.Fatal(err) } @@ -169,25 +175,38 @@ func TestUpdateTicker(t *testing.T) { if err != nil { t.Fatal(err) } - _, err = h.UpdateTicker(context.Background(), - currency.NewPair(currency.BTC, currency.USD), - asset.Spot) + _, err = h.UpdateTicker(context.Background(), pairs[0], asset.Spot) if err != nil { t.Error(err) } - - _, err = h.FetchTicker(context.Background(), - currency.NewPair(currency.XRP, currency.USD), asset.Spot) + _, err = h.FetchTicker(context.Background(), pairs[1], asset.Spot) if err != nil { t.Error(err) } } func TestUpdateTickers(t *testing.T) { - err := h.UpdateTickers(context.Background(), asset.Spot) + avail, err := h.GetAvailablePairs(asset.Spot) + if err != nil { + t.Fatal(err) + } + + err = h.CurrencyPairs.StorePairs(asset.Spot, avail, true) + if err != nil { + t.Fatal(err) + } + + err = h.UpdateTickers(context.Background(), asset.Spot) if err != nil { t.Error(err) } + + for j := range avail { + _, err = h.FetchTicker(context.Background(), avail[j], asset.Spot) + if err != nil { + t.Error(err) + } + } } func TestGetAllTickers(t *testing.T) { @@ -1050,3 +1069,10 @@ func TestGetHistoricTrades(t *testing.T) { t.Error(err) } } + +func TestFetchTradablePairs(t *testing.T) { + t.Parallel() + if _, err := h.FetchTradablePairs(context.Background(), asset.Spot); err != nil { + t.Fatal(err) + } +} diff --git a/exchanges/hitbtc/hitbtc_wrapper.go b/exchanges/hitbtc/hitbtc_wrapper.go index 3396e540..7fc50576 100644 --- a/exchanges/hitbtc/hitbtc_wrapper.go +++ b/exchanges/hitbtc/hitbtc_wrapper.go @@ -291,8 +291,9 @@ func (h *HitBTC) FetchTradablePairs(ctx context.Context, _ asset.Item) (currency pairs := make([]currency.Pair, len(symbols)) for x := range symbols { + quote := strings.Replace(symbols[x].ID, symbols[x].BaseCurrency, "", 1) var pair currency.Pair - pair, err = currency.NewPairFromStrings(symbols[x].BaseCurrency, symbols[x].QuoteCurrency) + pair, err = currency.NewPairFromStrings(symbols[x].BaseCurrency, quote) if err != nil { return nil, err } @@ -317,45 +318,41 @@ func (h *HitBTC) UpdateTickers(ctx context.Context, a asset.Item) error { if err != nil { return err } - pairs, err := h.GetEnabledPairs(a) + avail, err := h.GetAvailablePairs(a) if err != nil { return err } - for i := range pairs { - for j := range tick { - pairFmt, err := h.FormatExchangeCurrency(pairs[i], a) - if err != nil { - return err - } - if tick[j].Symbol != pairFmt.String() { - found := false - if strings.Contains(tick[j].Symbol, "USDT") { - if pairFmt.String() == tick[j].Symbol[0:len(tick[j].Symbol)-1] { - found = true - } - } - if !found { - continue - } - } + enabled, err := h.GetEnabledPairs(a) + if err != nil { + return err + } - err = ticker.ProcessTicker(&ticker.Price{ - Last: tick[j].Last, - High: tick[j].High, - Low: tick[j].Low, - Bid: tick[j].Bid, - Ask: tick[j].Ask, - Volume: tick[j].Volume, - QuoteVolume: tick[j].VolumeQuote, - Open: tick[j].Open, - Pair: pairs[i], - LastUpdated: tick[j].Timestamp, - ExchangeName: h.Name, - AssetType: a}) - if err != nil { - return err - } + for x := range tick { + pair, err := avail.DeriveFrom(tick[x].Symbol) + if err != nil { + return err + } + + if !enabled.Contains(pair, true) { + continue + } + + err = ticker.ProcessTicker(&ticker.Price{ + Last: tick[x].Last, + High: tick[x].High, + Low: tick[x].Low, + Bid: tick[x].Bid, + Ask: tick[x].Ask, + Volume: tick[x].Volume, + QuoteVolume: tick[x].VolumeQuote, + Open: tick[x].Open, + Pair: pair, + LastUpdated: tick[x].Timestamp, + ExchangeName: h.Name, + AssetType: a}) + if err != nil { + return err } } return nil