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..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; @@ -47,26 +48,23 @@ 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()); - assertNotNull(queueEntryService.getQueueEntryById(1).get().getEndedAt()); + transition.setTransitionDate(new Date()); + queueEntryService.transitionQueueEntry(transition); + assertNotNull(queueEntryService.getQueueEntryById(2).get().getEndedAt()); } }