|
20 | 20 | generate_docservice_url, |
21 | 21 | generate_id, |
22 | 22 | get_content_configurator, |
23 | | - get_now, |
| 23 | + get_file, get_now, |
24 | 24 | get_revision_changes, |
25 | 25 | load_plugins, |
26 | 26 | prepare_patch, |
@@ -345,6 +345,54 @@ def test_prepare_patch(self): |
345 | 345 | prepare_patch(changes, orig, patch) |
346 | 346 | self.assertEqual(changes, [{'path': '/status', 'value': 'pending', 'op': 'add'}]) |
347 | 347 |
|
| 348 | + def test_get_file(self): |
| 349 | + db_doc_id = '1' * 32 |
| 350 | + key = 'ee9cabd7e0384c9c8006563d4876b462' |
| 351 | + document_id = '6fa5d3a2bdb049f4a13e8b5d8af7bbfd' |
| 352 | + |
| 353 | + request = mock.Mock(**{ |
| 354 | + 'errors': mock.Mock(), |
| 355 | + 'params': {'download': key}, |
| 356 | + 'validated': { |
| 357 | + 'documents': [], |
| 358 | + 'document': {}, |
| 359 | + 'db_doc': mock.Mock(id=db_doc_id) |
| 360 | + } |
| 361 | + }) |
| 362 | + |
| 363 | + self.assertEqual(get_file(request), None) |
| 364 | + self.assertEqual(request.errors.status, 404) |
| 365 | + request.errors.add.assert_called_once_with('url', 'download', 'Not Found') |
| 366 | + |
| 367 | + document = mock.Mock( |
| 368 | + id=document_id, |
| 369 | + url='http://localhost/get/{}?KeyID=&Signature='.format(key), |
| 370 | + title='Test_Document.doc', |
| 371 | + format='application/msword', |
| 372 | + hash=None |
| 373 | + ) |
| 374 | + request.validated['documents'].append(document) |
| 375 | + |
| 376 | + self.assertEqual(get_file(request), document.url) |
| 377 | + self.assertEqual(request.response.status, '302 Moved Temporarily') |
| 378 | + self.assertEqual(request.response.content_type, 'application/msword') |
| 379 | + self.assertEqual(request.response.location, document.url) |
| 380 | + |
| 381 | + document.url = 'http://localhost/api/dummy_test_resource/{}/documents/{}?download={}'.format(db_doc_id, document_id, key) |
| 382 | + with mock.patch('openregistry.api.utils.generate_docservice_url', |
| 383 | + return_value='test') as mock_ds_url: |
| 384 | + self.assertEqual(get_file(request), 'test') |
| 385 | + mock_ds_url.assert_called_once_with( |
| 386 | + request, key, prefix='{}/{}'.format(db_doc_id, document_id)) |
| 387 | + |
| 388 | + document.hash = 'md5:' + '0' * 32 |
| 389 | + self.assertEqual(get_file(request), 'test') |
| 390 | + mock_ds_url.assert_called_with(request, key) |
| 391 | + |
| 392 | + self.assertEqual(request.response.status, '302 Moved Temporarily') |
| 393 | + self.assertEqual(request.response.content_type, 'application/msword') |
| 394 | + self.assertEqual(request.response.location, 'test') |
| 395 | + |
348 | 396 |
|
349 | 397 | def suite(): |
350 | 398 | suite = unittest.TestSuite() |
|
0 commit comments