|
3 | 3 | declare(strict_types=1); |
4 | 4 |
|
5 | 5 | use Saloon\Http\Response; |
| 6 | +use Saloon\Helpers\Debugger; |
6 | 7 | use Saloon\Http\PendingRequest; |
7 | 8 | use Saloon\Http\Faking\MockClient; |
8 | 9 | use Saloon\Http\Faking\MockResponse; |
9 | 10 | use Psr\Http\Message\RequestInterface; |
10 | 11 | use Psr\Http\Message\ResponseInterface; |
| 12 | +use Symfony\Component\VarDumper\VarDumper; |
11 | 13 | use Saloon\Tests\Fixtures\Requests\UserRequest; |
12 | 14 | use Saloon\Tests\Fixtures\Connectors\TestConnector; |
13 | 15 | use Saloon\Tests\Fixtures\Requests\AlwaysThrowRequest; |
|
133 | 135 | expect($middlewareCount)->toBe(2); |
134 | 136 | } |
135 | 137 | }); |
| 138 | + |
| 139 | +test('the default debugRequest driver will dump an output using symfony var-dumper', function () { |
| 140 | + $output = fopen('php://memory', 'rwb+'); |
| 141 | + |
| 142 | + VarDumper::setHandler(getCustomVarDump($output)); |
| 143 | + |
| 144 | + $connector = new TestConnector; |
| 145 | + |
| 146 | + $connector->withMockClient(new MockClient([ |
| 147 | + new MockResponse(['name' => 'Sam'], 500), |
| 148 | + ])); |
| 149 | + |
| 150 | + $connector->debugRequest()->send(new UserRequest); |
| 151 | + |
| 152 | + VarDumper::setHandler(null); |
| 153 | + |
| 154 | + rewind($output); |
| 155 | + |
| 156 | + $output = stream_get_contents($output); |
| 157 | + |
| 158 | + $expected = <<<END |
| 159 | + Saloon Request (UserRequest) -> array:6 [ |
| 160 | + "connector" => "Saloon\Tests\Fixtures\Connectors\TestConnector" |
| 161 | + "request" => "Saloon\Tests\Fixtures\Requests\UserRequest" |
| 162 | + "method" => "GET" |
| 163 | + "uri" => "https://tests.saloon.dev/api/user" |
| 164 | + "headers" => array:2 [ |
| 165 | + "Host" => "tests.saloon.dev" |
| 166 | + "Accept" => "application/json" |
| 167 | + ] |
| 168 | + "body" => "" |
| 169 | + ]\n |
| 170 | + END; |
| 171 | + |
| 172 | + expect($output)->toEqual(str_replace("\r\n", "\n", $expected)); |
| 173 | +}); |
| 174 | + |
| 175 | +test('the default debugResponse driver will dump an output using symfony var-dumper', function () { |
| 176 | + $output = fopen('php://memory', 'rwb+'); |
| 177 | + |
| 178 | + VarDumper::setHandler(getCustomVarDump($output)); |
| 179 | + |
| 180 | + $connector = new TestConnector; |
| 181 | + |
| 182 | + $connector->withMockClient(new MockClient([ |
| 183 | + new MockResponse(['name' => 'Sam'], 500), |
| 184 | + ])); |
| 185 | + |
| 186 | + $connector->debugResponse()->send(new UserRequest); |
| 187 | + |
| 188 | + VarDumper::setHandler(null); |
| 189 | + |
| 190 | + rewind($output); |
| 191 | + |
| 192 | + $output = stream_get_contents($output); |
| 193 | + |
| 194 | + $expected = <<<END |
| 195 | + Saloon Response (UserRequest) -> array:3 [ |
| 196 | + "status" => 500 |
| 197 | + "headers" => [] |
| 198 | + "body" => "{"name":"Sam"}" |
| 199 | + ]\n |
| 200 | + END; |
| 201 | + |
| 202 | + expect($output)->toEqual(str_replace("\r\n", "\n", $expected)); |
| 203 | +}); |
| 204 | + |
| 205 | +test('the debug method will output both request and response at the same time', function () { |
| 206 | + $output = fopen('php://memory', 'rwb+'); |
| 207 | + |
| 208 | + VarDumper::setHandler(getCustomVarDump($output)); |
| 209 | + |
| 210 | + $connector = new TestConnector; |
| 211 | + |
| 212 | + $connector->withMockClient(new MockClient([ |
| 213 | + new MockResponse(['name' => 'Sam'], 500), |
| 214 | + ])); |
| 215 | + |
| 216 | + $connector->debug()->send(new UserRequest); |
| 217 | + |
| 218 | + VarDumper::setHandler(null); |
| 219 | + |
| 220 | + rewind($output); |
| 221 | + |
| 222 | + $output = stream_get_contents($output); |
| 223 | + |
| 224 | + $expected = <<<END |
| 225 | + Saloon Request (UserRequest) -> array:6 [ |
| 226 | + "connector" => "Saloon\Tests\Fixtures\Connectors\TestConnector" |
| 227 | + "request" => "Saloon\Tests\Fixtures\Requests\UserRequest" |
| 228 | + "method" => "GET" |
| 229 | + "uri" => "https://tests.saloon.dev/api/user" |
| 230 | + "headers" => array:2 [ |
| 231 | + "Host" => "tests.saloon.dev" |
| 232 | + "Accept" => "application/json" |
| 233 | + ] |
| 234 | + "body" => "" |
| 235 | + ] |
| 236 | + Saloon Response (UserRequest) -> array:3 [ |
| 237 | + "status" => 500 |
| 238 | + "headers" => [] |
| 239 | + "body" => "{"name":"Sam"}" |
| 240 | + ]\n |
| 241 | + END; |
| 242 | + |
| 243 | + expect($output)->toEqual(str_replace("\r\n", "\n", $expected)); |
| 244 | +}); |
| 245 | + |
| 246 | +test('the debug method can kill the application', function () { |
| 247 | + $killed = false; |
| 248 | + |
| 249 | + $output = fopen('php://memory', 'rwb+'); |
| 250 | + |
| 251 | + VarDumper::setHandler(getCustomVarDump($output)); |
| 252 | + |
| 253 | + Debugger::$dieHandler = static function () use (&$killed) { |
| 254 | + $killed = true; |
| 255 | + }; |
| 256 | + |
| 257 | + $connector = new TestConnector; |
| 258 | + |
| 259 | + $connector->withMockClient(new MockClient([ |
| 260 | + new MockResponse(['name' => 'Sam'], 500), |
| 261 | + ])); |
| 262 | + |
| 263 | + $connector->debug(die: true)->send(new UserRequest); |
| 264 | + |
| 265 | + VarDumper::setHandler(null); |
| 266 | + Debugger::$dieHandler = null; |
| 267 | + |
| 268 | + expect($killed)->toBeTrue(); |
| 269 | +}); |
0 commit comments