feat: download - download status aan logs toegevoegd

This commit is contained in:
kodi
2026-03-14 13:53:53 +01:00
parent 8ea2bd1498
commit 592b10acc2
8 changed files with 228 additions and 13 deletions
@@ -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'})