11import requests as req
2+ import pytest
23from unittest .mock import Mock
4+ from datetime import date
5+ from argus .domain .internal_models import DataSource , Instrument , MarketDataRequest
36from argus .clients .exchangerate_client import get_rates , check_error
47
58
6- def test_check_currency_timeout (monkeypatch ):
9+ @pytest .fixture
10+ def sample_source ():
11+ return DataSource (
12+ name = "Exchange API" , provider_kind = "ex_client" , requires_api_key = False
13+ )
14+
15+
16+ @pytest .fixture
17+ def sample_instrument ():
18+ return Instrument (
19+ symbol = "EUR/USD" ,
20+ name = "EUR - USD Rate" ,
21+ asset_class = "fx" ,
22+ base_currency = "EUR" ,
23+ quote_currency = "USD" ,
24+ )
25+
26+
27+ @pytest .fixture
28+ def sample_request (sample_source , sample_instrument ):
29+ return MarketDataRequest (
30+ source = sample_source ,
31+ instrument = sample_instrument ,
32+ timeframe = "" ,
33+ start = date (2026 , 1 , 1 ),
34+ end = date (2026 , 1 , 1 ),
35+ )
36+
37+
38+ def test_check_currency_timeout (monkeypatch , sample_request ):
739 def test_get_resp (url , timeout ):
840 raise req .exceptions .Timeout ()
941
1042 monkeypatch .setattr ("requests.get" , test_get_resp )
1143
12- data = get_rates ("EUR" , "USD" )
44+ data = get_rates (sample_request )
1345 assert data is None
1446
1547
16- def test_check_currency_connection_error (monkeypatch ):
48+ def test_check_currency_connection_error (monkeypatch , sample_request ):
1749 def test_get_resp (url , timeout ):
1850 raise req .exceptions .ConnectionError ()
1951
2052 monkeypatch .setattr ("requests.get" , test_get_resp )
2153
22- data = get_rates ("EUR" , "USD" )
54+ data = get_rates (sample_request )
2355 assert data is None
2456
2557
26- def test_check_currency_request_exception (monkeypatch ):
58+ def test_check_currency_request_exception (monkeypatch , sample_request ):
2759 def test_get_resp (url , timeout ):
2860 raise req .exceptions .RequestException ("Testfehler" )
2961
3062 monkeypatch .setattr ("requests.get" , test_get_resp )
3163
32- data = get_rates ("EUR" , "USD" )
64+ data = get_rates (sample_request )
3365 assert data is None
3466
3567
36- def test_check_currency_value_error (monkeypatch ):
68+ def test_check_currency_value_error (monkeypatch , sample_request ):
3769 test_resp = Mock ()
3870 test_resp .raise_for_status .return_value = None
3971 test_resp .json .side_effect = ValueError ("Ungültige JSON-Antwort" )
@@ -43,11 +75,11 @@ def test_get_resp(url, timeout):
4375
4476 monkeypatch .setattr ("requests.get" , test_get_resp )
4577
46- data = get_rates ("EUR" , "USD" )
78+ data = get_rates (sample_request )
4779 assert data is None
4880
4981
50- def test_check_currency_key_error (monkeypatch ):
82+ def test_check_currency_key_error (monkeypatch , sample_request ):
5183 test_resp = Mock ()
5284 test_resp .raise_for_status .return_value = None
5385 test_resp .json .return_value = {
@@ -61,11 +93,11 @@ def test_get_resp(url, timeout):
6193
6294 monkeypatch .setattr ("requests.get" , test_get_resp )
6395
64- data = get_rates ("EUR" , "USD" )
96+ data = get_rates (sample_request )
6597 assert data is None
6698
6799
68- def test_check_currency_valid (monkeypatch ):
100+ def test_check_currency_valid (monkeypatch , sample_request ):
69101 test_resp = Mock ()
70102 test_resp .raise_for_status .return_value = None
71103 test_resp .json .return_value = {
@@ -79,11 +111,11 @@ def test_get_resp(url, timeout):
79111
80112 monkeypatch .setattr ("requests.get" , test_get_resp )
81113
82- data = get_rates ("EUR" , "USD" )
114+ data = get_rates (sample_request )
83115 assert data == {"result" : "success" , "error_type" : "" , "conversion_rate" : 1.2 }
84116
85117
86- def test_check_currency_invalid (monkeypatch ):
118+ def test_check_currency_invalid (monkeypatch , sample_request ):
87119 test_resp = Mock ()
88120 test_resp .raise_for_status .return_value = None
89121 test_resp .json .return_value = {
@@ -97,7 +129,7 @@ def test_get_resp(url, timeout):
97129
98130 monkeypatch .setattr ("requests.get" , test_get_resp )
99131
100- data = get_rates ("EUR" , "USD" )
132+ data = get_rates (sample_request )
101133 assert data is None
102134
103135
0 commit comments