mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-07 23:16:53 +00:00
FTX: Add REST staking and basic subaccount functionality (#692)
* Add FTX staking, missing margin APIs and basic subaccount support * Fix backtester tests and add optional subaccount support to exchange_wrapper_issues tool * subAccount to subaccount * Fix TyPo * Expand test coverage * Address nitterinos * Fix typos * Remove unusued error type
This commit is contained in:
@@ -23,6 +23,7 @@ import (
|
||||
const (
|
||||
apiKey = ""
|
||||
apiSecret = ""
|
||||
subaccount = ""
|
||||
canManipulateRealOrders = false
|
||||
spotPair = "FTT/BTC"
|
||||
futuresPair = "DOGE-PERP"
|
||||
@@ -55,6 +56,7 @@ func TestMain(m *testing.M) {
|
||||
exchCfg.API.AuthenticatedWebsocketSupport = true
|
||||
exchCfg.API.Credentials.Key = apiKey
|
||||
exchCfg.API.Credentials.Secret = apiSecret
|
||||
exchCfg.API.Credentials.Subaccount = subaccount
|
||||
f.Websocket = sharedtestvalues.NewTestWebsocket()
|
||||
err = f.Setup(exchCfg)
|
||||
if err != nil {
|
||||
@@ -310,10 +312,32 @@ func TestGetMarginMarketInfo(t *testing.T) {
|
||||
|
||||
func TestGetMarginBorrowHistory(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tmNow := time.Now()
|
||||
_, err := f.GetMarginBorrowHistory(tmNow.AddDate(0, 0, 1), tmNow)
|
||||
if !errors.Is(err, errStartTimeCannotBeAfterEndTime) {
|
||||
t.Errorf("expected %s, got %s", errStartTimeCannotBeAfterEndTime, err)
|
||||
}
|
||||
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip()
|
||||
}
|
||||
_, err := f.GetMarginBorrowHistory()
|
||||
_, err = f.GetMarginBorrowHistory(tmNow.AddDate(0, 0, -1), tmNow)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetMarginMarketLendingHistory(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tmNow := time.Now()
|
||||
_, err := f.GetMarginMarketLendingHistory(currency.USD, tmNow.AddDate(0, 0, 1), tmNow)
|
||||
if !errors.Is(err, errStartTimeCannotBeAfterEndTime) {
|
||||
t.Errorf("expected %s, got %s", errStartTimeCannotBeAfterEndTime, err)
|
||||
}
|
||||
|
||||
_, err = f.GetMarginMarketLendingHistory(currency.USD, tmNow.AddDate(0, 0, -1), tmNow)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -321,10 +345,17 @@ func TestGetMarginBorrowHistory(t *testing.T) {
|
||||
|
||||
func TestGetMarginLendingHistory(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tmNow := time.Now()
|
||||
_, err := f.GetMarginLendingHistory(currency.USD, tmNow.AddDate(0, 0, 1), tmNow)
|
||||
if !errors.Is(err, errStartTimeCannotBeAfterEndTime) {
|
||||
t.Errorf("expected %s, got %s", errStartTimeCannotBeAfterEndTime, err)
|
||||
}
|
||||
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip()
|
||||
}
|
||||
_, err := f.GetMarginLendingHistory()
|
||||
_, err = f.GetMarginLendingHistory(currency.USD, tmNow.AddDate(0, 0, -1), tmNow)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -357,7 +388,7 @@ func TestSubmitLendingOffer(t *testing.T) {
|
||||
if !areTestAPIKeysSet() || !canManipulateRealOrders {
|
||||
t.Skip()
|
||||
}
|
||||
if err := f.SubmitLendingOffer("bTc", 0.1, 500); err != nil {
|
||||
if err := f.SubmitLendingOffer(currency.NewCode("bTc"), 0.1, 500); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
@@ -367,7 +398,7 @@ func TestFetchDepositAddress(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip()
|
||||
}
|
||||
_, err := f.FetchDepositAddress("tUsD")
|
||||
_, err := f.FetchDepositAddress(currency.NewCode("tUsD"))
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -400,7 +431,7 @@ func TestWithdraw(t *testing.T) {
|
||||
if !areTestAPIKeysSet() || !canManipulateRealOrders {
|
||||
t.Skip("skipping test, either api keys or canManipulateRealOrders isnt set correctly")
|
||||
}
|
||||
_, err := f.Withdraw("BtC", core.BitcoinDonationAddress, "", "", "957378", 0.0009)
|
||||
_, err := f.Withdraw(currency.NewCode("bTc"), core.BitcoinDonationAddress, "", "", "957378", 0.0009)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -735,7 +766,7 @@ func TestCreateQuoteRequest(t *testing.T) {
|
||||
if !areTestAPIKeysSet() || !canManipulateRealOrders {
|
||||
t.Skip("skipping test, either api keys or canManipulateRealOrders isnt set correctly")
|
||||
}
|
||||
_, err := f.CreateQuoteRequest(currency.BTC.String(), "call", order.Buy.Lower(), 1593140400, "", 10, 10, 5, 0, false)
|
||||
_, err := f.CreateQuoteRequest(currency.BTC, "call", order.Buy.Lower(), 1593140400, "", 10, 10, 5, 0, false)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -1296,7 +1327,7 @@ func TestRequestForQuotes(t *testing.T) {
|
||||
if !areTestAPIKeysSet() || !canManipulateRealOrders {
|
||||
t.Skip("skipping test, either api keys or canManipulateRealOrders isnt set correctly")
|
||||
}
|
||||
_, err := f.RequestForQuotes("BtC", "UsD", 0.5)
|
||||
_, err := f.RequestForQuotes(currency.NewCode("BtC"), currency.NewCode("UsD"), 0.5)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -1564,3 +1595,80 @@ func TestSubaccountTransfer(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetStakes(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("skipping test, api keys not set")
|
||||
}
|
||||
_, err := f.GetStakes()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetUnstakeRequests(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("skipping test, api keys not set")
|
||||
}
|
||||
_, err := f.GetUnstakeRequests()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetStakeBalances(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("skipping test, api keys not set")
|
||||
}
|
||||
_, err := f.GetStakeBalances()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnstakeRequest(t *testing.T) {
|
||||
if !areTestAPIKeysSet() || !canManipulateRealOrders {
|
||||
t.Skip("skipping test, either api keys or canManipulateRealOrders isn't set")
|
||||
}
|
||||
r, err := f.UnstakeRequest(currency.FTT, 0.1)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
success, err := f.CancelUnstakeRequest(r.ID)
|
||||
if err != nil || !success {
|
||||
t.Errorf("unable to cancel unstaking request: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCancelUnstakeRequest(t *testing.T) {
|
||||
if !areTestAPIKeysSet() || !canManipulateRealOrders {
|
||||
t.Skip("skipping test, either api keys or canManipulateRealOrders isn't set")
|
||||
}
|
||||
_, err := f.CancelUnstakeRequest(74351)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetStakingRewards(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("skipping test, api keys not set")
|
||||
}
|
||||
_, err := f.GetStakingRewards()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStakeRequest(t *testing.T) {
|
||||
if !areTestAPIKeysSet() || !canManipulateRealOrders {
|
||||
t.Skip("skipping test, either api keys or canManipulateRealOrders isn't set")
|
||||
}
|
||||
|
||||
// WARNING: This will lock up your funds for 14 days
|
||||
_, err := f.StakeRequest(currency.FTT, 0.1)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user