Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/archivematica/MCPServer/server/packages.py
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ def wrap(*args, **kwargs):
except Exception as err:
# The main purpose of this decorator is to update the Transfer with
# the new state (fail). If the Transfer does not exist we give up.
if isinstance(err, models.Transfer.DoesNotExist, ValidationError):
if isinstance(err, (models.Transfer.DoesNotExist, ValidationError)):
raise
else:
logger.exception("Exception occurred during transfer processing")
Expand Down
32 changes: 32 additions & 0 deletions tests/MCPServer/test_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from archivematica.MCPServer.server.packages import SIP
from archivematica.MCPServer.server.packages import Package
from archivematica.MCPServer.server.packages import Transfer
from archivematica.MCPServer.server.packages import _capture_transfer_failure
from archivematica.MCPServer.server.packages import _determine_transfer_paths
from archivematica.MCPServer.server.packages import _move_to_internal_shared_dir
from archivematica.MCPServer.server.packages import (
Expand Down Expand Up @@ -430,3 +431,34 @@ def test_create_package(tmp_path, admin_user, settings):

# Verify a transfer was added.
assert models.Transfer.objects.count() == 1


def test_capture_transfer_failure_propagates_transfer_does_not_exist():
@_capture_transfer_failure
def fn():
raise models.Transfer.DoesNotExist

with pytest.raises(models.Transfer.DoesNotExist):
fn()


def test_capture_transfer_failure_propagates_validation_error():
@_capture_transfer_failure
def fn():
raise ValidationError("invalid argument")

with pytest.raises(ValidationError):
fn()


def test_capture_transfer_failure_logs_other_exceptions():
@_capture_transfer_failure
def fn():
raise RuntimeError("something went wrong")

with mock.patch("archivematica.MCPServer.server.packages.logger") as mock_logger:
fn()

mock_logger.exception.assert_called_once_with(
"Exception occurred during transfer processing"
)
Loading