diff options
| author | jfriedli | 2020-04-23 10:39:35 -0700 |
|---|---|---|
| committer | jfriedli | 2020-04-23 10:39:35 -0700 |
| commit | e1bac8b6a7fd857f38b7bcb678398c82baaa8fd5 (patch) | |
| tree | fa87e526289e455f2f17b86973d08eb6850e721f /test/test_api.py | |
| parent | d14988fa3fa97f549fb8eaf601cb2c687cdce143 (diff) | |
Refactoring
Diffstat (limited to 'test/test_api.py')
| -rw-r--r-- | test/test_api.py | 55 |
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 | |||
| 14 | class Mat2APITestCase(unittest.TestCase): | 14 | class 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 | ||
