diff --git a/apps/worker/services/processing/merging.py b/apps/worker/services/processing/merging.py index bc5b63d4d..0e26d33f4 100644 --- a/apps/worker/services/processing/merging.py +++ b/apps/worker/services/processing/merging.py @@ -129,8 +129,8 @@ def update_uploads( if result["successful"]: update = { - "state_id": UploadState.PROCESSED.db_id, - "state": "processed", + "state_id": UploadState.MERGED.db_id, + "state": "merged", } report = reports.get(upload_id) if report is not None: diff --git a/apps/worker/services/tests/test_merging.py b/apps/worker/services/tests/test_merging.py new file mode 100644 index 000000000..eb8f99d33 --- /dev/null +++ b/apps/worker/services/tests/test_merging.py @@ -0,0 +1,68 @@ +import pytest + +from database.tests.factories.core import ( + CommitFactory, + ReportFactory, + RepositoryFactory, + UploadFactory, +) +from services.processing.merging import update_uploads +from services.processing.types import MergeResult, ProcessingResult +from shared.reports.enums import UploadState +from shared.yaml import UserYaml + + +@pytest.mark.django_db(databases={"default"}) +class TestUpdateUploadsState: + def test_successful_uploads_set_to_merged(self, dbsession): + repository = RepositoryFactory.create() + commit = CommitFactory.create(repository=repository) + report = ReportFactory.create(commit=commit) + upload = UploadFactory.create( + report=report, + state="started", + state_id=UploadState.UPLOADED.db_id, + ) + dbsession.add_all([repository, commit, report, upload]) + dbsession.flush() + + processing_results: list[ProcessingResult] = [ + {"upload_id": upload.id_, "successful": True, "arguments": {}}, + ] + merge_result = MergeResult( + session_mapping={upload.id_: 0}, deleted_sessions=set() + ) + + update_uploads(dbsession, UserYaml({}), processing_results, [], merge_result) + + dbsession.refresh(upload) + assert upload.state_id == UploadState.MERGED.db_id + assert upload.state == "merged" + + def test_failed_uploads_set_to_error(self, dbsession): + repository = RepositoryFactory.create() + commit = CommitFactory.create(repository=repository) + report = ReportFactory.create(commit=commit) + upload = UploadFactory.create( + report=report, + state="started", + state_id=UploadState.UPLOADED.db_id, + ) + dbsession.add_all([repository, commit, report, upload]) + dbsession.flush() + + processing_results: list[ProcessingResult] = [ + { + "upload_id": upload.id_, + "successful": False, + "arguments": {}, + "error": {"code": "report_empty", "params": {}}, + }, + ] + merge_result = MergeResult(session_mapping={}, deleted_sessions=set()) + + update_uploads(dbsession, UserYaml({}), processing_results, [], merge_result) + + dbsession.refresh(upload) + assert upload.state_id == UploadState.ERROR.db_id + assert upload.state == "error" diff --git a/apps/worker/tasks/tests/unit/test_upload_finisher_task.py b/apps/worker/tasks/tests/unit/test_upload_finisher_task.py index e325ef65b..1ea95c007 100644 --- a/apps/worker/tasks/tests/unit/test_upload_finisher_task.py +++ b/apps/worker/tasks/tests/unit/test_upload_finisher_task.py @@ -1252,11 +1252,11 @@ def mock_process_reports( .first() ) assert updated_upload is not None, "Upload should exist" - assert updated_upload.state == "processed", ( - f"Upload state should be 'processed', got '{updated_upload.state}'" + assert updated_upload.state == "merged", ( + f"Upload state should be 'merged', got '{updated_upload.state}'" ) - assert updated_upload.state_id == UploadState.PROCESSED.db_id, ( - f"Upload state_id should be {UploadState.PROCESSED.db_id}, got {updated_upload.state_id}" + assert updated_upload.state_id == UploadState.MERGED.db_id, ( + f"Upload state_id should be {UploadState.MERGED.db_id}, got {updated_upload.state_id}" ) mock_process = mocker.patch.object(