Open fransvanberckel opened 3 weeks ago
~/trading212_rest/init.py
import requests
class Trading212: def init(self, api_key): self.api_key = api_key self.base_url = "https://demo.trading212.com/api/v0"
def get_headers(self):
return {
"Authorization": f"Bearer {self.api_key}"
}
def get_account_cash(self):
url = f"{self.base_url}/equity/account/cash"
response = requests.get(url, headers=self.get_headers())
return response.json()
def get_account_info(self):
url = f"{self.base_url}/equity/account/info"
response = requests.get(url, headers=self.get_headers())
return response.json()
def get_historical_orders(self):
url = f"{self.base_url}/equity/history/orders"
response = requests.get(url, headers=self.get_headers())
return response.json()
def get_exchanges(self):
url = f"{self.base_url}/equity/metadata/exchanges"
response = requests.get(url, headers=self.get_headers())
return response.json()
def get_instruments(self):
url = f"{self.base_url}/equity/metadata/instruments"
response = requests.get(url, headers=self.get_headers())
return response.json()
~/tests/test_trading212.py
import unittest from unittest.mock import patch from trading212_rest import Trading212
class TestTrading212(unittest.TestCase): def setUp(self): self.api_key = 'test_api_key' self.client = Trading212(self.api_key)
@patch('requests.get')
def test_get_account_cash(self, mock_get):
mock_response = mock_get.return_value
mock_response.json.return_value = {'cash': 1000}
response = self.client.get_account_cash()
mock_get.assert_called_once_with(
'https://demo.trading212.com/api/v0/equity/account/cash',
headers={'Authorization': 'Bearer test_api_key'}
)
self.assertEqual(response, {'cash': 1000})
@patch('requests.get')
def test_get_account_info(self, mock_get):
mock_response = mock_get.return_value
mock_response.json.return_value = {'account': 'info'}
response = self.client.get_account_info()
mock_get.assert_called_once_with(
'https://demo.trading212.com/api/v0/equity/account/info',
headers={'Authorization': 'Bearer test_api_key'}
)
self.assertEqual(response, {'account': 'info'})
@patch('requests.get')
def test_get_historical_orders(self, mock_get):
mock_response = mock_get.return_value
mock_response.json.return_value = [{'order': 'details'}]
response = self.client.get_historical_orders()
mock_get.assert_called_once_with(
'https://demo.trading212.com/api/v0/equity/history/orders',
headers={'Authorization': 'Bearer test_api_key'}
)
self.assertEqual(response, [{'order': 'details'}])
@patch('requests.get')
def test_get_exchanges(self, mock_get):
mock_response = mock_get.return_value
mock_response.json.return_value = [{'exchange': 'details'}]
response = self.client.get_exchanges()
mock_get.assert_called_once_with(
'https://demo.trading212.com/api/v0/equity/metadata/exchanges',
headers={'Authorization': 'Bearer test_api_key'}
)
self.assertEqual(response, [{'exchange': 'details'}])
@patch('requests.get')
def test_get_instruments(self, mock_get):
mock_response = mock_get.return_value
mock_response.json.return_value = [{'instrument': 'details'}]
response = self.client.get_instruments()
mock_get.assert_called_once_with(
'https://demo.trading212.com/api/v0/equity/metadata/instruments',
headers={'Authorization': 'Bearer test_api_key'}
)
self.assertEqual(response, [{'instrument': 'details'}])
if name == 'main': unittest.main()
🙄 I was thinking about a PR, not a random script I'd have to adjust
Please add unittest and / or unittest.mock.
This approach allows you to test all the functions in your API client without making any actual API calls. This ensures that your tests are fast and reliable.
This structure and scripts allow you to easily test the functionality of your Trading212 API client. Run the tests with the following command from the root directory (trading212-rest):
$ python -m unittest discover -s tests
This command searches for all test files in the tests directory and runs the tests