feat: restore report files and export claim amounts
This commit is contained in:
80
tests/apps/core/test_restore_report_upload_files_command.py
Normal file
80
tests/apps/core/test_restore_report_upload_files_command.py
Normal file
@@ -0,0 +1,80 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import hashlib
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
from apps.core.models import ReportUpload, ReportUploadStatus
|
||||
from django.core.management import call_command
|
||||
from django.test import TestCase, override_settings
|
||||
|
||||
|
||||
class RestoreReportUploadFilesCommandTest(TestCase):
|
||||
def _upload(self, *, content: bytes) -> ReportUpload:
|
||||
digest = hashlib.sha256(content).hexdigest()
|
||||
upload = ReportUpload.objects.create(
|
||||
form="f1",
|
||||
load_batch=101,
|
||||
original_file="report_uploads/f1/restored/report.xlsx",
|
||||
file_name="report.xlsx",
|
||||
content_type=(
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
||||
),
|
||||
file_size=len(content),
|
||||
file_hash=digest,
|
||||
status=ReportUploadStatus.SUCCESS,
|
||||
)
|
||||
return upload
|
||||
|
||||
def test_dry_run_then_restore_and_repeat(self):
|
||||
content = b"exact original workbook bytes"
|
||||
upload = self._upload(content=content)
|
||||
|
||||
with tempfile.TemporaryDirectory() as media_dir, tempfile.TemporaryDirectory() as source_dir:
|
||||
source_path = Path(source_dir) / "original.xlsx"
|
||||
source_path.write_bytes(content)
|
||||
with override_settings(MEDIA_ROOT=media_dir):
|
||||
dry_run_result = call_command(
|
||||
"restore_report_upload_files",
|
||||
source_dir=[source_dir],
|
||||
dry_run=True,
|
||||
)
|
||||
self.assertIn('"restored": 1', dry_run_result)
|
||||
self.assertFalse(
|
||||
upload.original_file.storage.exists(upload.original_file.name)
|
||||
)
|
||||
|
||||
restore_result = call_command(
|
||||
"restore_report_upload_files",
|
||||
source_dir=[source_dir],
|
||||
)
|
||||
self.assertIn('"restored": 1', restore_result)
|
||||
with upload.original_file.storage.open(
|
||||
upload.original_file.name, "rb"
|
||||
) as handle:
|
||||
self.assertEqual(handle.read(), content)
|
||||
|
||||
repeat_result = call_command(
|
||||
"restore_report_upload_files",
|
||||
source_dir=[source_dir],
|
||||
)
|
||||
self.assertIn('"already_present": 1', repeat_result)
|
||||
|
||||
def test_existing_hash_mismatch_is_not_overwritten(self):
|
||||
content = b"expected workbook"
|
||||
upload = self._upload(content=content)
|
||||
|
||||
with tempfile.TemporaryDirectory() as media_dir, tempfile.TemporaryDirectory() as source_dir:
|
||||
(Path(source_dir) / "original.xlsx").write_bytes(content)
|
||||
target_path = Path(media_dir) / upload.original_file.name
|
||||
target_path.parent.mkdir(parents=True)
|
||||
target_path.write_bytes(b"different bytes")
|
||||
|
||||
with override_settings(MEDIA_ROOT=media_dir):
|
||||
result = call_command(
|
||||
"restore_report_upload_files",
|
||||
source_dir=[source_dir],
|
||||
)
|
||||
|
||||
self.assertIn('"hash_mismatch": 1', result)
|
||||
self.assertEqual(target_path.read_bytes(), b"different bytes")
|
||||
Reference in New Issue
Block a user