[ 
https://issues.apache.org/jira/browse/FINERACT-949?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17102791#comment-17102791
 ] 

Michael Vorburger commented on FINERACT-949:
--------------------------------------------

One particularly annoying issue seems to be that RestAssured, before 
FINERACT-884, returns {{List<Map<String, Object>>}} if the JSON contains a 
list, but just {{(LinkedHash)Map}} in case of API replies such as errors? This 
makes it particularly painful to "nicely" write e.g. the {{StaffTest}}, which 
expects a list in reply to {{/api/v1/staff}}, but for 
{{testStaffListFetchWrongState()}} needs to assert the return of an error. 
That's presumably why {{getStaffListWithState()}} was written to return an 
{{java.lang.Object}} ...

... in https://github.com/apache/fineract/pull/842/files?w=1 I've made it 
return a List, and fort he exceptional case of 
{{testStaffListFetchWrongState()}} used {{@Test(expected = 
ClassCastException.class)}}, but that seems more like a wrong hack... :D

There must be a better style? What I'm missing here is some sort of {{Any}} 
with an {{asList()}} and an {{isError()}} and what not.

BTW while that {{Map<String, Object>}} I'm using is slightly better than what 
we have, the Maps' {{Object}} value is still "ugly".

PS: In this context, I also explored using REST Assured's {{getObject()}} with 
a {{TypeRef<>}} instead of {{get()}}, e.g. with this in {{Utils}}, but it turns 
out this actually isn't required, and doesn't really help with the problem 
described above.

{code:java}
    public static <T> T performServerGetObject(final RequestSpecification 
requestSpec, final ResponseSpecification responseSpec,
            final String getURL, final String jsonAttributeToGetBack, final 
TypeRef<T> typeRef) {
        final String json = 
given().spec(requestSpec).expect().spec(responseSpec).log().ifError().when().get(getURL).andReturn().asString();
        if (jsonAttributeToGetBack == null) { return (T) json; }
        return from(json).getObject(jsonAttributeToGetBack, typeRef);
    {code}

> Improve Java API style used for writing integration tests in Fineract
> ---------------------------------------------------------------------
>
>                 Key: FINERACT-949
>                 URL: https://issues.apache.org/jira/browse/FINERACT-949
>             Project: Apache Fineract
>          Issue Type: Improvement
>            Reporter: Michael Vorburger
>            Priority: Major
>              Labels: integration-test, technical, testing
>
> The current (Java) "style" that integration tests are written in in Fineract 
> is... really ugly!
> They are from a bygone era when Java had no generic. All those weird 
> {{java.util.HashSet}}, with a lot of {{java.lang.Object}} etc. in tests 
> are... so not 21st century style.
> I don't really have the answer here, yet - but perhaps others have ideas - 
> how does one write Java (test) code in 2020 which deals with JSON in a nicer 
> way?
> Does REST Assured (http://rest-assured.io) meanwhile offer a better way to do 
> this kind of thing?
> Could https://github.com/skyscreamer/JSONassert be of use and interest for 
> this purpose?
> BTW if using REST Assured better than we are is part of the answer here, then 
> let's first do FINERACT-884.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to