Skip to content

Commit ee50746

Browse files
committed
Raise when update/delete by accession number fails to find record
1 parent 85d4c2a commit ee50746

2 files changed

Lines changed: 44 additions & 4 deletions

File tree

src/services/storage.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,12 @@ class WorklistItem:
206206
)
207207

208208

209+
class WorklistItemNotFoundError(Exception):
210+
"""Raised when a worklist item is not found in storage."""
211+
212+
pass
213+
214+
209215
class MWLStorage(Storage):
210216
def __init__(self, db_path: str = "/var/lib/pacs/worklist.db"):
211217
"""
@@ -379,7 +385,10 @@ def update_study_instance_uid(self, accession_number: str, study_instance_uid: s
379385
)
380386
conn.commit()
381387

382-
return cursor.rowcount > 0
388+
if cursor.rowcount == 0:
389+
raise WorklistItemNotFoundError(f"Worklist item not found: {accession_number}")
390+
391+
return True
383392

384393
def delete_worklist_item(self, accession_number: str) -> bool:
385394
"""
@@ -389,9 +398,13 @@ def delete_worklist_item(self, accession_number: str) -> bool:
389398
accession_number: The accession number to delete
390399
391400
Returns:
392-
True if item was deleted, False if not found
401+
True if item was deleted, raises WorklistItemNotFoundError if not found
393402
"""
394403
with self._get_connection() as conn:
395404
cursor = conn.execute("DELETE FROM worklist_items WHERE accession_number = ?", (accession_number,))
396405
conn.commit()
397-
return cursor.rowcount > 0
406+
407+
if cursor.rowcount == 0:
408+
raise WorklistItemNotFoundError(f"Worklist item not found: {accession_number}")
409+
410+
return True

tests/services/test_storage.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import pytest
66
from pydicom.uid import generate_uid
77

8-
from services.storage import MWLStorage, PACSStorage, WorklistItem
8+
from services.storage import MWLStorage, PACSStorage, WorklistItem, WorklistItemNotFoundError
99

1010

1111
@patch("services.storage.sqlite3")
@@ -424,6 +424,20 @@ def test_update_study_instance_uid(self, mock_db, tmp_dir):
424424

425425
assert result is True
426426

427+
def test_update_study_instance_uid_raises(self, mock_db, tmp_dir):
428+
study_instance_uid = "some-uid"
429+
mock_connection = MagicMock()
430+
mock_cursor = PropertyMock()
431+
mock_cursor.rowcount = 0
432+
mock_connection.execute.return_value = mock_cursor
433+
mock_db.connect.return_value = mock_connection
434+
435+
subject = MWLStorage(tmp_dir)
436+
mock_connection.reset_mock()
437+
438+
with pytest.raises(WorklistItemNotFoundError):
439+
subject.update_study_instance_uid("ACC123456", study_instance_uid)
440+
427441
def test_delete_worklist_item(self, mock_db, tmp_dir):
428442
mock_connection = MagicMock()
429443
mock_cursor = PropertyMock()
@@ -442,3 +456,16 @@ def test_delete_worklist_item(self, mock_db, tmp_dir):
442456
mock_connection.commit.assert_called_once()
443457

444458
assert result is True
459+
460+
def test_delete_worklist_item_raises(self, mock_db, tmp_dir):
461+
mock_connection = MagicMock()
462+
mock_cursor = PropertyMock()
463+
mock_cursor.rowcount = 0
464+
mock_connection.execute.return_value = mock_cursor
465+
mock_db.connect.return_value = mock_connection
466+
467+
subject = MWLStorage(tmp_dir)
468+
mock_connection.reset_mock()
469+
470+
with pytest.raises(WorklistItemNotFoundError):
471+
subject.delete_worklist_item("ACC123456")

0 commit comments

Comments
 (0)