66from pydicom .uid import generate_uid
77
88from models import WorklistItem
9- from services .storage import MWLStorage , PACSStorage , WorklistItemNotFoundError
9+ from services .storage import InvalidStatusTransitionError , MWLStorage , PACSStorage , WorklistItemNotFoundError
1010
1111
1212@pytest .fixture
@@ -228,20 +228,19 @@ def test_get_worklist_item_returns_none(self, mwl_storage):
228228
229229 def test_update_status (self , mwl_storage , result ):
230230 item = self ._insert_item (mwl_storage , result )
231+ mwl_storage .update_status (item .accession_number , "IN PROGRESS" )
231232
232233 returned = mwl_storage .update_status (item .accession_number , "COMPLETED" )
233234
234235 assert returned == item .source_message_id
235-
236236 assert mwl_storage .get_worklist_item (item .accession_number ).status == "COMPLETED"
237237
238- def test_update_status_with_no_update (self , mwl_storage ):
239- result = mwl_storage .update_status ("DOES_NOT_EXIST" , "COMPLETED" )
240-
241- assert result is None
238+ def test_update_status_returns_none_when_not_found (self , mwl_storage ):
239+ assert mwl_storage .update_status ("DOES_NOT_EXIST" , "IN PROGRESS" ) is None
242240
243241 def test_update_status_with_mpps (self , mwl_storage , result ):
244242 item = self ._insert_item (mwl_storage , result )
243+ mwl_storage .update_status (item .accession_number , "IN PROGRESS" )
245244
246245 returned = mwl_storage .update_status (
247246 item .accession_number ,
@@ -250,14 +249,19 @@ def test_update_status_with_mpps(self, mwl_storage, result):
250249 )
251250
252251 assert returned == item .source_message_id
252+ assert mwl_storage .get_worklist_item (item .accession_number ).mpps_instance_uid == "some-uid"
253253
254- with mwl_storage ._get_connection () as conn :
255- row = conn .execute (
256- "SELECT mpps_instance_uid FROM worklist_items WHERE accession_number = ?" ,
257- (item .accession_number ,),
258- ).fetchone ()
254+ def test_update_status_raises_on_invalid_target (self , mwl_storage , result ):
255+ item = self ._insert_item (mwl_storage , result )
259256
260- assert row ["mpps_instance_uid" ] == "some-uid"
257+ with pytest .raises (InvalidStatusTransitionError ):
258+ mwl_storage .update_status (item .accession_number , "SCHEDULED" ) # SCHEDULED is never a valid target
259+
260+ def test_update_status_returns_none_on_wrong_state (self , mwl_storage , result ):
261+ item = self ._insert_item (mwl_storage , result )
262+ mwl_storage .update_status (item .accession_number , "IN PROGRESS" )
263+
264+ assert mwl_storage .update_status (item .accession_number , "IN PROGRESS" ) is None
261265
262266 def test_update_study_instance_uid (self , mwl_storage , result ):
263267 item = self ._insert_item (mwl_storage , result )
@@ -288,6 +292,7 @@ def test_delete_worklist_item_raises(self, mwl_storage):
288292 def test_mpps_instance_exists (self , mwl_storage , result ):
289293 uid = generate_uid ()
290294 item = self ._insert_item (mwl_storage , result )
295+ mwl_storage .update_status (item .accession_number , "IN PROGRESS" )
291296
292297 mwl_storage .update_status (item .accession_number , "COMPLETED" , mpps_instance_uid = uid )
293298
@@ -299,6 +304,7 @@ def test_mpps_instance_not_exists(self, mwl_storage):
299304 def test_get_worklist_item_by_mpps_instance_uid (self , mwl_storage , result ):
300305 uid = generate_uid ()
301306 item = self ._insert_item (mwl_storage , result )
307+ mwl_storage .update_status (item .accession_number , "IN PROGRESS" )
302308
303309 mwl_storage .update_status (item .accession_number , "COMPLETED" , mpps_instance_uid = uid )
304310
@@ -313,18 +319,17 @@ def test_get_worklist_item_by_mpps_instance_uid(self, mwl_storage, result):
313319 def test_get_worklist_item_by_mpps_instance_uid_returns_none (self , mwl_storage ):
314320 assert mwl_storage .get_worklist_item_by_mpps_instance_uid ("nope" ) is None
315321
316- def test_mark_in_progress (self , mwl_storage , result ):
317- item = self ._insert_item (mwl_storage , result ) # inserted with status='SCHEDULED'
322+ def test_update_status_scheduled_to_in_progress (self , mwl_storage , result ):
323+ item = self ._insert_item (mwl_storage , result )
318324
319- assert mwl_storage .mark_in_progress (item .accession_number ) is True
325+ mwl_storage .update_status (item .accession_number , "IN PROGRESS" )
320326
321327 assert mwl_storage .get_worklist_item (item .accession_number ).status == "IN PROGRESS"
322328
323- def test_mark_in_progress_is_idempotent (self , mwl_storage , result ):
329+ def test_update_status_in_progress_to_discontinued (self , mwl_storage , result ):
324330 item = self ._insert_item (mwl_storage , result )
325331 mwl_storage .update_status (item .accession_number , "IN PROGRESS" )
326332
327- assert mwl_storage .mark_in_progress (item .accession_number ) is False
333+ mwl_storage .update_status (item .accession_number , "DISCONTINUED" )
328334
329- def test_mark_in_progress_returns_false_when_not_found (self , mwl_storage ):
330- assert mwl_storage .mark_in_progress ("DOES_NOT_EXIST" ) is False
335+ assert mwl_storage .get_worklist_item (item .accession_number ).status == "DISCONTINUED"
0 commit comments