All checks were successful
Continuous Integration / CI (push) Successful in 1m40s
Made lint tests pass
118 lines
3.3 KiB
Go
118 lines
3.3 KiB
Go
package tastytrade
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
func TestGetTransactions(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
|
|
_,_ = rw.Write([]byte(`{"context": "test", "data": {"items": [{"id": 1, "account-number": "123456", "symbol": "AAPL", "transaction-type": "buy"}]}}`))
|
|
}))
|
|
defer server.Close()
|
|
|
|
api := NewTastytradeAPI(server.URL)
|
|
resp, err := api.GetTransactions("123456", nil)
|
|
|
|
if err != nil {
|
|
t.Errorf("expected nil, got %v", err)
|
|
}
|
|
|
|
if resp.Context != "test" {
|
|
t.Errorf("expected %s, got %s", "test", resp.Context)
|
|
}
|
|
|
|
if len(resp.Data.Items) != 1 {
|
|
t.Errorf("expected %d, got %d", 1, len(resp.Data.Items))
|
|
}
|
|
|
|
if resp.Data.Items[0].ID != 1 {
|
|
t.Errorf("expected %d, got %d", 1, resp.Data.Items[0].ID)
|
|
}
|
|
|
|
if resp.Data.Items[0].AccountNumber != "123456" {
|
|
t.Errorf("expected %s, got %s", "123456", resp.Data.Items[0].AccountNumber)
|
|
}
|
|
|
|
if resp.Data.Items[0].Symbol != "AAPL" {
|
|
t.Errorf("expected %s, got %s", "AAPL", resp.Data.Items[0].Symbol)
|
|
}
|
|
|
|
if resp.Data.Items[0].TransactionType != "buy" {
|
|
t.Errorf("expected %s, got %s", "buy", resp.Data.Items[0].TransactionType)
|
|
}
|
|
}
|
|
|
|
func TestGetTransaction(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
|
|
_,_ = rw.Write([]byte(`{"context": "test", "data": {"id": 1, "account-number": "123", "symbol": "AAPL", "instrument-type": "equity-option"}}`))
|
|
}))
|
|
defer server.Close()
|
|
|
|
api := NewTastytradeAPI(server.URL)
|
|
resp, err := api.GetTransaction("123", "1")
|
|
|
|
if err != nil {
|
|
t.Errorf("expected nil, got %v", err)
|
|
}
|
|
|
|
if resp.Context != "test" {
|
|
t.Errorf("expected %s, got %s", "test", resp.Context)
|
|
}
|
|
|
|
if resp.Data.Symbol != "AAPL" {
|
|
t.Errorf("expected %s, got %s", "AAPL", resp.Data.Symbol)
|
|
}
|
|
}
|
|
|
|
func TestGetTransactionsPagination(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
|
|
_,_ = rw.Write([]byte(`{"api-version": "1.0", "context": "test", "data": {"items": [{"id": 1, "account-number": "123", "symbol": "AAPL", "instrument-type": "equity-option"}]}, "pagination": {"per-page": 1, "total-items": 10}}`))
|
|
}))
|
|
defer server.Close()
|
|
|
|
api := NewTastytradeAPI(server.URL)
|
|
resp, err := api.GetTransactions("123", &TransactionQueryParams{Symbol: "AAPL"})
|
|
|
|
if err != nil {
|
|
t.Errorf("expected nil, got %v", err)
|
|
}
|
|
|
|
if resp.Pagination.PerPage != 1 {
|
|
t.Errorf("expected %d, got %d", 1, resp.Pagination.PerPage)
|
|
}
|
|
|
|
if resp.Pagination.TotalItems != 10 {
|
|
t.Errorf("expected %d, got %d", 10, resp.Pagination.TotalItems)
|
|
}
|
|
}
|
|
|
|
func TestGetTransactionsError(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
|
|
rw.WriteHeader(http.StatusInternalServerError)
|
|
}))
|
|
defer server.Close()
|
|
|
|
api := NewTastytradeAPI(server.URL)
|
|
_, err := api.GetTransactions("123", &TransactionQueryParams{Symbol: "AAPL"})
|
|
|
|
if err == nil {
|
|
t.Errorf("expected an error, got nil")
|
|
}
|
|
}
|
|
|
|
func TestGetTransactionError(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
|
|
rw.WriteHeader(http.StatusInternalServerError)
|
|
}))
|
|
defer server.Close()
|
|
|
|
api := NewTastytradeAPI(server.URL)
|
|
_, err := api.GetTransaction("123", "1")
|
|
|
|
if err == nil {
|
|
t.Errorf("expected an error, got nil")
|
|
}
|
|
}
|