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,26 +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
236+ assert mwl_storage .get_worklist_item (item .accession_number ).status == "COMPLETED"
235237
236- with mwl_storage ._get_connection () as conn :
237- row = conn .execute (
238- "SELECT status FROM worklist_items WHERE accession_number = ?" ,
239- (item .accession_number ,),
240- ).fetchone ()
241-
242- assert row ["status" ] == "COMPLETED"
243-
244- def test_update_status_with_no_update (self , mwl_storage ):
245- result = mwl_storage .update_status ("DOES_NOT_EXIST" , "COMPLETED" )
246-
247- 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
248240
249241 def test_update_status_with_mpps (self , mwl_storage , result ):
250242 item = self ._insert_item (mwl_storage , result )
243+ mwl_storage .update_status (item .accession_number , "IN PROGRESS" )
251244
252245 returned = mwl_storage .update_status (
253246 item .accession_number ,
@@ -256,14 +249,19 @@ def test_update_status_with_mpps(self, mwl_storage, result):
256249 )
257250
258251 assert returned == item .source_message_id
252+ assert mwl_storage .get_worklist_item (item .accession_number ).mpps_instance_uid == "some-uid"
259253
260- with mwl_storage ._get_connection () as conn :
261- row = conn .execute (
262- "SELECT mpps_instance_uid FROM worklist_items WHERE accession_number = ?" ,
263- (item .accession_number ,),
264- ).fetchone ()
254+ def test_update_status_raises_on_invalid_target (self , mwl_storage , result ):
255+ item = self ._insert_item (mwl_storage , result )
265256
266- 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
267265
268266 def test_update_study_instance_uid (self , mwl_storage , result ):
269267 item = self ._insert_item (mwl_storage , result )
@@ -294,6 +292,7 @@ def test_delete_worklist_item_raises(self, mwl_storage):
294292 def test_mpps_instance_exists (self , mwl_storage , result ):
295293 uid = generate_uid ()
296294 item = self ._insert_item (mwl_storage , result )
295+ mwl_storage .update_status (item .accession_number , "IN PROGRESS" )
297296
298297 mwl_storage .update_status (item .accession_number , "COMPLETED" , mpps_instance_uid = uid )
299298
@@ -305,6 +304,7 @@ def test_mpps_instance_not_exists(self, mwl_storage):
305304 def test_get_worklist_item_by_mpps_instance_uid (self , mwl_storage , result ):
306305 uid = generate_uid ()
307306 item = self ._insert_item (mwl_storage , result )
307+ mwl_storage .update_status (item .accession_number , "IN PROGRESS" )
308308
309309 mwl_storage .update_status (item .accession_number , "COMPLETED" , mpps_instance_uid = uid )
310310
@@ -318,3 +318,18 @@ def test_get_worklist_item_by_mpps_instance_uid(self, mwl_storage, result):
318318
319319 def test_get_worklist_item_by_mpps_instance_uid_returns_none (self , mwl_storage ):
320320 assert mwl_storage .get_worklist_item_by_mpps_instance_uid ("nope" ) is None
321+
322+ def test_update_status_scheduled_to_in_progress (self , mwl_storage , result ):
323+ item = self ._insert_item (mwl_storage , result )
324+
325+ mwl_storage .update_status (item .accession_number , "IN PROGRESS" )
326+
327+ assert mwl_storage .get_worklist_item (item .accession_number ).status == "IN PROGRESS"
328+
329+ def test_update_status_in_progress_to_discontinued (self , mwl_storage , result ):
330+ item = self ._insert_item (mwl_storage , result )
331+ mwl_storage .update_status (item .accession_number , "IN PROGRESS" )
332+
333+ mwl_storage .update_status (item .accession_number , "DISCONTINUED" )
334+
335+ assert mwl_storage .get_worklist_item (item .accession_number ).status == "DISCONTINUED"
0 commit comments