3
3
namespace ApiClients \Tests \Foundation \Transport ;
4
4
5
5
use ApiClients \Foundation \Middleware \Locator \ContainerLocator ;
6
- use ApiClients \Foundation \Middleware \Locator \Locator ;
7
6
use ApiClients \Foundation \Transport \Client ;
8
7
use ApiClients \Foundation \Transport \Options ;
9
- use ApiClients \Foundation \Transport \UserAgentStrategies ;
10
- use ApiClients \Foundation \Transport \UserAgentStrategy \PackageVersionStrategy ;
11
- use ApiClients \Foundation \Transport \UserAgentStrategyInterface ;
12
8
use ApiClients \Tools \TestUtilities \TestCase ;
13
9
use Clue \React \Buzz \Browser as BuzzClient ;
14
10
use DI \ContainerBuilder ;
15
11
use Exception ;
16
12
use InvalidArgumentException ;
17
- use PackageVersions \Versions ;
18
13
use Phake ;
19
14
use Psr \Http \Message \RequestInterface ;
20
15
use Psr \Http \Message \ResponseInterface ;
21
16
use Psr \Http \Message \StreamInterface ;
22
17
use React \EventLoop \Factory ;
23
- use React \Promise \FulfilledPromise ;
24
18
use RingCentral \Psr7 \Request ;
25
19
use function Clue \React \Block \await ;
26
20
use function React \Promise \reject ;
@@ -30,28 +24,117 @@ class ClientTest extends TestCase
30
24
{
31
25
public function provideRequests ()
32
26
{
27
+ $ defaultClientOptions = [
28
+ Options::SCHEMA => 'http ' ,
29
+ Options::HOST => 'api.example.com ' ,
30
+ Options::MIDDLEWARE => [
31
+ DummyMiddleware::class,
32
+ ],
33
+ ];
34
+ $ defaultRequestOptions = [];
35
+
33
36
yield [
34
37
new Request ('GET ' , '' ),
35
38
new Request ('GET ' , 'http://api.example.com/ ' ),
39
+ $ defaultClientOptions ,
40
+ $ defaultRequestOptions ,
36
41
];
37
42
38
43
yield [
39
44
new Request ('GET ' , 'status ' ),
40
45
new Request ('GET ' , 'http://api.example.com/status ' ),
46
+ $ defaultClientOptions ,
47
+ $ defaultRequestOptions ,
48
+ ];
49
+
50
+ yield [
51
+ new Request ('HEAD ' , 'https://api.example.com/status ' ),
52
+ new Request ('HEAD ' , 'https://api.example.com/status ' ),
53
+ $ defaultClientOptions ,
54
+ $ defaultRequestOptions ,
55
+ ];
56
+
57
+ yield [
58
+ new Request ('HEAD ' , 'https://api.example.com/status ' ),
59
+ new Request ('HEAD ' , 'https://api.example.com/status ' , ['Accept ' => 'foo ' ,]),
60
+ $ defaultClientOptions + [
61
+ Options::HEADERS => [
62
+ 'Accept ' => 'foo ' ,
63
+ ],
64
+ ],
65
+ $ defaultRequestOptions ,
66
+ ];
67
+
68
+ yield [
69
+ new Request ('HEAD ' , 'https://api.example.com/status ' ),
70
+ new Request ('HEAD ' , 'https://api.example.com/status ' , ['Accept ' => 'bar ' ,]),
71
+ $ defaultClientOptions + [
72
+ Options::HEADERS => [
73
+ 'Accept ' => 'foo ' ,
74
+ ],
75
+ ],
76
+ $ defaultRequestOptions + [
77
+ Options::HEADERS => [
78
+ 'Accept ' => 'bar ' ,
79
+ ],
80
+ ],
41
81
];
42
82
43
83
yield [
44
84
new Request ('HEAD ' , 'https://api.example.com/status ' ),
85
+ new Request ('HEAD ' , 'https://api.example.com/status ' , ['Accept ' => 'foo ' ,' Decline ' => 'bar ' ,]),
86
+ $ defaultClientOptions + [
87
+ Options::HEADERS => [
88
+ 'Accept ' => 'foo ' ,
89
+ ],
90
+ ],
91
+ $ defaultRequestOptions + [
92
+ Options::HEADERS => [
93
+ 'Decline ' => 'bar ' ,
94
+ ],
95
+ ],
96
+ ];
97
+
98
+ yield [
99
+ new Request ('HEAD ' , 'https://api.example.com/status ' ),
100
+ new Request ('HEAD ' , 'https://api.example.com/status ' , ['Accept ' => 'bar ' ,' Decline ' => 'bar ' ,]),
101
+ $ defaultClientOptions + [
102
+ Options::HEADERS => [
103
+ 'Accept ' => 'foo ' ,
104
+ ],
105
+ ],
106
+ $ defaultRequestOptions + [
107
+ Options::HEADERS => [
108
+ 'Accept ' => 'bar ' ,
109
+ 'Decline ' => 'bar ' ,
110
+ ],
111
+ ],
112
+ ];
113
+
114
+ yield [
45
115
new Request ('HEAD ' , 'https://api.example.com/status ' ),
116
+ new Request ('HEAD ' , 'https://api.example.com/status ' , ['a ' => 'b ' ,' c ' => 'd ' , 'e ' => 'f ' , 'g ' => 'h ' ,]),
117
+ $ defaultClientOptions + [
118
+ Options::HEADERS => [
119
+ 'a ' => 'b ' ,
120
+ 'c ' => 'd ' ,
121
+ ],
122
+ ],
123
+ $ defaultRequestOptions + [
124
+ Options::HEADERS => [
125
+ 'e ' => 'f ' ,
126
+ 'g ' => 'h ' ,
127
+ ],
128
+ ],
46
129
];
47
130
}
48
131
49
132
/**
50
133
* @dataProvider provideRequests
51
134
*/
52
- public function testRequest (RequestInterface $ inputRequest , RequestInterface $ outputRequest )
135
+ public function testRequest (RequestInterface $ inputRequest , RequestInterface $ outputRequest, array $ clientOptions , array $ requestOptions )
53
136
{
54
- $ locator = Phake:: mock (Locator::class );
137
+ $ container = ContainerBuilder:: buildDevContainer ( );
55
138
$ loop = Factory::create ();
56
139
57
140
$ stream = Phake::mock (StreamInterface::class);
@@ -65,31 +148,29 @@ public function testRequest(RequestInterface $inputRequest, RequestInterface $ou
65
148
Phake::when ($ response )->getReasonPhrase ()->thenReturn ('OK ' );
66
149
67
150
$ request = false ;
68
- $ handler = Phake::mock (BuzzClient::class);
69
- Phake::when ($ handler )->send ($ outputRequest )->thenReturnCallback (function (RequestInterface $ guzzleRequest ) use ($ response , &$ request ) {
151
+ $ buzz = Phake::mock (BuzzClient::class);
152
+ Phake::when ($ buzz )->send (Phake:: anyParameters () )->thenReturnCallback (function (RequestInterface $ guzzleRequest ) use ($ response , &$ request ) {
70
153
$ request = $ guzzleRequest ;
71
- return new FulfilledPromise ($ response );
154
+ return resolve ($ response );
72
155
});
73
156
74
157
$ client = new Client (
75
158
$ loop ,
76
- $ locator ,
77
- $ handler ,
78
- [
79
- Options::SCHEMA => 'http ' ,
80
- Options::HOST => 'api.example.com ' ,
81
- ]
159
+ new ContainerLocator ($ container ),
160
+ $ buzz ,
161
+ $ clientOptions
82
162
);
83
163
84
- $ client ->request ($ inputRequest , [], true );
164
+ $ client ->request ($ inputRequest , $ requestOptions );
85
165
86
- Phake::verify ($ handler )->send ($ outputRequest );
166
+ Phake::verify ($ buzz )->send ($ outputRequest );
87
167
88
168
self ::assertNotFalse ($ request );
89
169
self ::assertInstanceOf (RequestInterface::class, $ request );
90
170
91
171
self ::assertSame ($ outputRequest ->getMethod (), $ request ->getMethod ());
92
172
self ::assertSame ((string ) $ outputRequest ->getUri (), (string ) $ request ->getUri ());
173
+ self ::assertSame ($ outputRequest ->getHeaders (), $ request ->getHeaders ());
93
174
94
175
$ headers = $ outputRequest ->getHeaders ();
95
176
ksort ($ headers );
@@ -101,7 +182,7 @@ public function testRequest(RequestInterface $inputRequest, RequestInterface $ou
101
182
/**
102
183
* @dataProvider provideRequests
103
184
*/
104
- public function testError (RequestInterface $ inputRequest , RequestInterface $ outputRequest )
185
+ public function testError (RequestInterface $ inputRequest , RequestInterface $ outputRequest, array $ clientOptions , array $ requestOptions )
105
186
{
106
187
$ exceptionMessage = 'Exception turned InvalidArgumentException ' ;
107
188
$ exception = new Exception ($ exceptionMessage );
@@ -129,15 +210,9 @@ public function testError(RequestInterface $inputRequest, RequestInterface $outp
129
210
$ loop ,
130
211
new ContainerLocator ($ container ),
131
212
$ handler ,
132
- [
133
- Options::SCHEMA => 'http ' ,
134
- Options::HOST => 'api.example.com ' ,
135
- Options::MIDDLEWARE => [
136
- DummyMiddleware::class,
137
- ],
138
- ]
213
+ $ clientOptions
139
214
);
140
215
141
- await ($ client ->request ($ inputRequest , [] , true ), $ loop );
216
+ await ($ client ->request ($ inputRequest , $ requestOptions , true ), $ loop );
142
217
}
143
218
}
0 commit comments