feat: download - download status aan logs toegevoegd
This commit is contained in:
@@ -178,3 +178,75 @@ class HistoryApiGoldenTest(unittest.TestCase):
|
||||
self.assertEqual(history[0]['operation'], 'move')
|
||||
self.assertEqual(history[0]['status'], 'failed')
|
||||
self.assertEqual(history[0]['error_code'], 'io_error')
|
||||
|
||||
def test_single_file_download_writes_ready_history_item(self) -> None:
|
||||
(self.root1 / 'report.txt').write_text('hello download', encoding='utf-8')
|
||||
|
||||
response = self._request('GET', '/api/files/download?path=storage1/report.txt')
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
history = self._request('GET', '/api/history').json()['items']
|
||||
self.assertEqual(history[0]['operation'], 'download')
|
||||
self.assertEqual(history[0]['status'], 'ready')
|
||||
self.assertEqual(history[0]['source'], 'single_file')
|
||||
self.assertEqual(history[0]['path'], 'storage1/report.txt')
|
||||
self.assertEqual(history[0]['destination'], 'report.txt')
|
||||
self.assertEqual(history[0]['error_code'], None)
|
||||
self.assertEqual(history[0]['error_message'], None)
|
||||
|
||||
def test_single_directory_zip_download_writes_ready_history_item(self) -> None:
|
||||
(self.root1 / 'docs').mkdir()
|
||||
(self.root1 / 'docs' / 'a.txt').write_text('A', encoding='utf-8')
|
||||
|
||||
response = self._request('GET', '/api/files/download?path=storage1/docs')
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
history = self._request('GET', '/api/history').json()['items']
|
||||
self.assertEqual(history[0]['operation'], 'download')
|
||||
self.assertEqual(history[0]['status'], 'ready')
|
||||
self.assertEqual(history[0]['source'], 'single_directory_zip')
|
||||
self.assertEqual(history[0]['path'], 'storage1/docs')
|
||||
self.assertEqual(history[0]['destination'], 'docs.zip')
|
||||
|
||||
def test_multi_mixed_zip_download_writes_ready_history_item(self) -> None:
|
||||
(self.root1 / 'readme.txt').write_text('R', encoding='utf-8')
|
||||
(self.root1 / 'photos').mkdir()
|
||||
(self.root1 / 'photos' / 'img.txt').write_text('P', encoding='utf-8')
|
||||
|
||||
response = self._request('GET', '/api/files/download?path=storage1/readme.txt&path=storage1/photos')
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
history = self._request('GET', '/api/history').json()['items']
|
||||
self.assertEqual(history[0]['operation'], 'download')
|
||||
self.assertEqual(history[0]['status'], 'ready')
|
||||
self.assertEqual(history[0]['source'], 'multi_zip')
|
||||
self.assertEqual(history[0]['path'], 'storage1/readme.txt, storage1/photos')
|
||||
self.assertRegex(history[0]['destination'], r'^kodidownload-\d{8}-\d{6}\.zip$')
|
||||
|
||||
def test_download_preflight_failure_writes_preflight_failed_history_item(self) -> None:
|
||||
target = self.root1 / 'real.txt'
|
||||
target.write_text('x', encoding='utf-8')
|
||||
(self.root1 / 'docs').mkdir()
|
||||
(self.root1 / 'docs' / 'link.txt').symlink_to(target)
|
||||
|
||||
response = self._request('GET', '/api/files/download?path=storage1/docs')
|
||||
|
||||
self.assertEqual(response.status_code, 409)
|
||||
history = self._request('GET', '/api/history').json()['items']
|
||||
self.assertEqual(history[0]['operation'], 'download')
|
||||
self.assertEqual(history[0]['status'], 'preflight_failed')
|
||||
self.assertEqual(history[0]['source'], 'single_directory_zip')
|
||||
self.assertEqual(history[0]['path'], 'storage1/docs')
|
||||
self.assertEqual(history[0]['destination'], 'docs.zip')
|
||||
self.assertEqual(history[0]['error_code'], 'download_preflight_failed')
|
||||
self.assertEqual(history[0]['error_message'], 'Zip download preflight failed')
|
||||
|
||||
def test_download_history_uses_server_certain_statuses_only(self) -> None:
|
||||
(self.root1 / 'report.txt').write_text('hello download', encoding='utf-8')
|
||||
|
||||
response = self._request('GET', '/api/files/download?path=storage1/report.txt')
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
history = self._request('GET', '/api/history').json()['items']
|
||||
self.assertIn(history[0]['status'], {'requested', 'ready', 'preflight_failed', 'failed'})
|
||||
self.assertNotIn(history[0]['status'], {'completed', 'downloaded', 'saved'})
|
||||
|
||||
Reference in New Issue
Block a user