diff --git a/omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/OrderResource1_10.java b/omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/OrderResource1_10.java index 98b8c0f76..b62beef13 100644 --- a/omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/OrderResource1_10.java +++ b/omod-1.10/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/OrderResource1_10.java @@ -268,13 +268,15 @@ protected PageableResult doSearch(RequestContext context) throws ResponseExcepti if (context.getType() != null) { filterByType(orders, context.getType()); } - + + // if the user indicated a specific sort parameter, apply sort here if (StringUtils.isNotBlank(sortParam)) { List sortedOrder = sortOrdersBasedOnDateActivatedOrDateStopped(orders, sortParam, status); return new NeedsPaging(sortedOrder, context); } else { - return new NeedsPaging(orders, context); + List descSortedOrder = sortOrdersBasedOnDateActivatedOrDateStopped(orders, "DESC", status); + return new NeedsPaging(descSortedOrder, context); } } else { throw new InvalidSearchException("Please provide patientUuid in the patient parameter"); diff --git a/omod-1.10/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java b/omod-1.10/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java index 323a4265c..fdce9aedd 100644 --- a/omod-1.10/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java +++ b/omod-1.10/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java @@ -413,7 +413,7 @@ public void shouldGetTheActiveOrdersForAPatientInTheSpecifiedCareSetting() throw @Test public void shouldGetTheActiveOrdersForAPatientAsOfTheSpecifiedDate() throws Exception { SimpleObject results = deserialize(handle(newGetRequest(getURI(), new Parameter("patient", patientService - .getPatient(2).getUuid()), new Parameter("asOfDate", "2007-12-10")))); + .getPatient(2).getUuid()), new Parameter("status", "active"), new Parameter("asOfDate", "2007-12-10")))); assertEquals(2, Util.getResultsSize(results)); @@ -566,7 +566,8 @@ public void shouldGetOrdersByOrderType() throws Exception { // order service should return all orders when no order type filter specified req = newGetRequest(getURI(), - new Parameter("patient", PATIENT_UUID) + new Parameter("patient", PATIENT_UUID), + new Parameter("status", "active") ); SimpleObject orders = deserialize(handle(req)); ArrayList resp = (ArrayList) PropertyUtils.getProperty(orders, "results"); @@ -598,4 +599,24 @@ public void doSearch_shouldReturnExceptionIfNoPatientUuidIsSpecified() throws Ex ); handle(req); } + + @Test + public void doSearch_shouldReturnOrdersSortedInDescendingOrderByDate() throws Exception { + SimpleObject orders = deserialize(handle(newGetRequest(getURI(), + new Parameter("patient", "da7f524f-27ce-4bb2-86d6-6d1d05312bd5"), + new Parameter("status", "active") + ))); + + List resultList = Util.getResultsList(orders); + assertTrue(resultList.size() >= 2); + + String uuid1 = PropertyUtils.getProperty(resultList.get(0), "uuid").toString(); + String uuid2 = PropertyUtils.getProperty(resultList.get(1), "uuid").toString(); + + Order order1 = orderService.getOrderByUuid(uuid1); + Order order2 = orderService.getOrderByUuid(uuid2); + + // orders sorted by date in descending order (newest first) + assertTrue(order1.getDateActivated().after(order2.getDateActivated())); + } }