summaryrefslogtreecommitdiff
path: root/test/test_api.py
diff options
context:
space:
mode:
authorjfriedli2020-04-23 10:39:35 -0700
committerjfriedli2020-04-23 10:39:35 -0700
commite1bac8b6a7fd857f38b7bcb678398c82baaa8fd5 (patch)
treefa87e526289e455f2f17b86973d08eb6850e721f /test/test_api.py
parentd14988fa3fa97f549fb8eaf601cb2c687cdce143 (diff)
Refactoring
Diffstat (limited to 'test/test_api.py')
-rw-r--r--test/test_api.py55
1 files changed, 29 insertions, 26 deletions
diff --git a/test/test_api.py b/test/test_api.py
index 3074bd5..36aae9d 100644
--- a/test/test_api.py
+++ b/test/test_api.py
@@ -14,12 +14,14 @@ import main
14class Mat2APITestCase(unittest.TestCase): 14class Mat2APITestCase(unittest.TestCase):
15 def setUp(self): 15 def setUp(self):
16 os.environ.setdefault('MAT2_ALLOW_ORIGIN_WHITELIST', 'origin1.gnu origin2.gnu') 16 os.environ.setdefault('MAT2_ALLOW_ORIGIN_WHITELIST', 'origin1.gnu origin2.gnu')
17 app = main.create_app()
18 self.upload_folder = tempfile.mkdtemp() 17 self.upload_folder = tempfile.mkdtemp()
19 app.config.update( 18 app = main.create_app(
20 TESTING=True, 19 test_config={
21 UPLOAD_FOLDER=self.upload_folder 20 'TESTING': True,
21 'UPLOAD_FOLDER': self.upload_folder
22 }
22 ) 23 )
24
23 self.app = app.test_client() 25 self.app = app.test_client()
24 26
25 def tearDown(self): 27 def tearDown(self):
@@ -38,7 +40,7 @@ class Mat2APITestCase(unittest.TestCase):
38 self.assertEqual(request.headers['Access-Control-Allow-Origin'], 'origin1.gnu') 40 self.assertEqual(request.headers['Access-Control-Allow-Origin'], 'origin1.gnu')
39 self.assertEqual(request.status_code, 200) 41 self.assertEqual(request.status_code, 200)
40 42
41 data = json.loads(request.data.decode('utf-8')) 43 data = request.get_json()
42 expected = { 44 expected = {
43 'output_filename': 'test_name.cleaned.jpg', 45 'output_filename': 'test_name.cleaned.jpg',
44 'mime': 'image/jpeg', 46 'mime': 'image/jpeg',
@@ -64,7 +66,7 @@ class Mat2APITestCase(unittest.TestCase):
64 self.assertEqual(request.headers['Content-Type'], 'application/json') 66 self.assertEqual(request.headers['Content-Type'], 'application/json')
65 67
66 self.assertEqual(request.status_code, 400) 68 self.assertEqual(request.status_code, 400)
67 error = json.loads(request.data.decode('utf-8'))['message'] 69 error = request.get_json()['message']
68 self.assertEqual(error['file'], 'Post parameter is not specified: file') 70 self.assertEqual(error['file'], 'Post parameter is not specified: file')
69 71
70 request = self.app.post('/api/upload', 72 request = self.app.post('/api/upload',
@@ -74,7 +76,7 @@ class Mat2APITestCase(unittest.TestCase):
74 self.assertEqual(request.headers['Content-Type'], 'application/json') 76 self.assertEqual(request.headers['Content-Type'], 'application/json')
75 77
76 self.assertEqual(request.status_code, 400) 78 self.assertEqual(request.status_code, 400)
77 error = json.loads(request.data.decode('utf-8'))['message'] 79 error = request.get_json()['message']
78 self.assertEqual(error, 'Failed decoding file: Incorrect padding') 80 self.assertEqual(error, 'Failed decoding file: Incorrect padding')
79 81
80 def test_api_not_supported(self): 82 def test_api_not_supported(self):
@@ -87,7 +89,7 @@ class Mat2APITestCase(unittest.TestCase):
87 self.assertEqual(request.headers['Content-Type'], 'application/json') 89 self.assertEqual(request.headers['Content-Type'], 'application/json')
88 self.assertEqual(request.status_code, 415) 90 self.assertEqual(request.status_code, 415)
89 91
90 error = json.loads(request.data.decode('utf-8'))['message'] 92 error = request.get_json()['message']
91 self.assertEqual(error, 'The type application/pdf is not supported') 93 self.assertEqual(error, 'The type application/pdf is not supported')
92 94
93 def test_api_supported_extensions(self): 95 def test_api_supported_extensions(self):
@@ -136,7 +138,7 @@ class Mat2APITestCase(unittest.TestCase):
136 'iaj111eAsAAQTpAwAABOkDAABQSwUGAAAAAAIAAgC8AAAAwAAAAAAA"}', 138 'iaj111eAsAAQTpAwAABOkDAABQSwUGAAAAAAIAAgC8AAAAwAAAAAAA"}',
137 headers={'content-type': 'application/json'} 139 headers={'content-type': 'application/json'}
138 ) 140 )
139 error = json.loads(request.data.decode('utf-8'))['message'] 141 error = request.get_json()['message']
140 self.assertEqual(error, 'Unable to clean application/zip') 142 self.assertEqual(error, 'Unable to clean application/zip')
141 143
142 144
@@ -148,25 +150,25 @@ class Mat2APITestCase(unittest.TestCase):
148 headers={'content-type': 'application/json'} 150 headers={'content-type': 'application/json'}
149 ) 151 )
150 self.assertEqual(request.status_code, 200) 152 self.assertEqual(request.status_code, 200)
151 data = json.loads(request.data.decode('utf-8')) 153 data = request.get_json()
152 154
153 request = self.app.get('http://localhost/api/download/' 155 request = self.app.get('http://localhost/api/download/'
154 '81a541f9ebc0233d419d25ed39908b16f82be26a783f32d56c381559e84e6161/test name.cleaned.jpg') 156 '81a541f9ebc0233d419d25ed39908b16f82be26a783f32d56c381559e84e6161/test name.cleaned.jpg')
155 self.assertEqual(request.status_code, 400) 157 self.assertEqual(request.status_code, 400)
156 error = json.loads(request.data.decode('utf-8'))['message'] 158 error = request.get_json()['message']
157 self.assertEqual(error, 'Insecure filename') 159 self.assertEqual(error, 'Insecure filename')
158 160
159 request = self.app.get('http://localhost/api/download/' 161 request = self.app.get('http://localhost/api/download/'
160 '81a541f9ebc0233d419d25ed39908b16f82be26a783f32d56c381559e84e6161/' 162 '81a541f9ebc0233d419d25ed39908b16f82be26a783f32d56c381559e84e6161/'
161 'wrong_file_name.jpg') 163 'wrong_file_name.jpg')
162 self.assertEqual(request.status_code, 404) 164 self.assertEqual(request.status_code, 404)
163 error = json.loads(request.data.decode('utf-8'))['message'] 165 error = request.get_json()['message']
164 self.assertEqual(error, 'File not found') 166 self.assertEqual(error, 'File not found')
165 167
166 request = self.app.get('http://localhost/api/download/81a541f9e/test_name.cleaned.jpg') 168 request = self.app.get('http://localhost/api/download/81a541f9e/test_name.cleaned.jpg')
167 self.assertEqual(request.status_code, 400) 169 self.assertEqual(request.status_code, 400)
168 170
169 error = json.loads(request.data.decode('utf-8'))['message'] 171 error = request.get_json()['message']
170 self.assertEqual(error, 'The file hash does not match') 172 self.assertEqual(error, 'The file hash does not match')
171 173
172 request = self.app.head(data['download_link']) 174 request = self.app.head(data['download_link'])
@@ -188,7 +190,7 @@ class Mat2APITestCase(unittest.TestCase):
188 headers={'content-type': 'application/json'} 190 headers={'content-type': 'application/json'}
189 ) 191 )
190 self.assertEqual(request.status_code, 200) 192 self.assertEqual(request.status_code, 200)
191 upload_one = json.loads(request.data.decode('utf-8')) 193 upload_one = request.get_json()
192 194
193 request = self.app.post('/api/upload', 195 request = self.app.post('/api/upload',
194 data='{"file_name": "test_name_two.jpg", ' 196 data='{"file_name": "test_name_two.jpg", '
@@ -197,7 +199,7 @@ class Mat2APITestCase(unittest.TestCase):
197 headers={'content-type': 'application/json'} 199 headers={'content-type': 'application/json'}
198 ) 200 )
199 self.assertEqual(request.status_code, 200) 201 self.assertEqual(request.status_code, 200)
200 upload_two = json.loads(request.data.decode('utf-8')) 202 upload_two = request.get_json()
201 203
202 post_body = { 204 post_body = {
203 u'download_list': [ 205 u'download_list': [
@@ -216,7 +218,7 @@ class Mat2APITestCase(unittest.TestCase):
216 headers={'content-type': 'application/json'} 218 headers={'content-type': 'application/json'}
217 ) 219 )
218 220
219 response = json.loads(request.data.decode('utf-8')) 221 response = request.get_json()
220 self.assertEqual(request.status_code, 201) 222 self.assertEqual(request.status_code, 201)
221 223
222 self.assertIn( 224 self.assertIn(
@@ -268,7 +270,7 @@ class Mat2APITestCase(unittest.TestCase):
268 headers={'content-type': 'application/json'} 270 headers={'content-type': 'application/json'}
269 ) 271 )
270 272
271 response = json.loads(request.data.decode('utf-8')) 273 response = request.get_json()
272 self.assertEqual(response['message']['download_list'][0], 'min length is 2') 274 self.assertEqual(response['message']['download_list'][0], 'min length is 2')
273 self.assertEqual(request.status_code, 400) 275 self.assertEqual(request.status_code, 400)
274 276
@@ -280,7 +282,7 @@ class Mat2APITestCase(unittest.TestCase):
280 headers={'content-type': 'application/json'} 282 headers={'content-type': 'application/json'}
281 ) 283 )
282 284
283 response = json.loads(request.data.decode('utf-8')) 285 response = request.get_json()
284 self.assertEqual(response['message']['download_list'][0]['0'][0]['file_name'][0], 'required field') 286 self.assertEqual(response['message']['download_list'][0]['0'][0]['file_name'][0], 'required field')
285 self.assertEqual(response['message']['download_list'][0]['0'][0]['key'][0], 'required field') 287 self.assertEqual(response['message']['download_list'][0]['0'][0]['key'][0], 'required field')
286 self.assertEqual(request.status_code, 400) 288 self.assertEqual(request.status_code, 400)
@@ -338,7 +340,7 @@ class Mat2APITestCase(unittest.TestCase):
338 headers={'content-type': 'application/json'} 340 headers={'content-type': 'application/json'}
339 ) 341 )
340 342
341 response = json.loads(request.data.decode('utf-8')) 343 response = request.get_json()
342 self.assertEqual(response['message']['download_list'][0], 'max length is 10') 344 self.assertEqual(response['message']['download_list'][0], 'max length is 10')
343 self.assertEqual(request.status_code, 400) 345 self.assertEqual(request.status_code, 400)
344 346
@@ -358,17 +360,18 @@ class Mat2APITestCase(unittest.TestCase):
358 data=json.dumps(post_body), 360 data=json.dumps(post_body),
359 headers={'content-type': 'application/json'} 361 headers={'content-type': 'application/json'}
360 ) 362 )
361 response = json.loads(request.data.decode('utf-8')) 363 response = request.get_json()
362 self.assertEqual('File not found', response['message']) 364 self.assertEqual('File not found', response['message'])
363 365
364 @patch('file_removal_scheduler.random.randint') 366 @patch('matweb.file_removal_scheduler.random.randint')
365 def test_api_upload_leftover(self, randint_mock): 367 def test_api_upload_leftover(self, randint_mock):
366 os.environ['MAT2_MAX_FILE_AGE_FOR_REMOVAL'] = '0' 368 os.environ['MAT2_MAX_FILE_AGE_FOR_REMOVAL'] = '0'
367 app = main.create_app()
368 self.upload_folder = tempfile.mkdtemp() 369 self.upload_folder = tempfile.mkdtemp()
369 app.config.update( 370 app = main.create_app(
370 TESTING=True, 371 test_config={
371 UPLOAD_FOLDER=self.upload_folder 372 'TESTING': True,
373 'UPLOAD_FOLDER': self.upload_folder
374 }
372 ) 375 )
373 app = app.test_client() 376 app = app.test_client()
374 randint_mock.return_value = 1 377 randint_mock.return_value = 1
@@ -385,7 +388,7 @@ class Mat2APITestCase(unittest.TestCase):
385 'FcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="}', 388 'FcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="}',
386 headers={'content-type': 'application/json'} 389 headers={'content-type': 'application/json'}
387 ) 390 )
388 download_link = json.loads(request.data.decode('utf-8'))['download_link'] 391 download_link = request.get_json()['download_link']
389 request = app.get(download_link) 392 request = app.get(download_link)
390 self.assertEqual(code, request.status_code) 393 self.assertEqual(code, request.status_code)
391 394