Files
gocryptotrader/helpers_test.go
Ryan O'Hara-Reid 84a67359c9 Deposit address wrapper Update (#232)
* Add get deposit address and fix authentication issue for ZB exchange

*  Add get deposit address for Yobit exchange

* Add get deposit address for Poloniex exchange

* Add get deposit address for LocalBitcoins exchange

* Remove support for deposit address on Liqui exchange

*  Add get deposit address for LakeBTC exchange

* Add notes as to the reason of non implementation

* Add get deposit address for Kraken exchange

* Add get deposit address for HitBTC exchange

*  Add get deposit address for GateIO exchange

* Add get deposit address for Exmo exchange

*  Remove support for deposit address on Coinut exchange

* Add test case for BTC Markets function still not supported yet.

*  Add get deposit address for Bittrex exchange

* Add get deposit address for Bitstamp exchange

* Add get deposit address for Bitmex exchange
Rm unused swagger.json file in Bitmex exchange

* Add get deposit address for Bithumb exchange

* Add get deposit address for Binance exchange
Fix bug in Authenticated requests, concatenates sig string on end of query

* Remove support for deposit address on ANX exchange

* Updated account type to segregate multiple accounts on an exchange.

* Fix requested changes

* Add get deposit address for Bitfinex exchange
Add parameter for getting deposit address to wrapper

* Add get deposit address for ANX exchange

* Fix misspelling in Poloniex

* Drop working field and initialisation of zero value for Account Type

* Change switch to symbol package currency code
2019-01-17 11:44:23 +11:00

408 lines
11 KiB
Go

package main
import (
"log"
"testing"
"github.com/thrasher-/gocryptotrader/common"
"github.com/thrasher-/gocryptotrader/config"
"github.com/thrasher-/gocryptotrader/currency"
"github.com/thrasher-/gocryptotrader/currency/pair"
exchange "github.com/thrasher-/gocryptotrader/exchanges"
"github.com/thrasher-/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-/gocryptotrader/exchanges/stats"
"github.com/thrasher-/gocryptotrader/exchanges/ticker"
)
const (
TestConfig = "./testdata/configtest.json"
)
var (
helperTestLoaded = false
)
func SetupTestHelpers(t *testing.T) {
if !helperTestLoaded {
if !testSetup {
bot.config = &config.Cfg
err := bot.config.LoadConfig("./testdata/configtest.json")
if err != nil {
t.Fatalf("Test failed. SetupTest: Failed to load config: %s", err)
}
testSetup = true
}
err := bot.config.RetrieveConfigCurrencyPairs(true)
if err != nil {
t.Fatalf("Failed to retrieve config currency pairs. %s", err)
}
helperTestLoaded = true
}
}
func TestGetSpecificAvailablePairs(t *testing.T) {
SetupTestHelpers(t)
result := GetSpecificAvailablePairs(true, true, true, false)
if !pair.Contains(result, pair.NewCurrencyPair("BTC", "USD"), true) {
t.Fatal("Unexpected result")
}
if !pair.Contains(result, pair.NewCurrencyPair("BTC", "USDT"), false) {
t.Fatal("Unexpected result")
}
result = GetSpecificAvailablePairs(true, true, false, false)
if pair.Contains(result, pair.NewCurrencyPair("BTC", "USDT"), false) {
t.Fatal("Unexpected result")
}
result = GetSpecificAvailablePairs(true, false, false, true)
if !pair.Contains(result, pair.NewCurrencyPair("LTC", "BTC"), false) {
t.Fatal("Unexpected result")
}
}
func TestIsRelatablePairs(t *testing.T) {
SetupTestHelpers(t)
// Test relational pairs with similar names
result := IsRelatablePairs(pair.NewCurrencyPair("XBT", "USD"), pair.NewCurrencyPair("BTC", "USD"), false)
if !result {
t.Fatal("Unexpected result")
}
// Test relational pairs with similar names reversed
result = IsRelatablePairs(pair.NewCurrencyPair("BTC", "USD"), pair.NewCurrencyPair("XBT", "USD"), false)
if !result {
t.Fatal("Unexpected result")
}
// Test relational pairs with similar names but with Tether support disabled
result = IsRelatablePairs(pair.NewCurrencyPair("XBT", "USD"), pair.NewCurrencyPair("BTC", "USDT"), false)
if result {
t.Fatal("Unexpected result")
}
// Test relational pairs with similar names but with Tether support enabled
result = IsRelatablePairs(pair.NewCurrencyPair("XBT", "USDT"), pair.NewCurrencyPair("BTC", "USD"), true)
if !result {
t.Fatal("Unexpected result")
}
// Test relational pairs with different ordering, a delimiter and with Tether support enabled
result = IsRelatablePairs(pair.NewCurrencyPair("AE", "USDT"), pair.NewCurrencyPairDelimiter("USDT-AE", "-"), true)
if !result {
t.Fatal("Unexpected result")
}
// Test relational pairs with different ordering, a delimiter and with Tether support disabled
result = IsRelatablePairs(pair.NewCurrencyPair("AE", "USDT"), pair.NewCurrencyPairDelimiter("USDT-AE", "-"), false)
if !result {
t.Fatal("Unexpected result")
}
// Test relationl pairs with similar names and different fiat currencies
result = IsRelatablePairs(pair.NewCurrencyPair("XBT", "EUR"), pair.NewCurrencyPair("BTC", "AUD"), false)
if !result {
t.Fatal("Unexpected result")
}
// Test relationl pairs with similar names, different fiat currencies and with different ordering
result = IsRelatablePairs(pair.NewCurrencyPair("USD", "BTC"), pair.NewCurrencyPair("BTC", "EUR"), false)
if !result {
t.Fatal("Unexpected result")
}
// Test relationl pairs with similar names, different fiat currencies and with Tether enabled
result = IsRelatablePairs(pair.NewCurrencyPair("USD", "BTC"), pair.NewCurrencyPair("BTC", "USDT"), true)
if !result {
t.Fatal("Unexpected result")
}
// Test relationl crypto pairs with similar names
result = IsRelatablePairs(pair.NewCurrencyPair("LTC", "BTC"), pair.NewCurrencyPair("BTC", "LTC"), false)
if !result {
t.Fatal("Unexpected result")
}
// Test relationl crypto pairs with similar different pairs
result = IsRelatablePairs(pair.NewCurrencyPair("LTC", "ETH"), pair.NewCurrencyPair("BTC", "ETH"), false)
if result {
t.Fatal("Unexpected result")
}
// Test relationl crypto pairs with similar different pairs and with USDT enabled
result = IsRelatablePairs(pair.NewCurrencyPair("USDT", "USD"), pair.NewCurrencyPair("BTC", "USD"), true)
if result {
t.Fatal("Unexpected result")
}
// Test relationl crypto pairs with with similar names
result = IsRelatablePairs(pair.NewCurrencyPair("XBT", "LTC"), pair.NewCurrencyPair("BTC", "LTC"), false)
if !result {
t.Fatal("Unexpected result")
}
// Test relationl crypto pairs with different ordering and similar names
result = IsRelatablePairs(pair.NewCurrencyPair("LTC", "XBT"), pair.NewCurrencyPair("BTC", "LTC"), false)
if !result {
t.Fatal("Unexpected result")
}
}
func TestGetRelatableCryptocurrencies(t *testing.T) {
SetupTestHelpers(t)
p := GetRelatableCryptocurrencies(pair.NewCurrencyPair("BTC", "LTC"))
if !pair.Contains(p, pair.NewCurrencyPair("BTC", "ETH"), true) {
t.Fatal("Unexpected result")
}
backup := currency.CryptoCurrencies
currency.CryptoCurrencies = append(currency.CryptoCurrencies, "BTC")
p = GetRelatableCryptocurrencies(pair.NewCurrencyPair("BTC", "LTC"))
if !pair.Contains(p, pair.NewCurrencyPair("BTC", "ETH"), true) {
t.Fatal("Unexpected result")
}
currency.CryptoCurrencies = backup
}
func TestGetRelatableFiatCurrencies(t *testing.T) {
SetupTestHelpers(t)
p := GetRelatableFiatCurrencies(pair.NewCurrencyPair("BTC", "USD"))
if !pair.Contains(p, pair.NewCurrencyPair("BTC", "EUR"), true) {
t.Fatal("Unexpected result")
}
backup := currency.FiatCurrencies
currency.FiatCurrencies = append(currency.FiatCurrencies, "USD")
p = GetRelatableFiatCurrencies(pair.NewCurrencyPair("BTC", "USD"))
if !pair.Contains(p, pair.NewCurrencyPair("BTC", "ZAR"), true) {
t.Fatal("Unexpected result")
}
currency.FiatCurrencies = backup
}
func TestMapCurrenciesByExchange(t *testing.T) {
SetupTestHelpers(t)
var pairs []pair.CurrencyPair
pairs = append(pairs, pair.NewCurrencyPair("BTC", "USD"))
pairs = append(pairs, pair.NewCurrencyPair("BTC", "EUR"))
result := MapCurrenciesByExchange(pairs, true)
pairs, ok := result["Bitstamp"]
if !ok {
t.Fatal("Unexpected result")
}
log.Println(pairs)
if len(pairs) != 2 {
t.Fatal("Unexpected result")
}
}
func TestGetExchangeNamesByCurrency(t *testing.T) {
SetupTestHelpers(t)
result := GetExchangeNamesByCurrency(pair.NewCurrencyPair("BTC", "USD"), true)
if !common.StringDataCompare(result, "Bitstamp") {
t.Fatal("Unexpected result")
}
result = GetExchangeNamesByCurrency(pair.NewCurrencyPair("BTC", "JPY"), true)
if !common.StringDataCompare(result, "Bitflyer") {
t.Fatal("Unexpected result")
}
result = GetExchangeNamesByCurrency(pair.NewCurrencyPair("blah", "JPY"), true)
if len(result) > 0 {
t.Fatal("Unexpected result")
}
}
func TestGetSpecificOrderbook(t *testing.T) {
SetupTestHelpers(t)
LoadExchange("Bitstamp", false, nil)
p := pair.NewCurrencyPair("BTC", "USD")
bids := []orderbook.Item{}
bids = append(bids, orderbook.Item{Price: 1000, Amount: 1})
orderbook.ProcessOrderbook("Bitstamp", p, orderbook.Base{Pair: p, Bids: bids}, ticker.Spot)
ob, err := GetSpecificOrderbook("BTCUSD", "Bitstamp", ticker.Spot)
if err != nil {
t.Fatal(err)
}
if ob.Bids[0].Price != 1000 {
t.Fatal("Unexpected result")
}
ob, err = GetSpecificOrderbook("ETHLTC", "Bitstamp", ticker.Spot)
if err == nil {
t.Fatal("Unexpected result")
}
UnloadExchange("Bitstamp")
}
func TestGetSpecificTicker(t *testing.T) {
SetupTestHelpers(t)
LoadExchange("Bitstamp", false, nil)
p := pair.NewCurrencyPair("BTC", "USD")
ticker.ProcessTicker("Bitstamp", p, ticker.Price{Last: 1000}, ticker.Spot)
tick, err := GetSpecificTicker("BTCUSD", "Bitstamp", ticker.Spot)
if err != nil {
t.Fatal(err)
}
if tick.Last != 1000 {
t.Fatal("Unexpected result")
}
tick, err = GetSpecificTicker("ETHLTC", "Bitstamp", ticker.Spot)
if err == nil {
t.Fatal("Unexpected result")
}
UnloadExchange("Bitstamp")
}
func TestGetCollatedExchangeAccountInfoByCoin(t *testing.T) {
SetupTestHelpers(t)
exchangeInfo := []exchange.AccountInfo{}
var info exchange.AccountInfo
info.Exchange = "Bitfinex"
info.Accounts = append(info.Accounts,
exchange.Account{
Currencies: []exchange.AccountCurrencyInfo{
{
CurrencyName: "BTC",
TotalValue: 100,
Hold: 0,
},
},
})
exchangeInfo = append(exchangeInfo, info)
info.Exchange = "Bitstamp"
info.Accounts = append(info.Accounts,
exchange.Account{
Currencies: []exchange.AccountCurrencyInfo{
{
CurrencyName: "LTC",
TotalValue: 100,
Hold: 0,
},
},
})
exchangeInfo = append(exchangeInfo, info)
result := GetCollatedExchangeAccountInfoByCoin(exchangeInfo)
if len(result) == 0 {
t.Fatal("Unexpected result")
}
amount, ok := result["BTC"]
if !ok {
t.Fatal("Expected currency was not found in result map")
}
if amount.TotalValue != 200 {
t.Fatal("Unexpected result")
}
_, ok = result["ETH"]
if ok {
t.Fatal("Unexpected result")
}
}
func TestGetAccountCurrencyInfoByExchangeName(t *testing.T) {
SetupTestHelpers(t)
exchangeInfo := []exchange.AccountInfo{}
var info exchange.AccountInfo
info.Exchange = "Bitfinex"
info.Accounts = append(info.Accounts,
exchange.Account{
Currencies: []exchange.AccountCurrencyInfo{
{
CurrencyName: "BTC",
TotalValue: 100,
Hold: 0,
},
},
})
exchangeInfo = append(exchangeInfo, info)
result, err := GetAccountCurrencyInfoByExchangeName(exchangeInfo, "Bitfinex")
if err != nil {
t.Fatal(err)
}
if result.Exchange != "Bitfinex" {
t.Fatal("Unexepcted result")
}
_, err = GetAccountCurrencyInfoByExchangeName(exchangeInfo, "ASDF")
if err.Error() != exchange.ErrExchangeNotFound {
t.Fatal("Unexepcted result")
}
}
func TestGetExchangeHighestPriceByCurrencyPair(t *testing.T) {
SetupTestHelpers(t)
p := pair.NewCurrencyPair("BTC", "USD")
stats.Add("Bitfinex", p, ticker.Spot, 1000, 10000)
stats.Add("Bitstamp", p, ticker.Spot, 1337, 10000)
exchange, err := GetExchangeHighestPriceByCurrencyPair(p, ticker.Spot)
if err != nil {
t.Error(err)
}
if exchange != "Bitstamp" {
t.Error("Unexpected result")
}
_, err = GetExchangeHighestPriceByCurrencyPair(pair.NewCurrencyPair("BTC", "AUD"), ticker.Spot)
if err == nil {
t.Error("Unexpected result")
}
}
func TestGetExchangeLowestPriceByCurrencyPair(t *testing.T) {
SetupTestHelpers(t)
p := pair.NewCurrencyPair("BTC", "USD")
stats.Add("Bitfinex", p, ticker.Spot, 1000, 10000)
stats.Add("Bitstamp", p, ticker.Spot, 1337, 10000)
exchange, err := GetExchangeLowestPriceByCurrencyPair(p, ticker.Spot)
if err != nil {
t.Error(err)
}
if exchange != "Bitfinex" {
t.Error("Unexpected result")
}
_, err = GetExchangeLowestPriceByCurrencyPair(pair.NewCurrencyPair("BTC", "AUD"), ticker.Spot)
if err == nil {
t.Error("Unexpected reuslt")
}
}