github.com/polygon-io/client-go@v1.16.4/rest/trades_test.go (about) 1 package polygon_test 2 3 import ( 4 "context" 5 "encoding/json" 6 "testing" 7 "time" 8 9 "github.com/jarcoal/httpmock" 10 polygon "github.com/polygon-io/client-go/rest" 11 "github.com/polygon-io/client-go/rest/models" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestListTrades(t *testing.T) { 16 c := polygon.New("API_KEY") 17 18 httpmock.ActivateNonDefault(c.HTTP.GetClient()) 19 defer httpmock.DeactivateAndReset() 20 21 trade1 := `{ 22 "conditions": [ 23 12, 24 41 25 ], 26 "exchange": 11, 27 "id": "1", 28 "participant_timestamp": 1517562000015577000, 29 "price": 171.55, 30 "sequence_number": 1063, 31 "sip_timestamp": 1517562000016036600, 32 "size": 100, 33 "tape": 3 34 }` 35 36 trade2 := `{ 37 "conditions": [ 38 12, 39 41 40 ], 41 "exchange": 11, 42 "id": "2", 43 "participant_timestamp": 1517562000015577600, 44 "price": 171.55, 45 "sequence_number": 1064, 46 "sip_timestamp": 1517562000016038100, 47 "size": 100, 48 "tape": 3 49 }` 50 51 expectedResponse := `{ 52 "status": "OK", 53 "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", 54 "next_url": "https://api.polygon.io/v3/trades/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", 55 "results": [ 56 ` + indent(true, trade1, "\t\t") + `, 57 ` + indent(true, trade2, "\t\t") + ` 58 ] 59 }` 60 61 registerResponder("https://api.polygon.io/v3/trades/AAPL?limit=2&order=asc&sort=timestamp×tamp.gte=1626948000000000000", expectedResponse) 62 registerResponder("https://api.polygon.io/v3/trades/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy&sort=timestamp", "{}") 63 iter := c.ListTrades(context.Background(), models.ListTradesParams{Ticker: "AAPL"}. 64 WithTimestamp(models.GTE, models.Nanos(time.Date(2021, 7, 22, 10, 0, 0, 0, time.UTC))). 65 WithOrder(models.Asc).WithLimit(2), models.QueryParam("sort", string(models.Timestamp))) 66 67 // iter creation 68 assert.Nil(t, iter.Err()) 69 assert.NotNil(t, iter.Item()) 70 71 // first item 72 assert.True(t, iter.Next()) 73 assert.Nil(t, iter.Err()) 74 var expect1 models.Trade 75 err := json.Unmarshal([]byte(trade1), &expect1) 76 assert.Nil(t, err) 77 assert.Equal(t, expect1, iter.Item()) 78 79 // second item 80 assert.True(t, iter.Next()) 81 assert.Nil(t, iter.Err()) 82 var expect2 models.Trade 83 err = json.Unmarshal([]byte(trade2), &expect2) 84 assert.Nil(t, err) 85 assert.Equal(t, expect2, iter.Item()) 86 87 // end of list 88 assert.False(t, iter.Next()) 89 assert.Nil(t, iter.Err()) 90 } 91 92 func TestGetLastTrade(t *testing.T) { 93 c := polygon.New("API_KEY") 94 95 httpmock.ActivateNonDefault(c.HTTP.GetClient()) 96 defer httpmock.DeactivateAndReset() 97 98 expectedResponse := `{ 99 "status": "OK", 100 "request_id": "f05562305bd26ced64b98ed68b3c5d96", 101 "results": { 102 "T": "AAPL", 103 "f": 1617901342969796400, 104 "q": 3135876, 105 "t": 1617901342969834000, 106 "y": 1617901342968000000, 107 "c": [ 108 37 109 ], 110 "i": "118749", 111 "p": 129.8473, 112 "r": 202, 113 "s": 25, 114 "x": 4, 115 "z": 3 116 } 117 }` 118 119 registerResponder("https://api.polygon.io/v2/last/trade/AAPL", expectedResponse) 120 res, err := c.GetLastTrade(context.Background(), &models.GetLastTradeParams{ 121 Ticker: "AAPL", 122 }) 123 assert.Nil(t, err) 124 125 var expect models.GetLastTradeResponse 126 err = json.Unmarshal([]byte(expectedResponse), &expect) 127 assert.Nil(t, err) 128 assert.Equal(t, &expect, res) 129 } 130 131 func TestGetLastCryptoTrade(t *testing.T) { 132 c := polygon.New("API_KEY") 133 134 httpmock.ActivateNonDefault(c.HTTP.GetClient()) 135 defer httpmock.DeactivateAndReset() 136 137 expectedResponse := `{ 138 "status": "success", 139 "request_id": "d2d779df015fe2b7fbb8e58366610ef7", 140 "symbol": "BTC-USD", 141 "last": { 142 "price": 16835.42, 143 "size": 0.006909, 144 "exchange": 4, 145 "conditions": [ 146 1 147 ], 148 "timestamp": 1605560885027 149 } 150 }` 151 152 registerResponder("https://api.polygon.io/v1/last/crypto/BTC/USD", expectedResponse) 153 res, err := c.GetLastCryptoTrade(context.Background(), &models.GetLastCryptoTradeParams{ 154 From: "BTC", 155 To: "USD", 156 }) 157 assert.Nil(t, err) 158 159 var expect models.GetLastCryptoTradeResponse 160 err = json.Unmarshal([]byte(expectedResponse), &expect) 161 assert.Nil(t, err) 162 assert.Equal(t, &expect, res) 163 }