class HaloNetClient {

    @Api(2.0)
    public Response request(@NonNull HaloRequest haloRequest) throws HaloNetException {
        Request request = haloRequest.buildOkRequest();
        try {
            Response response = mClient.newCall(request).execute();
            if (response.isSuccessful()) {
                return response;
            } else {
                throw new HaloNetworkExceptionResolver().resolve(response);
            }
        } catch (HaloNetException e) {
            throw e;
        } catch (Exception e) {
            throw new HaloNetworkExceptionResolver().resolve(e, request, HaloUtils.isNetworkConnected(mContext));
        }
    }

}

class HaloNetClientTest  {

    private CallbackFlag mCallbackFlag;
    private HaloNetClient mHaloNetClient;
    private HaloFramework mFramework;
    private MockServer mMockServer;
    private String mEndpointURL;

    @Test
    public void thatCanPostARequestWithJSONObjectBody() throws IOException, JSONException {

        enqueueServerFile(mMockServer,GET_TEST_ITEM);
        HaloNetworkApi networkApi = givenAHaloNetWorkApi(mFramework,mEndpointURL);
        HaloRequest request = givenAPostRequestWithJSONObjectBody(networkApi);
        String response = mHaloNetClient.request(request,String.class);
        assertThat(response).isNotNull();
        assertThat(response).isEqualTo("ExampleResponseTestFromNetWork");
    }

}