7
7
from tempfile import TemporaryFile
8
8
from unittest import IsolatedAsyncioTestCase
9
9
10
+ import aiohttp
10
11
from aioresponses import CallbackResult , aioresponses
11
12
from callee import Attrs
12
13
from mock import ANY , MagicMock
31
32
).decode ()
32
33
33
34
headers = {
34
- "User-Agent" : f "Python/{ platform .python_version ()} " ,
35
+ "User-Agent" : "Python/{}" . format ( platform .python_version ()) ,
35
36
"Authorization" : "Bearer jwt" ,
36
37
"Content-Type" : "application/json" ,
37
38
"Auth0-Client" : telemetry ,
38
39
}
39
40
40
41
41
- def get_callback ():
42
- mock = MagicMock (return_value = CallbackResult (status = 200 , payload = payload ))
42
+ def get_callback (status = 200 ):
43
+ mock = MagicMock (return_value = CallbackResult (status = status , payload = payload ))
43
44
44
45
def callback (url , ** kwargs ):
45
46
return mock (url , ** kwargs )
@@ -52,10 +53,7 @@ class TestAsyncify(IsolatedAsyncioTestCase):
52
53
async def test_get (self , mocked ):
53
54
callback , mock = get_callback ()
54
55
mocked .get (clients , callback = callback )
55
- c = asyncify (Clients )(
56
- domain = "example.com" ,
57
- token = "jwt" ,
58
- )
56
+ c = asyncify (Clients )(domain = "example.com" , token = "jwt" )
59
57
self .assertEqual (await c .all_async (), payload )
60
58
mock .assert_called_with (
61
59
Attrs (path = "/api/v2/clients" ),
@@ -68,10 +66,7 @@ async def test_get(self, mocked):
68
66
async def test_post (self , mocked ):
69
67
callback , mock = get_callback ()
70
68
mocked .post (clients , callback = callback )
71
- c = asyncify (Clients )(
72
- domain = "example.com" ,
73
- token = "jwt" ,
74
- )
69
+ c = asyncify (Clients )(domain = "example.com" , token = "jwt" )
75
70
data = {"client" : 1 }
76
71
self .assertEqual (await c .create_async (data ), payload )
77
72
mock .assert_called_with (
@@ -85,10 +80,7 @@ async def test_post(self, mocked):
85
80
async def test_file_post (self , mocked ):
86
81
callback , mock = get_callback ()
87
82
mocked .post (users_imports , callback = callback )
88
- j = asyncify (Jobs )(
89
- domain = "example.com" ,
90
- token = "jwt" ,
91
- )
83
+ j = asyncify (Jobs )(domain = "example.com" , token = "jwt" )
92
84
users = TemporaryFile ()
93
85
self .assertEqual (await j .import_users_async ("connection-1" , users ), payload )
94
86
file_port_headers = headers .copy ()
@@ -105,15 +97,13 @@ async def test_file_post(self, mocked):
105
97
},
106
98
headers = file_port_headers ,
107
99
)
100
+ users .close ()
108
101
109
102
@aioresponses ()
110
103
async def test_patch (self , mocked ):
111
104
callback , mock = get_callback ()
112
105
mocked .patch (clients , callback = callback )
113
- c = asyncify (Clients )(
114
- domain = "example.com" ,
115
- token = "jwt" ,
116
- )
106
+ c = asyncify (Clients )(domain = "example.com" , token = "jwt" )
117
107
data = {"client" : 1 }
118
108
self .assertEqual (await c .update_async ("client-1" , data ), payload )
119
109
mock .assert_called_with (
@@ -127,10 +117,7 @@ async def test_patch(self, mocked):
127
117
async def test_put (self , mocked ):
128
118
callback , mock = get_callback ()
129
119
mocked .put (factors , callback = callback )
130
- g = asyncify (Guardian )(
131
- domain = "example.com" ,
132
- token = "jwt" ,
133
- )
120
+ g = asyncify (Guardian )(domain = "example.com" , token = "jwt" )
134
121
data = {"factor" : 1 }
135
122
self .assertEqual (await g .update_factor_async ("factor-1" , data ), payload )
136
123
mock .assert_called_with (
@@ -144,10 +131,7 @@ async def test_put(self, mocked):
144
131
async def test_delete (self , mocked ):
145
132
callback , mock = get_callback ()
146
133
mocked .delete (clients , callback = callback )
147
- c = asyncify (Clients )(
148
- domain = "example.com" ,
149
- token = "jwt" ,
150
- )
134
+ c = asyncify (Clients )(domain = "example.com" , token = "jwt" )
151
135
self .assertEqual (await c .delete_async ("client-1" ), payload )
152
136
mock .assert_called_with (
153
137
Attrs (path = "/api/v2/clients/client-1" ),
@@ -161,14 +145,40 @@ async def test_delete(self, mocked):
161
145
async def test_shared_session (self , mocked ):
162
146
callback , mock = get_callback ()
163
147
mocked .get (clients , callback = callback )
164
- async with asyncify (Clients )(
165
- domain = "example.com" ,
166
- token = "jwt" ,
167
- ) as c :
148
+ async with asyncify (Clients )(domain = "example.com" , token = "jwt" ) as c :
168
149
self .assertEqual (await c .all_async (), payload )
169
150
mock .assert_called_with (
170
151
Attrs (path = "/api/v2/clients" ),
171
152
allow_redirects = True ,
172
153
params = {"include_fields" : "true" },
173
154
headers = headers ,
174
155
)
156
+
157
+ @aioresponses ()
158
+ async def test_rate_limit (self , mocked ):
159
+ callback , mock = get_callback (status = 429 )
160
+ mocked .get (clients , callback = callback )
161
+ mocked .get (clients , callback = callback )
162
+ mocked .get (clients , callback = callback )
163
+ mocked .get (clients , payload = payload )
164
+ c = asyncify (Clients )(domain = "example.com" , token = "jwt" )
165
+ rest_client = c ._async_client .client
166
+ rest_client ._skip_sleep = True
167
+ self .assertEqual (await c .all_async (), payload )
168
+ self .assertEqual (3 , mock .call_count )
169
+ (a , b , c ) = rest_client ._metrics ["backoff" ]
170
+ self .assertTrue (100 <= a < b < c <= 1000 )
171
+
172
+ @aioresponses ()
173
+ async def test_timeout (self , mocked ):
174
+ callback , mock = get_callback ()
175
+ mocked .get (clients , callback = callback )
176
+ c = asyncify (Clients )(domain = "example.com" , token = "jwt" , timeout = (8.8 , 9.9 ))
177
+ self .assertEqual (await c .all_async (), payload )
178
+ mock .assert_called_with (
179
+ ANY ,
180
+ allow_redirects = ANY ,
181
+ params = ANY ,
182
+ headers = ANY ,
183
+ timeout = aiohttp .ClientTimeout (sock_connect = 8.8 , sock_read = 9.9 ),
184
+ )
0 commit comments