@@ -43,26 +43,32 @@ def setUp(self) -> None:
43
43
# App import must happen after TESTING environment setup
44
44
from code_submitter .server import app , database
45
45
46
+ def url_for (name : str ) -> str :
47
+ # While it makes for uglier tests, we do need to use more absolute
48
+ # paths here so that the urls emitted contain the root_path from the
49
+ # ASGI server and in turn work correctly under proxy.
50
+ return 'http://testserver{}' .format (app .url_path_for (name ))
51
+
46
52
test_client = TestClient (app )
47
53
self .session = test_client .__enter__ ()
48
54
self .session .auth = ('test_user' , 'test_pass' )
49
- self .url_path_for = app . url_path_for
55
+ self .url_for = url_for
50
56
self .database = database
51
57
52
58
def tearDown (self ) -> None :
53
59
self .session .__exit__ (None , None , None )
54
60
super ().tearDown ()
55
61
56
62
def test_app (self ) -> None :
57
- response = self .session .get (self .url_path_for ('homepage' ))
63
+ response = self .session .get (self .url_for ('homepage' ))
58
64
self .assertEqual (200 , response .status_code )
59
65
60
66
html = response .text
61
67
self .assertIn ("Upload a new submission" , html )
62
68
63
69
def test_app_requires_auth (self ) -> None :
64
70
self .session .auth = None
65
- response = self .session .get (self .url_path_for ('homepage' ))
71
+ response = self .session .get (self .url_for ('homepage' ))
66
72
self .assertEqual (401 , response .status_code )
67
73
self .assertIn ('WWW-Authenticate' , response .headers )
68
74
self .assertIn (' realm=' , response .headers ['WWW-Authenticate' ])
@@ -97,7 +103,7 @@ def test_shows_own_and_own_team_uploads(self) -> None:
97
103
),
98
104
))
99
105
100
- response = self .session .get (self .url_path_for ('homepage' ))
106
+ response = self .session .get (self .url_for ('homepage' ))
101
107
self .assertEqual (200 , response .status_code )
102
108
103
109
html = response .text
@@ -159,7 +165,7 @@ def test_shows_chosen_archive(self) -> None:
159
165
),
160
166
))
161
167
162
- response = self .session .get (self .url_path_for ('homepage' ))
168
+ response = self .session .get (self .url_for ('homepage' ))
163
169
self .assertEqual (200 , response .status_code )
164
170
165
171
html = response .text
@@ -185,12 +191,12 @@ def test_upload_file(self) -> None:
185
191
zip_file .writestr ('robot.py' , 'print("I am a robot")' )
186
192
187
193
response = self .session .post (
188
- self .url_path_for ('upload' ),
194
+ self .url_for ('upload' ),
189
195
files = {'archive' : ('whatever.zip' , contents .getvalue (), 'application/zip' )},
190
196
)
191
197
self .assertEqual (302 , response .status_code )
192
198
self .assertEqual (
193
- self .url_path_for ('homepage' ),
199
+ self .url_for ('homepage' ),
194
200
response .headers ['location' ],
195
201
)
196
202
@@ -227,13 +233,13 @@ def test_upload_and_choose_file(self) -> None:
227
233
zip_file .writestr ('robot.py' , 'print("I am a robot")' )
228
234
229
235
response = self .session .post (
230
- self .url_path_for ('upload' ),
236
+ self .url_for ('upload' ),
231
237
data = {'choose' : 'on' },
232
238
files = {'archive' : ('whatever.zip' , contents .getvalue (), 'application/zip' )},
233
239
)
234
240
self .assertEqual (302 , response .status_code )
235
241
self .assertEqual (
236
- self .url_path_for ('homepage' ),
242
+ self .url_for ('homepage' ),
237
243
response .headers ['location' ],
238
244
)
239
245
@@ -263,7 +269,7 @@ def test_upload_and_choose_file(self) -> None:
263
269
264
270
def test_upload_bad_file (self ) -> None :
265
271
response = self .session .post (
266
- self .url_path_for ('upload' ),
272
+ self .url_for ('upload' ),
267
273
files = {'archive' : ('whatever.zip' , b'should-be-a-zip' , 'application/zip' )},
268
274
)
269
275
self .assertEqual (400 , response .status_code )
@@ -284,7 +290,7 @@ def test_upload_archive_without_robot_py(self) -> None:
284
290
zip_file .writestr ('main.py' , 'print("I am a robot")' )
285
291
286
292
response = self .session .post (
287
- self .url_path_for ('upload' ),
293
+ self .url_for ('upload' ),
288
294
files = {'archive' : ('whatever.zip' , contents .getvalue (), 'application/zip' )},
289
295
)
290
296
self .assertEqual (400 , response .status_code )
0 commit comments