1+ package org .gitlab4j .api ;
2+
3+ import java .io .ByteArrayInputStream ;
4+ import java .io .InputStreamReader ;
5+ import java .util .List ;
6+
7+ import javax .ws .rs .core .GenericType ;
8+ import javax .ws .rs .core .Response ;
9+
10+ /**
11+ * This class can be used as a spy for Mockito to test the individual APIs getXxxxx() methods without the
12+ * need to have a GitLab server available.
13+ *
14+ * Supports getXxxxx() methods that return a List of items, single items, and Optional items.
15+ */
16+ public abstract class FakeResponse extends Response {
17+
18+ private List <?> responseList ;
19+ private ByteArrayInputStream responseInputStream ;
20+ private Object responseItem ;
21+ private int perPage = 20 ;
22+
23+ public <T > void init (Class <T > type , String itemFilename , String listFilename ) throws Exception {
24+
25+ if (itemFilename != null ) {
26+ InputStreamReader reader = new InputStreamReader (TestGitLabApiBeans .class .getResourceAsStream (itemFilename ));
27+ responseItem = JsonUtils .unmarshal (type , reader );
28+ } else {
29+ responseItem = null ;
30+ }
31+
32+ if (listFilename != null ) {
33+ String listJson = JsonUtils .readResource (listFilename );
34+ responseList = (List <?>) JsonUtils .unmarshalList (type , listJson );
35+ responseInputStream = new ByteArrayInputStream (listJson .getBytes ());
36+ } else {
37+ responseList = null ;
38+ responseInputStream = null ;
39+ }
40+ }
41+
42+ public void setPerPageHeaderValue (int perPage ) {
43+ this .perPage = perPage ;
44+ }
45+
46+ @ SuppressWarnings ("unchecked" )
47+ @ Override
48+ public <T > T readEntity (GenericType <T > entityType ) {
49+ return ((T ) responseList );
50+ }
51+
52+ @ SuppressWarnings ("unchecked" )
53+ @ Override
54+ public <T > T readEntity (Class <T > classType ) {
55+ return ((T ) responseItem );
56+ }
57+
58+ @ Override
59+ public Object getEntity () {
60+ if (responseInputStream == null ) {
61+ return (null );
62+ }
63+
64+ responseInputStream .reset ();
65+ return (responseInputStream );
66+ }
67+
68+ @ Override
69+ public String getHeaderString (String name ) {
70+ switch (name ) {
71+ case Constants .PER_PAGE :
72+ return (responseList != null ? Integer .toString (perPage ) : "0" );
73+
74+ case Constants .TOTAL_PAGES_HEADER :
75+ return (responseList != null ? Integer .toString ((int )Math .ceil ((double )responseList .size () / 20.0 )) : "0" );
76+
77+ case Constants .TOTAL_HEADER :
78+ return (responseList != null ? Integer .toString (responseList .size ()) : "0" );
79+
80+ default :
81+ return (null );
82+ }
83+ }
84+
85+ @ Override
86+ public int getStatus () {
87+ return (200 );
88+ }
89+ }
0 commit comments