diff --git a/exchanges/exchange_test.go b/exchanges/exchange_test.go index 2e5e71d1..1a553bfb 100644 --- a/exchanges/exchange_test.go +++ b/exchanges/exchange_test.go @@ -303,7 +303,7 @@ func TestGetExchangeFormatCurrencySeperator(t *testing.T) { } expected := true - actual := GetExchangeFormatCurrencySeperator("BTCE") + actual := GetExchangeFormatCurrencySeperator("WEX") if expected != actual { t.Errorf("Test failed - TestGetExchangeFormatCurrencySeperator expected %v != actual %v", diff --git a/exchanges/wex/wex.go b/exchanges/wex/wex.go index ee5ba2fe..cf159166 100644 --- a/exchanges/wex/wex.go +++ b/exchanges/wex/wex.go @@ -92,15 +92,10 @@ func (w *WEX) GetFee() float64 { // GetInfo returns the WEX info func (w *WEX) GetInfo() (Info, error) { - req := fmt.Sprintf("%s/%s/%s/", wexAPIPublicURL, wexAPIPublicVersion, wexInfo) resp := Info{} - err := common.SendHTTPGetRequest(req, true, w.Verbose, &resp) + req := fmt.Sprintf("%s/%s/%s/", wexAPIPublicURL, wexAPIPublicVersion, wexInfo) - if err != nil { - return resp, err - } - - return resp, nil + return resp, common.SendHTTPGetRequest(req, true, w.Verbose, &resp) } // GetTicker returns a ticker for a specific currency @@ -111,12 +106,8 @@ func (w *WEX) GetTicker(symbol string) (map[string]Ticker, error) { response := Response{} req := fmt.Sprintf("%s/%s/%s/%s", wexAPIPublicURL, wexAPIPublicVersion, wexTicker, symbol) - err := common.SendHTTPGetRequest(req, true, w.Verbose, &response.Data) - if err != nil { - return nil, err - } - return response.Data, nil + return response.Data, common.SendHTTPGetRequest(req, true, w.Verbose, &response.Data) } // GetDepth returns the depth for a specific currency @@ -128,13 +119,8 @@ func (w *WEX) GetDepth(symbol string) (Orderbook, error) { response := Response{} req := fmt.Sprintf("%s/%s/%s/%s", wexAPIPublicURL, wexAPIPublicVersion, wexDepth, symbol) - err := common.SendHTTPGetRequest(req, true, w.Verbose, &response.Data) - if err != nil { - return Orderbook{}, err - } - - depth := response.Data[symbol] - return depth, nil + return response.Data[symbol], + common.SendHTTPGetRequest(req, true, w.Verbose, &response.Data) } // GetTrades returns the trades for a specific currency @@ -146,25 +132,16 @@ func (w *WEX) GetTrades(symbol string) ([]Trades, error) { response := Response{} req := fmt.Sprintf("%s/%s/%s/%s", wexAPIPublicURL, wexAPIPublicVersion, wexTrades, symbol) - err := common.SendHTTPGetRequest(req, true, w.Verbose, &response.Data) - if err != nil { - return nil, err - } - - trades := response.Data[symbol] - return trades, nil + return response.Data[symbol], + common.SendHTTPGetRequest(req, true, w.Verbose, &response.Data) } // GetAccountInfo returns a users account info func (w *WEX) GetAccountInfo() (AccountInfo, error) { var result AccountInfo - err := w.SendAuthenticatedHTTPRequest(wexAccountInfo, url.Values{}, &result) - if err != nil { - return result, err - } - - return result, nil + return result, + w.SendAuthenticatedHTTPRequest(wexAccountInfo, url.Values{}, &result) } // GetActiveOrders returns the active orders for a specific currency @@ -173,13 +150,8 @@ func (w *WEX) GetActiveOrders(pair string) (map[string]ActiveOrders, error) { req.Add("pair", pair) var result map[string]ActiveOrders - err := w.SendAuthenticatedHTTPRequest(wexActiveOrders, req, &result) - if err != nil { - return result, err - } - - return result, nil + return result, w.SendAuthenticatedHTTPRequest(wexActiveOrders, req, &result) } // GetOrderInfo returns the order info for a specific order ID @@ -188,13 +160,8 @@ func (w *WEX) GetOrderInfo(OrderID int64) (map[string]OrderInfo, error) { req.Add("order_id", strconv.FormatInt(OrderID, 10)) var result map[string]OrderInfo - err := w.SendAuthenticatedHTTPRequest(wexOrderInfo, req, &result) - if err != nil { - return result, err - } - - return result, nil + return result, w.SendAuthenticatedHTTPRequest(wexOrderInfo, req, &result) } // CancelOrder cancels an order for a specific order ID @@ -221,13 +188,9 @@ func (w *WEX) Trade(pair, orderType string, amount, price float64) (int64, error req.Add("rate", strconv.FormatFloat(price, 'f', -1, 64)) var result Trade - err := w.SendAuthenticatedHTTPRequest(wexTrade, req, &result) - if err != nil { - return 0, err - } - - return int64(result.OrderID), nil + return int64(result.OrderID), + w.SendAuthenticatedHTTPRequest(wexTrade, req, &result) } // GetTransactionHistory returns the transaction history @@ -242,13 +205,9 @@ func (w *WEX) GetTransactionHistory(TIDFrom, Count, TIDEnd int64, order, since, req.Add("end", end) var result map[string]TransHistory - err := w.SendAuthenticatedHTTPRequest(wexTransactionHistory, req, &result) - if err != nil { - return result, err - } - - return result, nil + return result, + w.SendAuthenticatedHTTPRequest(wexTransactionHistory, req, &result) } // GetTradeHistory returns the trade history @@ -264,13 +223,8 @@ func (w *WEX) GetTradeHistory(TIDFrom, Count, TIDEnd int64, order, since, end, p req.Add("pair", pair) var result map[string]TradeHistory - err := w.SendAuthenticatedHTTPRequest(wexTradeHistory, req, &result) - if err != nil { - return result, err - } - - return result, nil + return result, w.SendAuthenticatedHTTPRequest(wexTradeHistory, req, &result) } // WithdrawCoins withdraws coins for a specific coin @@ -281,12 +235,8 @@ func (w *WEX) WithdrawCoins(coin string, amount float64, address string) (Withdr req.Add("address", address) var result WithdrawCoins - err := w.SendAuthenticatedHTTPRequest(wexWithdrawCoin, req, &result) - if err != nil { - return result, err - } - return result, nil + return result, w.SendAuthenticatedHTTPRequest(wexWithdrawCoin, req, &result) } // CoinDepositAddress returns the deposit address for a specific currency @@ -295,13 +245,9 @@ func (w *WEX) CoinDepositAddress(coin string) (string, error) { req.Add("coinName", coin) var result CoinDepositAddress - err := w.SendAuthenticatedHTTPRequest(wexCoinDepositAddress, req, &result) - if err != nil { - return "", nil - } - - return result.Address, nil + return result.Address, + w.SendAuthenticatedHTTPRequest(wexCoinDepositAddress, req, &result) } // CreateCoupon creates an exchange coupon for a sepcific currency @@ -311,13 +257,8 @@ func (w *WEX) CreateCoupon(currency string, amount float64) (CreateCoupon, error req.Add("amount", strconv.FormatFloat(amount, 'f', -1, 64)) var result CreateCoupon - err := w.SendAuthenticatedHTTPRequest(wexCreateCoupon, req, &result) - if err != nil { - return result, err - } - - return result, nil + return result, w.SendAuthenticatedHTTPRequest(wexCreateCoupon, req, &result) } // RedeemCoupon redeems an exchange coupon @@ -326,13 +267,8 @@ func (w *WEX) RedeemCoupon(coupon string) (RedeemCoupon, error) { req.Add("coupon", coupon) var result RedeemCoupon - err := w.SendAuthenticatedHTTPRequest(wexRedeemCoupon, req, &result) - if err != nil { - return result, err - } - - return result, nil + return result, w.SendAuthenticatedHTTPRequest(wexRedeemCoupon, req, &result) } // SendAuthenticatedHTTPRequest sends an authenticated HTTP request to WEX @@ -362,14 +298,12 @@ func (w *WEX) SendAuthenticatedHTTPRequest(method string, values url.Values, res headers["Content-Type"] = "application/x-www-form-urlencoded" resp, err := common.SendHTTPRequest("POST", wexAPIPrivateURL, headers, strings.NewReader(encoded)) - if err != nil { return err } response := Response{} err = common.JSONDecode([]byte(resp), &response) - if err != nil { return err } @@ -379,15 +313,9 @@ func (w *WEX) SendAuthenticatedHTTPRequest(method string, values url.Values, res } JSONEncoded, err := common.JSONEncode(response.Return) - if err != nil { return err } - err = common.JSONDecode(JSONEncoded, &result) - - if err != nil { - return err - } - return nil + return common.JSONDecode(JSONEncoded, &result) } diff --git a/exchanges/wex/wex_test.go b/exchanges/wex/wex_test.go new file mode 100644 index 00000000..200e5270 --- /dev/null +++ b/exchanges/wex/wex_test.go @@ -0,0 +1,144 @@ +package wex + +import ( + "testing" + + "github.com/thrasher-/gocryptotrader/config" +) + +var w WEX + +// Please supply your own keys for better unit testing +const ( + apiKey = "" + apiSecret = "" +) + +func TestSetDefaults(t *testing.T) { + w.SetDefaults() +} + +func TestSetup(t *testing.T) { + wexConfig := config.GetConfig() + wexConfig.LoadConfig("../../testdata/configtest.dat") + conf, err := wexConfig.GetExchangeConfig("WEX") + if err != nil { + t.Error("Test Failed - WEX init error") + } + conf.APIKey = apiKey + conf.APISecret = apiSecret + conf.AuthenticatedAPISupport = true + + w.Setup(conf) +} + +func TestGetFee(t *testing.T) { + if w.GetFee() != 0.2 { + t.Error("Test Failed - GetFee() error") + } +} + +func TestGetInfo(t *testing.T) { + _, err := w.GetInfo() + if err != nil { + t.Error("Test Failed - GetInfo() error") + } +} + +func TestGetTicker(t *testing.T) { + _, err := w.GetTicker("btc_usd") + if err != nil { + t.Error("Test Failed - GetTicker() error", err) + } +} + +func TestGetDepth(t *testing.T) { + _, err := w.GetDepth("btc_usd") + if err != nil { + t.Error("Test Failed - GetDepth() error", err) + } +} + +func TestGetTrades(t *testing.T) { + _, err := w.GetTrades("btc_usd") + if err != nil { + t.Error("Test Failed - GetTrades() error", err) + } +} + +func TestGetAccountInfo(t *testing.T) { + _, err := w.GetAccountInfo() + if err == nil { + t.Error("Test Failed - GetAccountInfo() error", err) + } +} + +func TestGetActiveOrders(t *testing.T) { + _, err := w.GetActiveOrders("") + if err == nil { + t.Error("Test Failed - GetActiveOrders() error", err) + } +} + +func TestGetOrderInfo(t *testing.T) { + _, err := w.GetOrderInfo(6196974) + if err == nil { + t.Error("Test Failed - GetOrderInfo() error", err) + } +} + +func TestCancelOrder(t *testing.T) { + _, err := w.CancelOrder(1337) + if err == nil { + t.Error("Test Failed - CancelOrder() error", err) + } +} + +func TestTrade(t *testing.T) { + _, err := w.Trade("", "buy", 0, 0) + if err == nil { + t.Error("Test Failed - Trade() error", err) + } +} + +func TestGetTransactionHistory(t *testing.T) { + _, err := w.GetTransactionHistory(0, 0, 0, "", "", "") + if err == nil { + t.Error("Test Failed - GetTransactionHistory() error", err) + } +} + +func TestGetTradeHistory(t *testing.T) { + _, err := w.GetTradeHistory(0, 0, 0, "", "", "", "") + if err == nil { + t.Error("Test Failed - GetTradeHistory() error", err) + } +} + +func TestWithdrawCoins(t *testing.T) { + _, err := w.WithdrawCoins("", 0, "") + if err == nil { + t.Error("Test Failed - WithdrawCoins() error", err) + } +} + +func TestCoinDepositAddress(t *testing.T) { + _, err := w.CoinDepositAddress("btc") + if err == nil { + t.Error("Test Failed - WithdrawCoins() error", err) + } +} + +func TestCreateCoupon(t *testing.T) { + _, err := w.CreateCoupon("bla", 0) + if err == nil { + t.Error("Test Failed - CreateCoupon() error", err) + } +} + +func TestRedeemCoupon(t *testing.T) { + _, err := w.RedeemCoupon("bla") + if err == nil { + t.Error("Test Failed - RedeemCoupon() error", err) + } +} diff --git a/exchanges/wex/wex_types.go b/exchanges/wex/wex_types.go index a83b654e..969b46e7 100644 --- a/exchanges/wex/wex_types.go +++ b/exchanges/wex/wex_types.go @@ -1,5 +1,18 @@ package wex +// Response is a generic struct used for exchange API request result +type Response struct { + Return interface{} `json:"return"` + Success int `json:"success"` + Error string `json:"error"` +} + +// Info holds server time and pair information +type Info struct { + ServerTime int64 `json:"server_time"` + Pairs map[string]Pair `json:"pairs"` +} + // Ticker stores the ticker information type Ticker struct { High float64 @@ -28,11 +41,14 @@ type Trades struct { Timestamp int64 `json:"timestamp"` } -// Response is a generic struct used for exchange API request result -type Response struct { - Return interface{} `json:"return"` - Success int `json:"success"` - Error string `json:"error"` +// ActiveOrders stores active order information +type ActiveOrders struct { + Pair string `json:"pair"` + Type string `json:"sell"` + Amount float64 `json:"amount"` + Rate float64 `json:"rate"` + TimestampCreated float64 `json:"time_created"` + Status int `json:"status"` } // Pair holds pair information @@ -45,12 +61,6 @@ type Pair struct { Fee float64 `json:"fee"` } -// Info holds server time and pair information -type Info struct { - ServerTime int64 `json:"server_time"` - Pairs map[string]Pair `json:"pairs"` -} - // AccountInfo stores the account information for a user type AccountInfo struct { Funds map[string]float64 `json:"funds"` @@ -64,16 +74,6 @@ type AccountInfo struct { TransactionCount int `json:"transaction_count"` } -// ActiveOrders stores active order information -type ActiveOrders struct { - Pair string `json:"pair"` - Type string `json:"sell"` - Amount float64 `json:"amount"` - Rate float64 `json:"rate"` - TimestampCreated float64 `json:"time_created"` - Status int `json:"status"` -} - // OrderInfo stores order information type OrderInfo struct { Pair string `json:"pair"` diff --git a/testdata/configtest.dat b/testdata/configtest.dat index 46541e00..2b8118b6 100644 --- a/testdata/configtest.dat +++ b/testdata/configtest.dat @@ -163,7 +163,7 @@ } }, { - "Name": "BTCE", + "Name": "WEX", "Enabled": true, "Verbose": false, "Websocket": false, @@ -436,4 +436,4 @@ } } ] -} \ No newline at end of file +}