From 314d8c55d038f344cefc182e9612ca549b1f53d3 Mon Sep 17 00:00:00 2001 From: Chi Bong Ho Date: Fri, 5 Sep 2025 12:11:05 -0400 Subject: [PATCH 1/2] (fix) O3-4985 end current queue entry before checking whether it conflicts with new entry when transitioning --- .../module/queue/api/impl/QueueEntryServiceImpl.java | 7 ++++--- .../queue/tasks/AutoCloseVisitQueueEntryTask.java | 2 +- .../module/queue/api/QueueEntryServiceTest.java | 12 ++++-------- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/queue/api/impl/QueueEntryServiceImpl.java b/api/src/main/java/org/openmrs/module/queue/api/impl/QueueEntryServiceImpl.java index 80ee712..4383bc2 100644 --- a/api/src/main/java/org/openmrs/module/queue/api/impl/QueueEntryServiceImpl.java +++ b/api/src/main/java/org/openmrs/module/queue/api/impl/QueueEntryServiceImpl.java @@ -134,15 +134,16 @@ private boolean isDuplicate(QueueEntry queueEntry) { public QueueEntry transitionQueueEntry(QueueEntryTransition queueEntryTransition) { // Create a new queue entry QueueEntry queueEntryToStart = queueEntryTransition.constructNewQueueEntry(); - if (isDuplicate(queueEntryToStart)) { - throw new DuplicateQueueEntryException("queue.entry.duplicate.patient"); - } // End the initial queue entry QueueEntry queueEntryToStop = queueEntryTransition.getQueueEntryToTransition(); queueEntryToStop.setEndedAt(queueEntryTransition.getTransitionDate()); getProxiedQueueEntryService().saveQueueEntry(queueEntryToStop); + if (isDuplicate(queueEntryToStart)) { + throw new DuplicateQueueEntryException("queue.entry.duplicate.patient"); + } + // Save the new queue entry return getProxiedQueueEntryService().saveQueueEntry(queueEntryToStart); } diff --git a/api/src/main/java/org/openmrs/module/queue/tasks/AutoCloseVisitQueueEntryTask.java b/api/src/main/java/org/openmrs/module/queue/tasks/AutoCloseVisitQueueEntryTask.java index 8dfc3d1..0b218fa 100644 --- a/api/src/main/java/org/openmrs/module/queue/tasks/AutoCloseVisitQueueEntryTask.java +++ b/api/src/main/java/org/openmrs/module/queue/tasks/AutoCloseVisitQueueEntryTask.java @@ -78,7 +78,7 @@ protected List getActiveVisitQueueEntries() { /** * @param queueEntry the QueueEntry to save - */ + */ protected void saveQueueEntry(QueueEntry queueEntry) { Context.getService(QueueEntryService.class).saveQueueEntry(queueEntry); } diff --git a/integration-tests/src/test/java/org/openmrs/module/queue/api/QueueEntryServiceTest.java b/integration-tests/src/test/java/org/openmrs/module/queue/api/QueueEntryServiceTest.java index e16c535..ba83171 100644 --- a/integration-tests/src/test/java/org/openmrs/module/queue/api/QueueEntryServiceTest.java +++ b/integration-tests/src/test/java/org/openmrs/module/queue/api/QueueEntryServiceTest.java @@ -47,23 +47,19 @@ public void setup() { INITIAL_DATASET_XML.forEach(this::executeDataSet); } - @Test + @Test(expected = DuplicateQueueEntryException.class) public void transitionQueueEntryShouldNotEndInitialIfNewIsDuplicate() { QueueEntry queueEntry = queueEntryService.getQueueEntryById(3).get(); QueueEntryTransition transition = new QueueEntryTransition(); transition.setQueueEntryToTransition(queueEntry); transition.setTransitionDate(queueEntry.getStartedAt()); - try { - queueEntryService.transitionQueueEntry(transition); - } - catch (DuplicateQueueEntryException ex) { - assertNull(queueEntryService.getQueueEntryById(3).get().getEndedAt()); - } + queueEntryService.transitionQueueEntry(transition); } @Test public void transitionQueueEntryShouldEndInitialIfNewIsNotDuplicate() { - QueueEntry queueEntry = queueEntryService.getQueueEntryById(1).get(); + QueueEntry queueEntry = queueEntryService.getQueueEntryById(2).get(); + assertNull(queueEntry.getEndedAt()); QueueEntryTransition transition = new QueueEntryTransition(); transition.setQueueEntryToTransition(queueEntry); transition.setTransitionDate(queueEntry.getStartedAt()); From aca81a45b2ff848f394309317f5a1e576ff7a33d Mon Sep 17 00:00:00 2001 From: Chi Bong Ho Date: Mon, 8 Sep 2025 11:45:05 -0400 Subject: [PATCH 2/2] fix test --- .../org/openmrs/module/queue/api/QueueEntryServiceTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/integration-tests/src/test/java/org/openmrs/module/queue/api/QueueEntryServiceTest.java b/integration-tests/src/test/java/org/openmrs/module/queue/api/QueueEntryServiceTest.java index ba83171..ed48d01 100644 --- a/integration-tests/src/test/java/org/openmrs/module/queue/api/QueueEntryServiceTest.java +++ b/integration-tests/src/test/java/org/openmrs/module/queue/api/QueueEntryServiceTest.java @@ -13,6 +13,7 @@ import static org.junit.Assert.assertNull; import java.util.Arrays; +import java.util.Date; import java.util.List; import org.junit.Before; @@ -62,7 +63,8 @@ public void transitionQueueEntryShouldEndInitialIfNewIsNotDuplicate() { assertNull(queueEntry.getEndedAt()); QueueEntryTransition transition = new QueueEntryTransition(); transition.setQueueEntryToTransition(queueEntry); - transition.setTransitionDate(queueEntry.getStartedAt()); - assertNotNull(queueEntryService.getQueueEntryById(1).get().getEndedAt()); + transition.setTransitionDate(new Date()); + queueEntryService.transitionQueueEntry(transition); + assertNotNull(queueEntryService.getQueueEntryById(2).get().getEndedAt()); } }