github.com/polygon-io/client-go@v1.16.4/rest/vx_test.go (about) 1 package polygon_test 2 3 import ( 4 "context" 5 "encoding/json" 6 "testing" 7 8 "github.com/jarcoal/httpmock" 9 polygon "github.com/polygon-io/client-go/rest" 10 "github.com/polygon-io/client-go/rest/models" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestListStockFinancials(t *testing.T) { 16 c := polygon.New("API_KEY") 17 18 httpmock.ActivateNonDefault(c.HTTP.GetClient()) 19 defer httpmock.DeactivateAndReset() 20 21 financial := ` 22 { 23 "financials":{ 24 "comprehensive_income":{ 25 "other_comprehensive_income_loss":{ 26 "label":"Other Comprehensive Income/Loss", 27 "value":-3.9e+06, 28 "unit":"USD", 29 "order":400 30 }, 31 "comprehensive_income_loss":{ 32 "label":"Comprehensive Income/Loss", 33 "value":4.1e+07, 34 "unit":"USD", 35 "order":100 36 }, 37 "comprehensive_income_loss_attributable_to_noncontrolling_interest":{ 38 "label":"Comprehensive Income/Loss Attributable To Noncontrolling Interest", 39 "value":900000, 40 "unit":"USD", 41 "order":200 42 }, 43 "comprehensive_income_loss_attributable_to_parent":{ 44 "label":"Comprehensive Income/Loss Attributable To Parent", 45 "value":4.01e+07, 46 "unit":"USD", 47 "order":300 48 } 49 }, 50 "income_statement":{ 51 "income_loss_from_continuing_operations_before_tax":{ 52 "label":"Income/Loss From Continuing Operations Before Tax", 53 "value":5.6e+07, 54 "unit":"USD", 55 "order":1500 56 }, 57 "nonoperating_income_loss":{ 58 "label":"Nonoperating Income/Loss", 59 "value":-1.02e+07, 60 "unit":"USD", 61 "order":900 62 }, 63 "revenues":{ 64 "label":"Revenues", 65 "value":5.191e+08, 66 "unit":"USD", 67 "order":100 68 }, 69 "income_loss_from_equity_method_investments":{ 70 "label":"Income/Loss From Equity Method Investments", 71 "value":100000, 72 "unit":"USD", 73 "order":2100 74 }, 75 "net_income_loss_attributable_to_noncontrolling_interest":{ 76 "label":"Net Income/Loss Attributable To Noncontrolling Interest", 77 "value":800000, 78 "unit":"USD", 79 "order":3300 80 }, 81 "income_tax_expense_benefit":{ 82 "label":"Income Tax Expense/Benefit", 83 "value":1.12e+07, 84 "unit":"USD", 85 "order":2200 86 }, 87 "basic_earnings_per_share":{ 88 "label":"Basic Earnings Per Share", 89 "value":1.33, 90 "unit":"USD / shares", 91 "order":4200 92 }, 93 "income_loss_from_continuing_operations_after_tax":{ 94 "label":"Income/Loss From Continuing Operations After Tax", 95 "value":4.48e+07, 96 "unit":"USD", 97 "order":1400 98 }, 99 "participating_securities_distributed_and_undistributed_earnings_loss_basic":{ 100 "label":"Participating Securities, Distributed And Undistributed Earnings/Loss, Basic", 101 "value":0, 102 "unit":"USD", 103 "order":3800 104 }, 105 "benefits_costs_expenses":{ 106 "label":"Benefits Costs and Expenses", 107 "value":4.631e+08, 108 "unit":"USD", 109 "order":200 110 }, 111 "gross_profit":{ 112 "label":"Gross Profit", 113 "value":1.217e+08, 114 "unit":"USD", 115 "order":800 116 }, 117 "costs_and_expenses":{ 118 "label":"Costs And Expenses", 119 "value":4.631e+08, 120 "unit":"USD", 121 "order":600 122 }, 123 "operating_expenses":{ 124 "label":"Operating Expenses", 125 "value":5.55e+07, 126 "unit":"USD", 127 "order":1000 128 }, 129 "preferred_stock_dividends_and_other_adjustments":{ 130 "label":"Preferred Stock Dividends And Other Adjustments", 131 "value":0, 132 "unit":"USD", 133 "order":3900 134 }, 135 "interest_expense_operating":{ 136 "label":"Interest Expense, Operating", 137 "value":9.8e+06, 138 "unit":"USD", 139 "order":2700 140 }, 141 "cost_of_revenue":{ 142 "label":"Cost Of Revenue", 143 "value":3.974e+08, 144 "unit":"USD", 145 "order":300 146 }, 147 "diluted_earnings_per_share":{ 148 "label":"Diluted Earnings Per Share", 149 "value":1.33, 150 "unit":"USD / shares", 151 "order":4300 152 }, 153 "net_income_loss_available_to_common_stockholders_basic":{ 154 "label":"Net Income/Loss Available To Common Stockholders, Basic", 155 "value":4.41e+07, 156 "unit":"USD", 157 "order":3700 158 }, 159 "net_income_loss":{ 160 "label":"Net Income/Loss", 161 "value":4.49e+07, 162 "unit":"USD", 163 "order":3200 164 }, 165 "operating_income_loss":{ 166 "label":"Operating Income/Loss", 167 "value":6.62e+07, 168 "unit":"USD", 169 "order":1100 170 }, 171 "income_loss_before_equity_method_investments":{ 172 "label":"Income/Loss Before Equity Method Investments", 173 "value":5.6e+07, 174 "unit":"USD", 175 "order":1300 176 }, 177 "net_income_loss_attributable_to_parent":{ 178 "label":"Net Income/Loss Attributable To Parent", 179 "value":4.41e+07, 180 "unit":"USD", 181 "order":3500 182 } 183 }, 184 "balance_sheet":{ 185 "equity":{ 186 "label":"Equity", 187 "value":1.603e+09, 188 "unit":"USD", 189 "order":1400 190 }, 191 "current_assets":{ 192 "label":"Current Assets", 193 "value":1.0903e+09, 194 "unit":"USD", 195 "order":200 196 }, 197 "liabilities":{ 198 "label":"Liabilities", 199 "value":1.8228e+09, 200 "unit":"USD", 201 "order":600 202 }, 203 "fixed_assets":{ 204 "label":"Fixed Assets", 205 "value":1.0462e+09, 206 "unit":"USD", 207 "order":400 208 }, 209 "equity_attributable_to_parent":{ 210 "label":"Equity Attributable To Parent", 211 "value":1.562e+09, 212 "unit":"USD", 213 "order":1600 214 }, 215 "noncurrent_assets":{ 216 "label":"Noncurrent Assets", 217 "value":2.3355e+09, 218 "unit":"USD", 219 "order":300 220 }, 221 "equity_attributable_to_noncontrolling_interest":{ 222 "label":"Equity Attributable To Noncontrolling Interest", 223 "value":4.1e+07, 224 "unit":"USD", 225 "order":1500 226 }, 227 "assets":{ 228 "label":"Assets", 229 "value":3.4258e+09, 230 "unit":"USD", 231 "order":100 232 }, 233 "liabilities_and_equity":{ 234 "label":"Liabilities And Equity", 235 "value":3.4258e+09, 236 "unit":"USD", 237 "order":1900 238 }, 239 "noncurrent_liabilities":{ 240 "label":"Noncurrent Liabilities", 241 "value":1.3677e+09, 242 "unit":"USD", 243 "order":800 244 }, 245 "other_than_fixed_noncurrent_assets":{ 246 "label":"Other Than Fixed Noncurrent Assets", 247 "value":1.2893e+09, 248 "unit":"USD", 249 "order":500 250 }, 251 "current_liabilities":{ 252 "label":"Current Liabilities", 253 "value":4.551e+08, 254 "unit":"USD", 255 "order":700 256 } 257 }, 258 "cash_flow_statement":{ 259 "net_cash_flow_from_operating_activities":{ 260 "label":"Net Cash Flow From Operating Activities", 261 "value":300000, 262 "unit":"USD", 263 "order":100 264 }, 265 "exchange_gains_losses":{ 266 "label":"Exchange Gains/Losses", 267 "value":-3.6e+06, 268 "unit":"USD", 269 "order":1000 270 }, 271 "net_cash_flow_from_investing_activities":{ 272 "label":"Net Cash Flow From Investing Activities", 273 "value":-1.71e+07, 274 "unit":"USD", 275 "order":400 276 }, 277 "net_cash_flow_continuing":{ 278 "label":"Net Cash Flow, Continuing", 279 "value":-7.9e+06, 280 "unit":"USD", 281 "order":1200 282 }, 283 "net_cash_flow":{ 284 "label":"Net Cash Flow", 285 "value":-1.15e+07, 286 "unit":"USD", 287 "order":1100 288 }, 289 "net_cash_flow_from_financing_activities":{ 290 "label":"Net Cash Flow From Financing Activities", 291 "value":8.9e+06, 292 "unit":"USD", 293 "order":700 294 }, 295 "net_cash_flow_from_operating_activities_continuing":{ 296 "label":"Net Cash Flow From Operating Activities, Continuing", 297 "value":300000, 298 "unit":"USD", 299 "order":200 300 }, 301 "net_cash_flow_from_financing_activities_continuing":{ 302 "label":"Net Cash Flow From Financing Activities, Continuing", 303 "value":8.9e+06, 304 "unit":"USD", 305 "order":800 306 }, 307 "net_cash_flow_from_investing_activities_continuing":{ 308 "label":"Net Cash Flow From Investing Activities, Continuing", 309 "value":-1.71e+07, 310 "unit":"USD", 311 "order":500 312 } 313 } 314 }, 315 "start_date":"2022-01-01", 316 "end_date":"2022-04-03", 317 "filing_date":"2022-04-29", 318 "cik":"0000891014", 319 "company_name":"MINERALS TECHNOLOGIES INC.", 320 "fiscal_period":"Q1", 321 "fiscal_year":"2022", 322 "source_filing_url":"https://api.polygon.io/v1/reference/sec/filings/0000891014-22-000022", 323 "source_filing_file_url":"https://api.polygon.io/v1/reference/sec/filings/0000891014-22-000022/files/form10q_htm.xml" 324 } 325 ` 326 327 expectedResponse := `{ 328 "status": "OK", 329 "request_id":"874d62dbbce4b437bde7885d44a6be36", 330 "count":1, 331 "next_url":"https://api.polygon.io/vX/reference/financials?cursor=YXA9MjAyMjA0MDMmYXM9MDAwMDg5MTAxNC0yMi0wMDAwMjImaGFzX3hicmw9dHJ1ZSZsaW1pdD0xJnNvcnQ9cGVyaW9kX29mX3JlcG9ydF9kYXRlJnR5cGU9MTAtUQ", 332 "results": [ 333 ` + indent(true, financial, "\t\t") + ` 334 ] 335 }` 336 337 registerResponder("https://api.polygon.io/vX/reference/financials?ticker=MTX", expectedResponse) 338 registerResponder("https://api.polygon.io/vX/reference/financials?cursor=YXA9MjAyMjA0MDMmYXM9MDAwMDg5MTAxNC0yMi0wMDAwMjImaGFzX3hicmw9dHJ1ZSZsaW1pdD0xJnNvcnQ9cGVyaW9kX29mX3JlcG9ydF9kYXRlJnR5cGU9MTAtUQ", "{}") 339 iter := c.VX.ListStockFinancials(context.Background(), models.ListStockFinancialsParams{}.WithTicker("MTX")) 340 341 // iter creation 342 assert.Nil(t, iter.Err()) 343 assert.NotNil(t, iter.Item()) 344 345 // first item 346 assert.True(t, iter.Next()) 347 assert.Nil(t, iter.Err()) 348 var expect models.StockFinancial 349 err := json.Unmarshal([]byte(financial), &expect) 350 assert.Nil(t, err) 351 assert.Equal(t, expect, iter.Item()) 352 353 // end of list 354 assert.False(t, iter.Next()) 355 assert.Nil(t, iter.Err()) 356 } 357 358 func TestGetTickerEvents(t *testing.T) { 359 c := polygon.New("API_KEY") 360 361 httpmock.ActivateNonDefault(c.HTTP.GetClient()) 362 defer httpmock.DeactivateAndReset() 363 364 events := ` 365 { 366 "events": [ 367 { 368 "date": "2022-06-09", 369 "ticker_change": { 370 "ticker": "META" 371 }, 372 "type": "ticker_change" 373 }, 374 { 375 "date": "2012-05-18", 376 "ticker_change": { 377 "ticker": "FB" 378 }, 379 "type": "ticker_change" 380 } 381 ], 382 "name": "Meta Platforms, Inc. Class A Common Stock" 383 } 384 ` 385 386 expectedResponse := `{ 387 "status": "OK", 388 "request_id":"874d62dbbce4b437bde7885d44a6be36", 389 "count":1, 390 "next_url":"https://api.polygon.io/vX/reference/financials?cursor=YXA9MjAyMjA0MDMmYXM9MDAwMDg5MTAxNC0yMi0wMDAwMjImaGFzX3hicmw9dHJ1ZSZsaW1pdD0xJnNvcnQ9cGVyaW9kX29mX3JlcG9ydF9kYXRlJnR5cGU9MTAtUQ", 391 "results": [ 392 ` + indent(true, events, "\t\t") + ` 393 ] 394 }` 395 396 registerResponder("https://api.polygon.io/vX/reference/tickers/META/events", expectedResponse) 397 398 res, err := c.VX.GetTickerEvents(context.Background(), &models.GetTickerEventsParams{ID: "META"}) 399 require.NoError(t, err) 400 401 var expect models.GetTickerEventsResponse 402 err = json.Unmarshal([]byte(expectedResponse), &expect) 403 assert.Nil(t, err) 404 assert.Equal(t, &expect, res) 405 }