sharedtestvalues: Add helper functions and implement throughout exchange tests (#1163)

* exchanges/sharedtestvalues: implement new functions to handle test skipping and announcements for standardising.

* exchanges: fin test impl.

* linter: fixes

* exchange_template: fix test

* allocate so it doesn't make a panic at the disco

* glorious: nits

* glorious: nits

* Update exchanges/sharedtestvalues/sharedtestvalues.go

Co-authored-by: Scott <gloriousCode@users.noreply.github.com>

* Update exchanges/sharedtestvalues/sharedtestvalues.go

Co-authored-by: Scott <gloriousCode@users.noreply.github.com>

* glorious: nits

* linter: fix

* linter: shhhh

---------

Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io>
Co-authored-by: Scott <gloriousCode@users.noreply.github.com>
This commit is contained in:
Ryan O'Hara-Reid
2023-04-28 13:05:42 +10:00
committed by GitHub
parent 492ea20f21
commit b20cf75d13
63 changed files with 2115 additions and 3161 deletions

View File

@@ -17,10 +17,11 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
"github.com/thrasher-corp/gocryptotrader/exchanges/sharedtestvalues"
"github.com/thrasher-corp/gocryptotrader/portfolio/withdraw"
)
var i ItBit
var i = &ItBit{}
// Please provide your own keys to do proper testing
const (
@@ -194,7 +195,7 @@ func TestGetFeeByTypeOfflineTradeFee(t *testing.T) {
if err != nil {
t.Fatal(err)
}
if !areTestAPIKeysSet() {
if !sharedtestvalues.AreAPICredentialsSet(i) {
if feeBuilder.FeeType != exchange.OfflineTradeFee {
t.Errorf("Expected %v, received %v", exchange.OfflineTradeFee, feeBuilder.FeeType)
}
@@ -273,6 +274,8 @@ func TestGetFee(t *testing.T) {
}
func TestFormatWithdrawPermissions(t *testing.T) {
t.Parallel()
expectedResult := exchange.WithdrawCryptoViaWebsiteOnlyText + " & " + exchange.WithdrawFiatViaWebsiteOnlyText
withdrawPermissions := i.FormatWithdrawPermissions()
if withdrawPermissions != expectedResult {
@@ -281,6 +284,8 @@ func TestFormatWithdrawPermissions(t *testing.T) {
}
func TestGetActiveOrders(t *testing.T) {
t.Parallel()
var getOrdersRequest = order.GetOrdersRequest{
Type: order.AnyType,
AssetType: asset.Spot,
@@ -288,14 +293,16 @@ func TestGetActiveOrders(t *testing.T) {
}
_, err := i.GetActiveOrders(context.Background(), &getOrdersRequest)
if areTestAPIKeysSet() && err != nil {
if sharedtestvalues.AreAPICredentialsSet(i) && err != nil {
t.Errorf("Could not get open orders: %s", err)
} else if !areTestAPIKeysSet() && err == nil {
} else if !sharedtestvalues.AreAPICredentialsSet(i) && err == nil {
t.Error("Expecting an error when no keys are set")
}
}
func TestGetOrderHistory(t *testing.T) {
t.Parallel()
var getOrdersRequest = order.GetOrdersRequest{
Type: order.AnyType,
AssetType: asset.Spot,
@@ -303,23 +310,20 @@ func TestGetOrderHistory(t *testing.T) {
}
_, err := i.GetOrderHistory(context.Background(), &getOrdersRequest)
if areTestAPIKeysSet() && err != nil {
if sharedtestvalues.AreAPICredentialsSet(i) && err != nil {
t.Errorf("Could not get order history: %s", err)
} else if !areTestAPIKeysSet() && err == nil {
} else if !sharedtestvalues.AreAPICredentialsSet(i) && err == nil {
t.Error("Expecting an error when no keys are set")
}
}
// Any tests below this line have the ability to impact your orders on the exchange. Enable canManipulateRealOrders to run them
// ----------------------------------------------------------------------------------------------------------------------------
func areTestAPIKeysSet() bool {
return i.ValidateAPICredentials(i.GetDefaultCredentials()) == nil
}
func TestSubmitOrder(t *testing.T) {
if areTestAPIKeysSet() && !canManipulateRealOrders {
t.Skip("API keys set, canManipulateRealOrders false, skipping test")
}
t.Parallel()
sharedtestvalues.SkipTestIfCannotManipulateOrders(t, i, canManipulateRealOrders)
var orderSubmission = &order.Submit{
Exchange: i.Name,
@@ -335,17 +339,16 @@ func TestSubmitOrder(t *testing.T) {
AssetType: asset.Spot,
}
response, err := i.SubmitOrder(context.Background(), orderSubmission)
if areTestAPIKeysSet() && (err != nil || response.Status != order.New) {
if sharedtestvalues.AreAPICredentialsSet(i) && (err != nil || response.Status != order.New) {
t.Errorf("Order failed to be placed: %v", err)
} else if !areTestAPIKeysSet() && err == nil {
} else if !sharedtestvalues.AreAPICredentialsSet(i) && err == nil {
t.Error("Expecting an error when no keys are set")
}
}
func TestCancelExchangeOrder(t *testing.T) {
if areTestAPIKeysSet() && !canManipulateRealOrders {
t.Skip("API keys set, canManipulateRealOrders false, skipping test")
}
t.Parallel()
sharedtestvalues.SkipTestIfCannotManipulateOrders(t, i, canManipulateRealOrders)
currencyPair := currency.NewPair(currency.LTC, currency.BTC)
var orderCancellation = &order.Cancel{
@@ -358,18 +361,17 @@ func TestCancelExchangeOrder(t *testing.T) {
err := i.CancelOrder(context.Background(), orderCancellation)
if !areTestAPIKeysSet() && err == nil {
if !sharedtestvalues.AreAPICredentialsSet(i) && err == nil {
t.Error("Expecting an error when no keys are set")
}
if areTestAPIKeysSet() && err != nil {
if sharedtestvalues.AreAPICredentialsSet(i) && err != nil {
t.Errorf("Could not cancel orders: %v", err)
}
}
func TestCancelAllExchangeOrders(t *testing.T) {
if areTestAPIKeysSet() && !canManipulateRealOrders {
t.Skip("API keys set, canManipulateRealOrders false, skipping test")
}
t.Parallel()
sharedtestvalues.SkipTestIfCannotManipulateOrders(t, i, canManipulateRealOrders)
currencyPair := currency.NewPair(currency.LTC, currency.BTC)
var orderCancellation = &order.Cancel{
@@ -382,10 +384,10 @@ func TestCancelAllExchangeOrders(t *testing.T) {
resp, err := i.CancelAllOrders(context.Background(), orderCancellation)
if !areTestAPIKeysSet() && err == nil {
if !sharedtestvalues.AreAPICredentialsSet(i) && err == nil {
t.Error("Expecting an error when no keys are set")
}
if areTestAPIKeysSet() && err != nil {
if sharedtestvalues.AreAPICredentialsSet(i) && err != nil {
t.Errorf("Could not cancel orders: %v", err)
}
@@ -395,18 +397,19 @@ func TestCancelAllExchangeOrders(t *testing.T) {
}
func TestGetAccountInfo(t *testing.T) {
if areTestAPIKeysSet() {
_, err := i.UpdateAccountInfo(context.Background(), asset.Spot)
if err == nil {
t.Error("GetAccountInfo() Expected error")
}
t.Parallel()
sharedtestvalues.SkipTestIfCredentialsUnset(t, i)
_, err := i.UpdateAccountInfo(context.Background(), asset.Spot)
if err == nil {
t.Error("GetAccountInfo() Expected error")
}
}
func TestModifyOrder(t *testing.T) {
if areTestAPIKeysSet() && !canManipulateRealOrders {
t.Skip("API keys set, canManipulateRealOrders false, skipping test")
}
t.Parallel()
sharedtestvalues.SkipTestIfCannotManipulateOrders(t, i, canManipulateRealOrders)
_, err := i.ModifyOrder(context.Background(), &order.Modify{AssetType: asset.Spot})
if err == nil {
t.Error("ModifyOrder() Expected error")
@@ -414,6 +417,9 @@ func TestModifyOrder(t *testing.T) {
}
func TestWithdraw(t *testing.T) {
t.Parallel()
sharedtestvalues.SkipTestIfCannotManipulateOrders(t, i, canManipulateRealOrders)
withdrawCryptoRequest := withdraw.Request{
Exchange: i.Name,
Amount: -1,
@@ -424,10 +430,6 @@ func TestWithdraw(t *testing.T) {
},
}
if areTestAPIKeysSet() && !canManipulateRealOrders {
t.Skip("API keys set, canManipulateRealOrders false, skipping test")
}
_, err := i.WithdrawCryptocurrencyFunds(context.Background(),
&withdrawCryptoRequest)
if err != common.ErrFunctionNotSupported {
@@ -436,9 +438,8 @@ func TestWithdraw(t *testing.T) {
}
func TestWithdrawFiat(t *testing.T) {
if areTestAPIKeysSet() && !canManipulateRealOrders {
t.Skip("API keys set, canManipulateRealOrders false, skipping test")
}
t.Parallel()
sharedtestvalues.SkipTestIfCannotManipulateOrders(t, i, canManipulateRealOrders)
var withdrawFiatRequest = withdraw.Request{}
_, err := i.WithdrawFiatFunds(context.Background(),
@@ -449,9 +450,8 @@ func TestWithdrawFiat(t *testing.T) {
}
func TestWithdrawInternationalBank(t *testing.T) {
if areTestAPIKeysSet() && !canManipulateRealOrders {
t.Skip("API keys set, canManipulateRealOrders false, skipping test")
}
t.Parallel()
sharedtestvalues.SkipTestIfCannotManipulateOrders(t, i, canManipulateRealOrders)
var withdrawFiatRequest = withdraw.Request{}
_, err := i.WithdrawFiatFundsToInternationalBank(context.Background(),

View File

@@ -666,9 +666,9 @@ func (i *ItBit) GetOrderHistory(ctx context.Context, req *order.GetOrdersRequest
return req.Filter(i.Name, orders), nil
}
// ValidateCredentials validates current credentials used for wrapper
// ValidateAPICredentials validates current credentials used for wrapper
// functionality
func (i *ItBit) ValidateCredentials(ctx context.Context, assetType asset.Item) error {
func (i *ItBit) ValidateAPICredentials(ctx context.Context, assetType asset.Item) error {
_, err := i.UpdateAccountInfo(ctx, assetType)
return i.CheckTransientError(err)
}