Skip to content

Commit

Permalink
Add GetDepositMethod and GetDepositStatuses (#25)
Browse files Browse the repository at this point in the history
Co-authored-by: Dmitry Pugats <[email protected]>
  • Loading branch information
r1se and Dmitry Pugats authored Apr 7, 2021
1 parent 5fae33b commit 01a2e8d
Show file tree
Hide file tree
Showing 3 changed files with 163 additions and 12 deletions.
35 changes: 35 additions & 0 deletions rest/private_methods.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,41 @@ func (api *Kraken) GetTradesHistory(tradeType string, needTrades bool, start int
return response, nil
}

// GetDepositMethods - returns deposit methods
func (api *Kraken) GetDepositMethods(assets ...string) ([]DepositMethods, error) {

data := url.Values{}
if len(assets) > 0 {
data.Add("asset", strings.Join(assets, ","))
} else {
data = nil
}

response := make([]DepositMethods, 0)
if err := api.request("DepositMethods", true, data, &response); err != nil {
return response, err
}
return response, nil
}

// GetDepositStatus - returns deposit status
func (api *Kraken) GetDepositStatus(method string, assets ...string) ([]DepositStatuses, error) {

data := url.Values{}
if len(assets) > 0 {
data.Add("asset", strings.Join(assets, ","))
}

if len(method) > 0 {
data.Add("method", method)
}
response := make([]DepositStatuses, 0)
if err := api.request("DepositStatus", true, data, &response); err != nil {
return response, err
}
return response, nil
}

// QueryTrades - returns trades by IDs
func (api *Kraken) QueryTrades(trades bool, txIDs ...string) (map[string]PrivateTrade, error) {
data := url.Values{}
Expand Down
118 changes: 106 additions & 12 deletions rest/private_methods_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,114 @@ import (
)

var (
balancesJSON = []byte(`{"error":[],"result":{"ZUSD":"435.9135","USDT":"2.00000000","BSV":"0.0000053898"}}`)
tradeBalancesJSON = []byte(`{"error":[],"result":{"eb":"33.50","tb":"33.50","m":"23.77","n":"4.3750","c":"11.8999","v":"12.2","e":"32.1","mf":"33.1","ml":"12.97"}}`)
openOrdersJSON = []byte(`{"error":[],"result":{"open":{"OR3XZM-5EN2R-LS5X51":{"refid":null,"userref":null,"status":"open","opentm":1570622342.3552,"starttm":0,"expiretm":0,"descr":{"pair":"XBTEUR","type":"sell","ordertype":"limit","price":"7712.2","price2":"0","leverage":"4:1","order":"sell 1.10000000 XBTEUR @ limit 7712.2 with 4:1 leverage","close":""},"vol":"1.10000000","vol_exec":"0.00000000","cost":"0.00000","fee":"0.00000","price":"0.00000","stopprice":"0.00000","limitprice":"0.00000","misc":"","oflags":"fciq"}}}}`)
closedOrdersJSON = []byte(`{"error":[],"result":{"closed":{"OK46ER-A2BXK-YOLKE1":{"refid":null,"userref":null,"status":"canceled","reason":"User requested","opentm":1570623817.6537,"closetm":1570623823.9012,"starttm":0,"expiretm":0,"descr":{"pair":"ETHEUR","type":"buy","ordertype":"limit","price":"160.87","price2":"0","leverage":"4:1","order":"buy 21.00000000 ETHEUR @ limit 160.87 with 4:1 leverage","close":""},"vol":"21.00000000","vol_exec":"0.00000000","cost":"0.00000","fee":"0.00000","price":"0.00000","stopprice":"0.00000","limitprice":"0.00000","misc":"","oflags":"fciq"}},"count":20}}`)
queryOrdersJSON = []byte(`{"error":[],"result":{"OLNYE1-H3BBJ-JD2LGC":{"refid":null,"userref":null,"status":"canceled","reason":"User requested","opentm":1570623816.1101,"closetm":1570623819.639,"starttm":0,"expiretm":0,"descr":{"pair":"XBTUSD","type":"buy","ordertype":"limit","price":"7920.9","price2":"0","leverage":"4:1","order":"buy 1.10000000 XBTUSD @ limit 7920.9 with 4:1 leverage","close":""},"vol":"1.10000000","vol_exec":"0.00000000","cost":"0.00000","fee":"0.00000","price":"0.00000","stopprice":"0.00000","limitprice":"0.00000","misc":"","oflags":"fciq"}}}`)
tradeHistoryJSON = []byte(`{"error":[],"result":{"trades":{"TO3MMA-BSBGV-XUV4A1":{"ordertxid":"OSQQQ5-MBKL6-O4YYE1","postxid":"TYE7IH-QCG76-BVMCM1","pair":"XXBTZUSD","time":1570477513.2,"type":"buy","ordertype":"limit","price":"7000.60000","cost":"1000.38301","fee":"0.00000","vol":"0.2","margin":"320","misc":"closing"}},"count":1}}`)
queryTradesJSON = []byte(`{"error":[],"result":{"TO3MMA-BSBGV-XUV4A1":{"ordertxid":"OSQQQ5-MBKL6-O4YYE1","postxid":"TYE7IH-QCG76-BVMCM1","pair":"XXBTZUSD","time":1570477513.2,"type":"buy","ordertype":"limit","price":"7000.60000","cost":"1000.38301","fee":"0.00000","vol":"0.2","margin":"320","misc":"closing"}}}`)
openPositionsJSON = []byte(`{"error":[],"result":{"TYE7IH-QCG76-BVMCM1":{"ordertxid":"OK7SOC-SGF3O-F54S51","posstatus":"open","pair":"XXBTZUSD","time":1569513333.0361,"type":"buy","ordertype":"limit","cost":"570.39712","fee":"39","vol":"7","vol_closed":"6.66208817","margin":"9.2","terms":"0.0100% per 4 hours","rollovertm":"1570638129","misc":"","oflags":""}}}`)
getLedgersJSON = []byte(`{"error":[],"result":{"ledger":{"LGPNZQ-2SLSA-C7QCT1":{"refid":"TI2NBU-IICD2-BAVYO1","time":1570623111.9096,"type":"rollover","aclass":"currency","asset":"ZUSD","amount":"0.0000","fee":"0.7169","balance":"1.7326"}}}}`)
queryLedgerJSON = []byte(`{"error":[],"result":{"LTCH4T-LG5FS-MKGVD1":{"refid":"TYE7IH-QCG76-BVMCM1","time":1570551111.2568,"type":"rollover","aclass":"currency","asset":"ZUSD","amount":"0.0000","fee":"0.4640","balance":"1.3540"}}}`)
getTradeVolumeJSON = []byte(`{"error":[],"result":{"currency":"ZUSD","volume":"1000","fees":{"XXBTZUSD":{"fee":"0.1600","minfee":"0.1000","maxfee":"0.2600","nextfee":"0.1400","nextvolume":"2500000.0000","tiervolume":"1000000.0000"}},"fees_maker":{"XXBTZUSD":{"fee":"0.0600","minfee":"0.0000","maxfee":"0.1600","nextfee":"0.0400","nextvolume":"2500000.0000","tiervolume":"1000000.0000"}}}}`)
getWSTokenJSON = []byte(`{"error":[],"result":{"token": "test", "expires": 900}}`)
depositMethodsJSON = []byte(`{"error":[],"result":[{"method": "Ether (Hex)","limit": false,"fee": "0.0000000000","gen-address": true}]}`)
depositStatusesJSON = []byte(`{"error":[],"result":[{"method": "Ether (Hex)","aclass": "currency","asset": "XETH","refid": "sometest1","txid": "sometest2","info": "sometest3","amount": "6.91","fee": "0.0000000000","time": 1617014556,"status": "Success"}]}`)
balancesJSON = []byte(`{"error":[],"result":{"ZUSD":"435.9135","USDT":"2.00000000","BSV":"0.0000053898"}}`)
tradeBalancesJSON = []byte(`{"error":[],"result":{"eb":"33.50","tb":"33.50","m":"23.77","n":"4.3750","c":"11.8999","v":"12.2","e":"32.1","mf":"33.1","ml":"12.97"}}`)
openOrdersJSON = []byte(`{"error":[],"result":{"open":{"OR3XZM-5EN2R-LS5X51":{"refid":null,"userref":null,"status":"open","opentm":1570622342.3552,"starttm":0,"expiretm":0,"descr":{"pair":"XBTEUR","type":"sell","ordertype":"limit","price":"7712.2","price2":"0","leverage":"4:1","order":"sell 1.10000000 XBTEUR @ limit 7712.2 with 4:1 leverage","close":""},"vol":"1.10000000","vol_exec":"0.00000000","cost":"0.00000","fee":"0.00000","price":"0.00000","stopprice":"0.00000","limitprice":"0.00000","misc":"","oflags":"fciq"}}}}`)
closedOrdersJSON = []byte(`{"error":[],"result":{"closed":{"OK46ER-A2BXK-YOLKE1":{"refid":null,"userref":null,"status":"canceled","reason":"User requested","opentm":1570623817.6537,"closetm":1570623823.9012,"starttm":0,"expiretm":0,"descr":{"pair":"ETHEUR","type":"buy","ordertype":"limit","price":"160.87","price2":"0","leverage":"4:1","order":"buy 21.00000000 ETHEUR @ limit 160.87 with 4:1 leverage","close":""},"vol":"21.00000000","vol_exec":"0.00000000","cost":"0.00000","fee":"0.00000","price":"0.00000","stopprice":"0.00000","limitprice":"0.00000","misc":"","oflags":"fciq"}},"count":20}}`)
queryOrdersJSON = []byte(`{"error":[],"result":{"OLNYE1-H3BBJ-JD2LGC":{"refid":null,"userref":null,"status":"canceled","reason":"User requested","opentm":1570623816.1101,"closetm":1570623819.639,"starttm":0,"expiretm":0,"descr":{"pair":"XBTUSD","type":"buy","ordertype":"limit","price":"7920.9","price2":"0","leverage":"4:1","order":"buy 1.10000000 XBTUSD @ limit 7920.9 with 4:1 leverage","close":""},"vol":"1.10000000","vol_exec":"0.00000000","cost":"0.00000","fee":"0.00000","price":"0.00000","stopprice":"0.00000","limitprice":"0.00000","misc":"","oflags":"fciq"}}}`)
tradeHistoryJSON = []byte(`{"error":[],"result":{"trades":{"TO3MMA-BSBGV-XUV4A1":{"ordertxid":"OSQQQ5-MBKL6-O4YYE1","postxid":"TYE7IH-QCG76-BVMCM1","pair":"XXBTZUSD","time":1570477513.2,"type":"buy","ordertype":"limit","price":"7000.60000","cost":"1000.38301","fee":"0.00000","vol":"0.2","margin":"320","misc":"closing"}},"count":1}}`)
queryTradesJSON = []byte(`{"error":[],"result":{"TO3MMA-BSBGV-XUV4A1":{"ordertxid":"OSQQQ5-MBKL6-O4YYE1","postxid":"TYE7IH-QCG76-BVMCM1","pair":"XXBTZUSD","time":1570477513.2,"type":"buy","ordertype":"limit","price":"7000.60000","cost":"1000.38301","fee":"0.00000","vol":"0.2","margin":"320","misc":"closing"}}}`)
openPositionsJSON = []byte(`{"error":[],"result":{"TYE7IH-QCG76-BVMCM1":{"ordertxid":"OK7SOC-SGF3O-F54S51","posstatus":"open","pair":"XXBTZUSD","time":1569513333.0361,"type":"buy","ordertype":"limit","cost":"570.39712","fee":"39","vol":"7","vol_closed":"6.66208817","margin":"9.2","terms":"0.0100% per 4 hours","rollovertm":"1570638129","misc":"","oflags":""}}}`)
getLedgersJSON = []byte(`{"error":[],"result":{"ledger":{"LGPNZQ-2SLSA-C7QCT1":{"refid":"TI2NBU-IICD2-BAVYO1","time":1570623111.9096,"type":"rollover","aclass":"currency","asset":"ZUSD","amount":"0.0000","fee":"0.7169","balance":"1.7326"}}}}`)
queryLedgerJSON = []byte(`{"error":[],"result":{"LTCH4T-LG5FS-MKGVD1":{"refid":"TYE7IH-QCG76-BVMCM1","time":1570551111.2568,"type":"rollover","aclass":"currency","asset":"ZUSD","amount":"0.0000","fee":"0.4640","balance":"1.3540"}}}`)
getTradeVolumeJSON = []byte(`{"error":[],"result":{"currency":"ZUSD","volume":"1000","fees":{"XXBTZUSD":{"fee":"0.1600","minfee":"0.1000","maxfee":"0.2600","nextfee":"0.1400","nextvolume":"2500000.0000","tiervolume":"1000000.0000"}},"fees_maker":{"XXBTZUSD":{"fee":"0.0600","minfee":"0.0000","maxfee":"0.1600","nextfee":"0.0400","nextvolume":"2500000.0000","tiervolume":"1000000.0000"}}}}`)
getWSTokenJSON = []byte(`{"error":[],"result":{"token": "test", "expires": 900}}`)
)

func TestKraken_GetDepositMethods(t *testing.T) {
tests := []struct {
name string
err error
resp *http.Response
want []DepositMethods
wantErr bool
}{
{
name: "Kraken returns error",
err: ErrSomething,
resp: &http.Response{},
want: []DepositMethods{},
wantErr: true,
}, {
name: "Get Deposit Methods",
err: nil,
resp: &http.Response{
StatusCode: 200,
Body: ioutil.NopCloser(bytes.NewReader(depositMethodsJSON)),
},
want: []DepositMethods{DepositMethods{Method: "Ether (Hex)", Limit: false, Fee: "0.0000000000", GenAddress: true}},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
api := &Kraken{
client: &httpMock{
Error: tt.err,
Response: tt.resp,
},
}
got, err := api.GetDepositMethods()
if (err != nil) != tt.wantErr {
t.Errorf("Kraken.GetDepositMethods() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("Kraken.GetDepositMethods() = %v, want %v", got, tt.want)
}
})
}
}

func TestKraken_GetDepositStatuses(t *testing.T) {
tests := []struct {
name string
err error
resp *http.Response
want []DepositStatuses
wantErr bool
}{
{
name: "Kraken returns error",
err: ErrSomething,
resp: &http.Response{},
want: []DepositStatuses{},
wantErr: true,
}, {
name: "Get Deposit Statuses",
err: nil,
resp: &http.Response{
StatusCode: 200,
Body: ioutil.NopCloser(bytes.NewReader(depositStatusesJSON)),
},
want: []DepositStatuses{DepositStatuses{Method: "Ether (Hex)", Aclass: "currency", Asset: "XETH", Refid: "sometest1",
Txid: "sometest2", Info: "sometest3", Amount: "6.91", Fee: "0.0000000000", Time: 1617014556, Status: "Success"},
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
api := &Kraken{
client: &httpMock{
Error: tt.err,
Response: tt.resp,
},
}
got, err := api.GetDepositStatus("Ether (Hex)", "XETH")
if (err != nil) != tt.wantErr {
t.Errorf("Kraken.GetDepositMethods() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("Kraken.GetDepositMethods() = %v, want %v", got, tt.want)
}
})
}
}

func TestKraken_GetAccountBalances(t *testing.T) {
tests := []struct {
name string
Expand Down
22 changes: 22 additions & 0 deletions rest/responses.go
Original file line number Diff line number Diff line change
Expand Up @@ -648,6 +648,28 @@ type TradesHistoryResponse struct {
Count int64 `json:"count"`
}

// DepositMethods - respons on GetDepositMethods request
type DepositMethods struct {
Method string `json:"method"`
Limit bool `json:"limit"`
Fee string `json:"fee"`
GenAddress bool `json:"gen-address"`
}

// GetDepositStatus - respons on GetDepositMethods request
type DepositStatuses struct {
Method string `json:"method"`
Aclass string `json:"aclass"`
Asset string `json:"asset"`
Refid string `json:"refid"`
Txid string `json:"txid"`
Info string `json:"info"`
Amount string `json:"amount"`
Fee string `json:"fee"`
Time int `json:"time"`
Status string `json:"status"`
}

// PrivateTrade - structure of account's trades
type PrivateTrade struct {
OrderID string `json:"ordertxid"`
Expand Down

0 comments on commit 01a2e8d

Please sign in to comment.