details: https://code.openbravo.com/erp/devel/pi/rev/3c52c4d0b73b changeset: 26271:3c52c4d0b73b user: Asier Lostalé <asier.lostale <at> openbravo.com> date: Thu Mar 26 15:15:16 2015 +0100 summary: related to bug 29385: Distinct parameter is not working in JSON REST web services
Added test cases details: https://code.openbravo.com/erp/devel/pi/rev/088b4114ac74 changeset: 26272:088b4114ac74 user: Asier Lostalé <asier.lostale <at> openbravo.com> date: Thu Mar 26 15:21:18 2015 +0100 summary: fixed bug 29385: Distinct parameter is not working in JSON REST web services Using _distinct property in JSON REST webservices resulted in an incorrectly generated query. There were 2 problems: - Entity name for was set in the fetch method, after the refactor done to fix issue #25182, entity is different in case of using _distinct, and it is managed by QueryService. - This refactor also requires of using aliases to work diffstat: modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java | 3 +- modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonRestServlet.java | 3 +- src-test/src/org/openbravo/test/webservice/JSONWebServices.java | 38 +++++++++- 3 files changed, 40 insertions(+), 4 deletions(-) diffs (96 lines): diff -r fae899b56870 -r 088b4114ac74 modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java --- a/modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java Thu Mar 26 13:49:13 2015 +0100 +++ b/modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java Thu Mar 26 15:21:18 2015 +0100 @@ -257,9 +257,8 @@ public void fetch(Map<String, String> parameters, QueryResultWriter writer) { long t = System.currentTimeMillis(); - final String entityName = parameters.get(JsonConstants.ENTITYNAME); + final DataEntityQueryService queryService = createSetQueryService(parameters, false); - queryService.setEntityName(entityName); String selectedProperties = parameters.get(JsonConstants.SELECTEDPROPERTIES_PARAMETER); diff -r fae899b56870 -r 088b4114ac74 modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonRestServlet.java --- a/modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonRestServlet.java Thu Mar 26 13:49:13 2015 +0100 +++ b/modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonRestServlet.java Thu Mar 26 15:21:18 2015 +0100 @@ -11,7 +11,7 @@ * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SLU - * All portions are Copyright (C) 2009-2014 Openbravo SLU + * All portions are Copyright (C) 2009-2015 Openbravo SLU * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************ @@ -155,6 +155,7 @@ writeResult(response, result); } else { JSONStreamWriter writer = new JSONStreamWriter(response, parameters); + parameters.put(JsonConstants.USE_ALIAS, "true"); DefaultJsonDataService.getInstance().fetch(parameters, writer); writer.close(); } diff -r fae899b56870 -r 088b4114ac74 src-test/src/org/openbravo/test/webservice/JSONWebServices.java --- a/src-test/src/org/openbravo/test/webservice/JSONWebServices.java Thu Mar 26 13:49:13 2015 +0100 +++ b/src-test/src/org/openbravo/test/webservice/JSONWebServices.java Thu Mar 26 15:21:18 2015 +0100 @@ -11,7 +11,7 @@ * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SLU - * All portions are Copyright (C) 2014 Openbravo SLU + * All portions are Copyright (C) 2014-2015 Openbravo SLU * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************ @@ -20,6 +20,7 @@ package org.openbravo.test.webservice; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; @@ -90,6 +91,41 @@ assertThat("Properties received in JSON", receivedProperties, is(equalTo(expectedProperties))); } + /** + * Asserts JSON REST web services support distinct parameter. + * + * See https://issues.openbravo.com/view.php?id=29385 + */ + @Test + public void distinctParameterShouldWork() throws JSONException { + JSONObject resp = new JSONObject(request("ADPreference", null, "_distinct=module", "GET")) + .getJSONObject("response"); + + assertThat("Sucess status", resp.getInt("status"), is(0)); + assertThat("Total Rows", resp.getInt("totalRows"), is(greaterThan(0))); + + JSONObject aRecord = resp.getJSONArray("data").getJSONObject(0); + assertThat("Row's entity", aRecord.getString("_entityName"), is(equalTo("ADModule"))); + } + + /** + * Asserts JSON REST web services support distinct parameter for Organization, this case is + * internally managed differently. + * + * See https://issues.openbravo.com/view.php?id=29385 + */ + @Test + public void distinctOrgParameterShouldWork() throws JSONException { + JSONObject resp = new JSONObject(request("ADPreference", null, "_distinct=organization", "GET")) + .getJSONObject("response"); + + assertThat("Sucess status", resp.getInt("status"), is(0)); + assertThat("Total Rows", resp.getInt("totalRows"), is(greaterThan(0))); + + JSONObject aRecord = resp.getJSONArray("data").getJSONObject(0); + assertThat("Row's entity", aRecord.getString("_entityName"), is(equalTo("Organization"))); + } + private String request(String entityName, String id, String queryPart, String method) { String wsPart = entityName + (id == null ? "" : "/" + id) + (queryPart == null ? "" : "?" + queryPart); ------------------------------------------------------------------------------ Dive into the World of Parallel Programming The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ Openbravo-commits mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openbravo-commits
