From b19d388e20a9c2e756aa7b99a495bf1286a56838 Mon Sep 17 00:00:00 2001 From: RoshanMadival08 Date: Sun, 15 Mar 2026 13:11:55 +0530 Subject: [PATCH] O3-5485 Fix NaN average wait time when all queue entries have null endedAt --- .../module/queue/utils/QueueUtils.java | 10 ++++++- .../module/queue/utils/QueueUtilsTest.java | 28 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/org/openmrs/module/queue/utils/QueueUtils.java b/api/src/main/java/org/openmrs/module/queue/utils/QueueUtils.java index 20a7e44d..deec43e4 100644 --- a/api/src/main/java/org/openmrs/module/queue/utils/QueueUtils.java +++ b/api/src/main/java/org/openmrs/module/queue/utils/QueueUtils.java @@ -62,16 +62,24 @@ public static double computeAverageWaitTimeInMinutes(List queueEntri if (queueEntries != null && !queueEntries.isEmpty()) { double totalWaitTime = 0.0; int numEntries = 0; + for (QueueEntry e : queueEntries) { LocalDateTime startedAt = convertToLocalDateTimeInSystemDefaultTimezone(e.getStartedAt()); LocalDateTime endedAt = convertToLocalDateTimeInSystemDefaultTimezone(e.getEndedAt()); + if (startedAt != null && endedAt != null) { totalWaitTime += Duration.between(startedAt, endedAt).toMinutes(); numEntries++; } } - averageWaitTime = totalWaitTime / numEntries; + + if (numEntries == 0) { + averageWaitTime = 0.0; + } else { + averageWaitTime = totalWaitTime / numEntries; + } } + return averageWaitTime; } diff --git a/api/src/test/java/org/openmrs/module/queue/utils/QueueUtilsTest.java b/api/src/test/java/org/openmrs/module/queue/utils/QueueUtilsTest.java index 8c927e8c..1eb59214 100644 --- a/api/src/test/java/org/openmrs/module/queue/utils/QueueUtilsTest.java +++ b/api/src/test/java/org/openmrs/module/queue/utils/QueueUtilsTest.java @@ -12,9 +12,12 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import org.junit.Test; +import org.openmrs.module.queue.model.QueueEntry; public class QueueUtilsTest { @@ -52,4 +55,29 @@ public void shouldReturnTrueIfDatesOverlap() { assertThat(QueueUtils.datesOverlap(AUG_3, AUG_4, AUG_1, AUG_2), is(false)); // one after two assertThat(QueueUtils.datesOverlap(AUG_1, AUG_2, AUG_1, AUG_3), is(true)); // one starts when two starts } + + @Test + public void shouldReturnZeroWhenQueueEntriesListIsEmpty() { + + List entries = new ArrayList<>(); + + double result = QueueUtils.computeAverageWaitTimeInMinutes(entries); + + assertThat(result, is(0.0)); + } + + @Test + public void shouldReturnZeroWhenAllEntriesHaveNullEndedAt() { + + QueueEntry entry = new QueueEntry(); + entry.setStartedAt(new Date()); + entry.setEndedAt(null); + + List entries = new ArrayList<>(); + entries.add(entry); + + double result = QueueUtils.computeAverageWaitTimeInMinutes(entries); + + assertThat(result, is(0.0)); + } }