99
1010require __DIR__ . '/../../bootstrap.php ' ;
1111
12+ use Milo \Github \Http ;
1213
13- class MockClient implements Milo \Github \Http \IClient
14+
15+ class MockClient implements Http \IClient
1416{
1517 /** @var callable */
1618 public $ onRequest ;
1719
18- public function request (Milo \Github \Http \Request $ request )
20+ /** @var int */
21+ public $ requestCount = 0 ;
22+
23+
24+ public function request (Http \Request $ request )
25+ {
26+ $ response = call_user_func ($ this ->onRequest , $ request );
27+ $ this ->requestCount ++;
28+ return $ response ;
29+ }
30+
31+ public function onRequest ($ foo )
1932 {
20- return call_user_func ($ this ->onRequest , $ request );
33+ trigger_error ('Inner onRequest called: ' . var_export ($ foo , TRUE ), E_USER_NOTICE );
34+ }
35+
36+ public function onResponse ($ foo )
37+ {
38+ trigger_error ('Inner onResponse called: ' . var_export ($ foo , TRUE ), E_USER_NOTICE );
2139 }
2240
23- public function onRequest ($ foo ) { trigger_error ('Inner onRequest called: ' . var_export ($ foo , TRUE ), E_USER_NOTICE ); }
24- public function onResponse ($ foo ) { trigger_error ('Inner onResponse called: ' . var_export ($ foo , TRUE ), E_USER_NOTICE ); }
2541}
2642
2743
2844class MockCache implements Milo \Github \Storages \ICache
2945{
3046 private $ cache = [];
3147
32- public function save ($ key , $ value ) { return $ this ->cache [$ key ] = $ value ; }
33- public function load ($ key ) { return isset ($ this ->cache [$ key ]) ? $ this ->cache [$ key ] : NULL ; }
48+ public function save ($ key , $ value ) {
49+ return $ this ->cache [$ key ] = $ value ;
50+ }
51+
52+ public function load ($ key )
53+ {
54+ return isset ($ this ->cache [$ key ])
55+ ? $ this ->cache [$ key ]
56+ : NULL ;
57+ }
58+
3459}
3560
3661
3762class CachingTestCase extends Tester \TestCase
3863{
39- /** @var Milo\Github\ Http\CachedClient */
64+ /** @var Http\CachedClient */
4065 private $ client ;
4166
4267 /** @var MockClient */
@@ -47,11 +72,17 @@ class CachingTestCase extends Tester\TestCase
4772 {
4873 $ cache = new MockCache ;
4974 $ this ->innerClient = new MockClient ;
50- $ this ->client = new Milo \Github \Http \CachedClient ($ cache , $ this ->innerClient );
75+ $ this ->client = new Http \CachedClient ($ cache , $ this ->innerClient );
76+
77+ $ this ->innerClient ->onRequest = function (Http \Request $ request ) {
78+ return $ request ->hasHeader ('If-None-Match ' )
79+ ? new Http \Response (304 , [], "inner-304- {$ request ->getContent ()}" )
80+ : new Http \Response (200 , ['ETag ' => '"inner" ' ], "inner-200- {$ request ->getContent ()}" );
81+ };
5182 }
5283
5384
54- public function testBasics ()
85+ public function testSetOnRequestOnResponseCallbacks ()
5586 {
5687 Assert::same ($ this ->innerClient , $ this ->client ->getInnerClient ());
5788
@@ -64,194 +95,164 @@ class CachingTestCase extends Tester\TestCase
6495 ]);
6596
6697 $ onResponseCalled = FALSE ;
67- $ this ->innerClient ->onRequest = function () {
68- return new Milo \Github \Http \Response (200 , [], '' );
69- };
7098 Assert::error (function () use (& $ onResponseCalled ) {
71- $ this ->client ->onResponse (function () use (& $ onResponseCalled ) { $ onResponseCalled = TRUE ; });
99+ $ this ->client ->onResponse (function () use (& $ onResponseCalled ) {
100+ $ onResponseCalled = TRUE ;
101+ });
72102 }, E_USER_NOTICE , 'Inner onResponse called: NULL ' );
73- $ this ->client ->request (
74- new Milo \Github \Http \Request ('' , '' )
75- );
103+
104+ $ this ->client ->request (new Http \Request ('' , '' ));
76105 Assert::true ($ onResponseCalled );
106+
107+ Assert::same (1 , $ this ->innerClient ->requestCount );
77108 }
78109
79110
80111 public function testNoCaching ()
81112 {
82- $ this ->innerClient ->onRequest = function (Milo \ Github \ Http \Request $ request ) {
113+ $ this ->innerClient ->onRequest = function (Http \Request $ request ) {
83114 Assert::false ($ request ->hasHeader ('ETag ' ));
84115 Assert::false ($ request ->hasHeader ('If-Modified-Since ' ));
85116
86- return new Milo \ Github \ Http \Response (200 , [], "response- {$ request ->getContent ()}" );
117+ return new Http \Response (200 , [], "response- {$ request ->getContent ()}" );
87118 };
88119
89- $ response = $ this ->client ->request (
90- new Milo \Github \Http \Request ('' , '' , [], '1 ' )
91- );
120+ $ response = $ this ->client ->request (new Http \Request ('' , '' , [], '1 ' ));
92121 Assert::same ('response-1 ' , $ response ->getContent ());
122+ Assert::same (1 , $ this ->innerClient ->requestCount );
93123
94- $ response = $ this ->client ->request (
95- new Milo \Github \Http \Request ('' , '' , [], '2 ' )
96- );
124+ $ response = $ this ->client ->request (new Http \Request ('' , '' , [], '2 ' ));
97125 Assert::same ('response-2 ' , $ response ->getContent ());
126+ Assert::same (2 , $ this ->innerClient ->requestCount );
98127 }
99128
100129
101130 public function testETagCaching ()
102131 {
103- $ this ->innerClient ->onRequest = function (Milo \ Github \ Http \Request $ request ) {
132+ $ this ->innerClient ->onRequest = function (Http \Request $ request ) {
104133 Assert::false ($ request ->hasHeader ('If-None-Match ' ));
105134 Assert::false ($ request ->hasHeader ('If-Modified-Since ' ));
106135
107- return new Milo \ Github \ Http \Response (200 , ['ETag ' => 'e-tag ' ], "response- {$ request ->getContent ()}" );
136+ return new Http \Response (200 , ['ETag ' => 'e-tag ' ], "response- {$ request ->getContent ()}" );
108137 };
109138
110- $ response = $ this ->client ->request (
111- new Milo \Github \Http \Request ('' , '' , [], '1 ' )
112- );
139+ $ response = $ this ->client ->request (new Http \Request ('' , '' , [], '1 ' ));
113140 Assert::same ('response-1 ' , $ response ->getContent ());
141+ Assert::same (1 , $ this ->innerClient ->requestCount );
142+
114143
115- $ this ->innerClient ->onRequest = function (Milo \ Github \ Http \Request $ request ) {
144+ $ this ->innerClient ->onRequest = function (Http \Request $ request ) {
116145 Assert::same ('e-tag ' , $ request ->getHeader ('If-None-Match ' ));
117146 Assert::false ($ request ->hasHeader ('If-Modified-Since ' ));
118147
119- return new Milo \ Github \ Http \Response (304 , [], "response- {$ request ->getContent ()}" );
148+ return new Http \Response (304 , [], "response- {$ request ->getContent ()}" );
120149 };
121-
122- $ response = $ this ->client ->request (
123- new Milo \Github \Http \Request ('' , '' , [], '2 ' )
124- );
150+ $ response = $ this ->client ->request (new Http \Request ('' , '' , [], '2 ' ));
125151 Assert::same ('response-1 ' , $ response ->getContent ());
126-
127152 Assert::type ('Milo\Github\Http\Response ' , $ response ->getPrevious ());
128153 Assert::same (304 , $ response ->getPrevious ()->getCode ());
154+ Assert::same (2 , $ this ->innerClient ->requestCount );
129155 }
130156
131157
132158 public function testIfModifiedCaching ()
133159 {
134- $ this ->innerClient ->onRequest = function (Milo \ Github \ Http \Request $ request ) {
160+ $ this ->innerClient ->onRequest = function (Http \Request $ request ) {
135161 Assert::false ($ request ->hasHeader ('If-None-Match ' ));
136162 Assert::false ($ request ->hasHeader ('If-Modified-Since ' ));
137163
138- return new Milo \ Github \ Http \Response (200 , ['Last-Modified ' => 'today ' ], "response- {$ request ->getContent ()}" );
164+ return new Http \Response (200 , ['Last-Modified ' => 'today ' ], "response- {$ request ->getContent ()}" );
139165 };
140166
141- $ response = $ this ->client ->request (
142- new Milo \Github \Http \Request ('' , '' , [], '1 ' )
143- );
167+ $ response = $ this ->client ->request (new Http \Request ('' , '' , [], '1 ' ));
144168 Assert::same ('response-1 ' , $ response ->getContent ());
169+ Assert::same (1 , $ this ->innerClient ->requestCount );
170+
145171
146- $ this ->innerClient ->onRequest = function (Milo \ Github \ Http \Request $ request ) {
172+ $ this ->innerClient ->onRequest = function (Http \Request $ request ) {
147173 Assert::false ($ request ->hasHeader ('ETag ' ));
148174 Assert::same ('today ' , $ request ->getHeader ('If-Modified-Since ' ));
149175
150- return new Milo \ Github \ Http \Response (304 , [], "response- {$ request ->getContent ()}" );
176+ return new Http \Response (304 , [], "response- {$ request ->getContent ()}" );
151177 };
152178
153- $ response = $ this ->client ->request (
154- new Milo \Github \Http \Request ('' , '' , [], '2 ' )
155- );
179+ $ response = $ this ->client ->request (new Http \Request ('' , '' , [], '2 ' ));
156180 Assert::same ('response-1 ' , $ response ->getContent ());
157-
158181 Assert::type ('Milo\Github\Http\Response ' , $ response ->getPrevious ());
159182 Assert::same (304 , $ response ->getPrevious ()->getCode ());
183+ Assert::same (2 , $ this ->innerClient ->requestCount );
160184 }
161185
162186
163187 public function testRepeatedRequest ()
164188 {
165- $ this ->innerClient ->onRequest = function (Milo \Github \Http \Request $ request ) {
166- if ($ request ->hasHeader ('If-None-Match ' )) {
167- return new Milo \Github \Http \Response (304 , [], 'inner-304 ' );
168- }
169-
170- return new Milo \Github \Http \Response (200 , ['ETag ' => '"test" ' ], 'inner-200 ' );
171- };
172-
173- $ request = new Milo \Github \Http \Request ('' , '' );
189+ $ request = new Http \Request ('' , '' , [], 'same ' );
174190
175191 # Empty cache
176192 $ response = $ this ->client ->request ($ request );
177- Assert::same ('inner-200 ' , $ response ->getContent ());
193+ Assert::same ('inner-200-same ' , $ response ->getContent ());
178194 Assert::null ($ response ->getPrevious ());
195+ Assert::same (1 , $ this ->innerClient ->requestCount );
179196
180197 # From cache
181198 $ response = $ this ->client ->request ($ request );
182- Assert::same ('inner-200 ' , $ response ->getContent ());
199+ Assert::same ('inner-200-same ' , $ response ->getContent ());
183200 Assert::type ('Milo\Github\Http\Response ' , $ response ->getPrevious ());
184- Assert::same ('inner-304 ' , $ response ->getPrevious ()->getContent ());
201+ Assert::same ('inner-304-same ' , $ response ->getPrevious ()->getContent ());
202+ Assert::same (2 , $ this ->innerClient ->requestCount );
185203
186204 # Again
187205 $ response = $ this ->client ->request ($ request );
188- Assert::same ('inner-200 ' , $ response ->getContent ());
206+ Assert::same ('inner-200-same ' , $ response ->getContent ());
189207 Assert::type ('Milo\Github\Http\Response ' , $ response ->getPrevious ());
190- Assert::same ('inner-304 ' , $ response ->getPrevious ()->getContent ());
208+ Assert::same ('inner-304-same ' , $ response ->getPrevious ()->getContent ());
209+ Assert::same (3 , $ this ->innerClient ->requestCount );
191210 }
192211
193212
194213 public function testForbidRecheckDisabled ()
195214 {
196- $ client = new Milo \Github \Http \CachedClient (new MockCache , $ this ->innerClient );
197-
198- $ count = 0 ;
199- $ this ->innerClient ->onRequest = function (Milo \Github \Http \Request $ request ) use (& $ count ) {
200- $ count ++;
201- return $ request ->hasHeader ('If-None-Match ' )
202- ? new Milo \Github \Http \Response (304 , [], 'inner-304 ' )
203- : new Milo \Github \Http \Response (200 , ['ETag ' => '"test" ' ], 'inner-200 ' );
204- };
215+ $ request = new Http \Request ('' , '' , [], 'disabled ' );
205216
206- $ request = new Milo \Github \Http \Request ('' , '' );
207-
208- $ response = $ client ->request ($ request );
209- Assert::same (1 , $ count );
210- Assert::same ('inner-200 ' , $ response ->getContent ());
217+ $ response = $ this ->client ->request ($ request );
218+ Assert::same ('inner-200-disabled ' , $ response ->getContent ());
211219 Assert::null ($ response ->getPrevious ());
220+ Assert::same (1 , $ this ->innerClient ->requestCount );
212221
213- $ response = $ client ->request ($ request );
214- Assert::same (2 , $ count );
215- Assert::same ('inner-200 ' , $ response ->getContent ());
222+ $ response = $ this ->client ->request ($ request );
223+ Assert::same ('inner-200-disabled ' , $ response ->getContent ());
216224 Assert::type ('Milo\Github\Http\Response ' , $ response ->getPrevious ());
217- Assert::same ('inner-304 ' , $ response ->getPrevious ()->getContent ());
225+ Assert::same ('inner-304-disabled ' , $ response ->getPrevious ()->getContent ());
226+ Assert::same (2 , $ this ->innerClient ->requestCount );
218227
219- $ response = $ client ->request ($ request );
220- Assert::same (3 , $ count );
221- Assert::same ('inner-200 ' , $ response ->getContent ());
228+ $ response = $ this ->client ->request ($ request );
229+ Assert::same ('inner-200-disabled ' , $ response ->getContent ());
222230 Assert::type ('Milo\Github\Http\Response ' , $ response ->getPrevious ());
223- Assert::same ('inner-304 ' , $ response ->getPrevious ()->getContent ());
231+ Assert::same ('inner-304-disabled ' , $ response ->getPrevious ()->getContent ());
232+ Assert::same (3 , $ this ->innerClient ->requestCount );
224233 }
225234
226235
227236 public function testForbidRecheckEnabled ()
228237 {
229- $ client = new Milo \Github \Http \CachedClient (new MockCache , $ this ->innerClient , TRUE );
230-
231- $ count = 0 ;
232- $ this ->innerClient ->onRequest = function (Milo \Github \Http \Request $ request ) use (& $ count ) {
233- $ count ++;
234- return $ request ->hasHeader ('If-None-Match ' )
235- ? new Milo \Github \Http \Response (304 , [], 'inner-304 ' )
236- : new Milo \Github \Http \Response (200 , ['ETag ' => '"test" ' ], 'inner-200 ' );
237- };
238+ $ this ->client = new Http \CachedClient (new MockCache , $ this ->innerClient , TRUE );
238239
239- $ request = new Milo \ Github \ Http \Request ('' , '' );
240+ $ request = new Http \Request ('' , '' , [], ' enabled ' );
240241
241- $ response = $ client ->request ($ request );
242- Assert::same (1 , $ count );
243- Assert::same ('inner-200 ' , $ response ->getContent ());
242+ $ response = $ this ->client ->request ($ request );
243+ Assert::same ('inner-200-enabled ' , $ response ->getContent ());
244244 Assert::null ($ response ->getPrevious ());
245+ Assert::same (1 , $ this ->innerClient ->requestCount );
245246
246- $ response = $ client ->request ($ request );
247- Assert::same (1 , $ count );
248- Assert::same ('inner-200 ' , $ response ->getContent ());
247+ $ response = $ this ->client ->request ($ request );
248+ Assert::same ('inner-200-enabled ' , $ response ->getContent ());
249249 Assert::null ($ response ->getPrevious ());
250+ Assert::same (1 , $ this ->innerClient ->requestCount );
250251
251- $ response = $ client ->request ($ request );
252- Assert::same (1 , $ count );
253- Assert::same ('inner-200 ' , $ response ->getContent ());
252+ $ response = $ this ->client ->request ($ request );
253+ Assert::same ('inner-200-enabled ' , $ response ->getContent ());
254254 Assert::null ($ response ->getPrevious ());
255+ Assert::same (1 , $ this ->innerClient ->requestCount );
255256 }
256257
257258}
0 commit comments