1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: 600: 601: 602: 603: 604: 605: 606: 607: 608: 609: 610: 611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630: 631: 632: 633: 634: 635: 636: 637: 638: 639: 640:
<?php
namespace Guzzle\Tests\Http\Message;
use Guzzle\Common\Collection;
use Guzzle\Http\EntityBody;
use Guzzle\Http\Url;
use Guzzle\Http\Client;
use Guzzle\Plugin\Async\AsyncPlugin;
use Guzzle\Http\Message\RequestInterface;
use Guzzle\Http\Message\Request;
use Guzzle\Http\Message\Response;
use Guzzle\Http\Message\RequestFactory;
use Guzzle\Http\RedirectPlugin;
use Guzzle\Http\Exception\BadResponseException;
class RequestTest extends \Guzzle\Tests\GuzzleTestCase
{
protected $request;
protected $client;
protected function setUp()
{
$this->client = new Client($this->getServer()->getUrl());
$this->request = $this->client->get();
}
public function tearDown()
{
unset($this->request);
unset($this->client);
}
public function testConstructorBuildsRequestWithArrayHeaders()
{
$request = new Request('GET', 'http://www.guzzle-project.com/', array(
'foo' => 'bar'
));
$this->assertEquals('GET', $request->getMethod());
$this->assertEquals('http://www.guzzle-project.com/', $request->getUrl());
$this->assertEquals('bar', $request->getHeader('foo'));
}
public function testDescribesEvents()
{
$this->assertInternalType('array', Request::getAllEvents());
}
public function testConstructorBuildsRequestWithCollectionHeaders()
{
$request = new Request('GET', 'http://www.guzzle-project.com/', new Collection(array(
'foo' => 'bar'
)));
$this->assertEquals('bar', $request->getHeader('foo'));
}
public function testConstructorBuildsRequestWithNoHeaders()
{
$request = new Request('GET', 'http://www.guzzle-project.com/', null);
$this->assertFalse($request->hasHeader('foo'));
}
public function testConstructorHandlesNonBasicAuth()
{
$request = new Request('GET', 'http://www.guzzle-project.com/', array(
'Authorization' => 'Foo bar'
));
$this->assertNull($request->getUserName());
$this->assertNull($request->getPassword());
$this->assertEquals('Foo bar', (string) $request->getHeader('Authorization'));
}
public function testRequestsCanBeConvertedToRawMessageStrings()
{
$auth = base64_encode('michael:123');
$message = "PUT /path?q=1&v=2 HTTP/1.1\r\n"
. "Host: www.google.com\r\n"
. "Authorization: Basic {$auth}\r\n"
. "Content-Length: 4\r\n\r\nData";
$request = RequestFactory::getInstance()->create('PUT', 'http://www.google.com/path?q=1&v=2', array(
'Authorization' => 'Basic ' . $auth
), 'Data');
$this->assertEquals($message, $request->__toString());
}
public function testRequestStringsIncludeAuth()
{
$auth = base64_encode('michael:123');
$this->getServer()->enqueue("HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");
$request = RequestFactory::getInstance()->create('PUT', $this->getServer()->getUrl(), null, 'Data')
->setClient($this->client)
->setAuth('michael', '123', CURLAUTH_BASIC);
$request->send();
$this->assertContains('Authorization: Basic ' . $auth, (string) $request);
}
public function testGetEventDispatcher()
{
$d = $this->request->getEventDispatcher();
$this->assertInstanceOf('Symfony\\Component\\EventDispatcher\\EventDispatcherInterface', $d);
$this->assertEquals($d, $this->request->getEventDispatcher());
}
public function testRequestsManageClients()
{
$request = new Request('GET', 'http://test.com');
$this->assertNull($request->getClient());
$request->setClient($this->client);
$this->assertSame($this->client, $request->getClient());
}
public function testRequestsRequireClients()
{
$request = new Request('GET', 'http://test.com');
$request->send();
}
public function testSend()
{
$response = new Response(200, array(
'Content-Length' => 3
), 'abc');
$this->request->setResponse($response, true);
$r = $this->request->send();
$this->assertSame($response, $r);
$this->assertInstanceOf('Guzzle\\Http\\Message\\Response', $this->request->getResponse());
$this->assertSame($r, $this->request->getResponse());
$this->assertEquals('complete', $this->request->getState());
}
public function testGetResponse()
{
$this->assertNull($this->request->getResponse());
$response = new Response(200, array('Content-Length' => 3), 'abc');
$this->request->setResponse($response);
$this->assertEquals($response, $this->request->getResponse());
$client = new Client('http://www.google.com');
$request = $client->get('http://www.google.com/');
$request->setResponse($response, true);
$request->send();
$requestResponse = $request->getResponse();
$this->assertSame($response, $requestResponse);
$this->assertSame($requestResponse, $request->getResponse());
$response = new Response(204);
$request = $client->get();
$request->setResponse($response, true);
$request->send();
$requestResponse = $request->getResponse();
$this->assertSame($response, $requestResponse);
$this->assertInstanceOf('Guzzle\\Http\\EntityBody', $response->getBody());
}
public function testRequestThrowsExceptionOnBadResponse()
{
try {
$this->request->setResponse(new Response(404, array('Content-Length' => 3), 'abc'), true);
$this->request->send();
$this->fail('Expected exception not thrown');
} catch (BadResponseException $e) {
$this->assertInstanceOf('Guzzle\\Http\\Message\\RequestInterface', $e->getRequest());
$this->assertInstanceOf('Guzzle\\Http\\Message\\Response', $e->getResponse());
$this->assertContains('Client error response', $e->getMessage());
}
}
public function testManagesQuery()
{
$this->assertInstanceOf('Guzzle\\Http\\QueryString', $this->request->getQuery());
$this->request->getQuery()->set('test', '123');
$this->assertEquals('test=123', $this->request->getQuery(true));
}
public function testRequestHasMethod()
{
$this->assertEquals('GET', $this->request->getMethod());
}
public function testRequestHasScheme()
{
$this->assertEquals('http', $this->request->getScheme());
$this->assertEquals($this->request, $this->request->setScheme('https'));
$this->assertEquals('https', $this->request->getScheme());
}
public function testRequestHasHost()
{
$this->assertEquals('127.0.0.1', $this->request->getHost());
$this->assertEquals('127.0.0.1:8124', (string) $this->request->getHeader('Host'));
$this->assertSame($this->request, $this->request->setHost('www2.google.com'));
$this->assertEquals('www2.google.com', $this->request->getHost());
$this->assertEquals('www2.google.com:8124', (string) $this->request->getHeader('Host'));
$this->assertSame($this->request, $this->request->setHost('www.test.com:8081'));
$this->assertEquals('www.test.com', $this->request->getHost());
$this->assertEquals(8081, $this->request->getPort());
}
public function testRequestHasProtocol()
{
$this->assertEquals('1.1', $this->request->getProtocolVersion());
$this->assertEquals($this->request, $this->request->setProtocolVersion('1.1'));
$this->assertEquals('1.1', $this->request->getProtocolVersion());
$this->assertEquals($this->request, $this->request->setProtocolVersion('1.0'));
$this->assertEquals('1.0', $this->request->getProtocolVersion());
}
public function testRequestHasPath()
{
$this->assertEquals('/', $this->request->getPath());
$this->assertEquals($this->request, $this->request->setPath('/index.html'));
$this->assertEquals('/index.html', $this->request->getPath());
$this->assertEquals($this->request, $this->request->setPath('index.html'));
$this->assertEquals('/index.html', $this->request->getPath());
}
public function testPermitsFalsyComponents()
{
$request = new Request('GET', 'http://0/0?0');
$this->assertSame('0', $request->getHost());
$this->assertSame('/0', $request->getPath());
$this->assertSame('0', $request->getQuery(true));
$request = new Request('GET', '0');
$this->assertEquals('/0', $request->getPath());
}
public function testRequestHasPort()
{
$this->assertEquals(8124, $this->request->getPort());
$this->assertEquals('127.0.0.1:8124', $this->request->getHeader('Host'));
$this->assertEquals($this->request, $this->request->setPort('8080'));
$this->assertEquals('8080', $this->request->getPort());
$this->assertEquals('127.0.0.1:8080', $this->request->getHeader('Host'));
$this->request->setPort(80);
$this->assertEquals('127.0.0.1', $this->request->getHeader('Host'));
}
public function testRequestHandlesAuthorization()
{
$this->assertEquals(null, $this->request->getUsername());
$this->assertEquals(null, $this->request->getPassword());
$this->assertSame($this->request, $this->request->setAuth('michael', '123'));
$this->assertEquals('michael', $this->request->getUsername());
$this->assertEquals('123', $this->request->getPassword());
$this->assertSame($this->request, $this->request->setAuth('michael', ''));
$this->assertEquals('michael', $this->request->getUsername());
$this->assertEquals('', $this->request->getPassword());
$this->request->setAuth(false);
$this->assertEquals(null, $this->request->getUsername());
$this->assertEquals(null, $this->request->getPassword());
$request = new Request('GET', $this->getServer()->getUrl());
$request->setAuth('michael', 'password', CURLAUTH_DIGEST);
$this->assertEquals('michael:password', $request->getCurlOptions()->get(CURLOPT_USERPWD));
$this->assertEquals(CURLAUTH_DIGEST, $request->getCurlOptions()->get(CURLOPT_HTTPAUTH));
}
public function testValidatesAuth()
{
$this->request->setAuth('foo', 'bar', 'bam');
}
public function testGetResourceUri()
{
$this->assertEquals('/', $this->request->getResource());
$this->request->setPath('/index.html');
$this->assertEquals('/index.html', $this->request->getResource());
$this->request->getQuery()->add('v', '1');
$this->assertEquals('/index.html?v=1', $this->request->getResource());
}
public function testRequestHasMutableUrl()
{
$url = 'http://www.test.com:8081/path?q=123#fragment';
$u = Url::factory($url);
$this->assertSame($this->request, $this->request->setUrl($url));
$this->assertEquals($url, $this->request->getUrl());
$this->assertSame($this->request, $this->request->setUrl($u));
$this->assertEquals($url, $this->request->getUrl());
}
public function testRequestHasState()
{
$this->assertEquals(RequestInterface::STATE_NEW, $this->request->getState());
$this->request->setState(RequestInterface::STATE_TRANSFER);
$this->assertEquals(RequestInterface::STATE_TRANSFER, $this->request->getState());
}
public function testSetManualResponse()
{
$response = new Response(200, array(
'Date' => 'Sat, 16 Oct 2010 17:27:14 GMT',
'Expires' => '-1',
'Cache-Control' => 'private, max-age=0',
'Content-Type' => 'text/html; charset=ISO-8859-1',
), 'response body');
$this->assertSame($this->request, $this->request->setResponse($response), '-> setResponse() must use a fluent interface');
$this->assertEquals('complete', $this->request->getState(), '-> setResponse() must change the state of the request to complete');
$this->assertSame($response, $this->request->getResponse(), '-> setResponse() must set the exact same response that was passed in to it');
}
public function testRequestCanHaveManuallySetResponseBody()
{
$file = __DIR__ . '/../../TestData/temp.out';
if (file_exists($file)) {
unlink($file);
}
$this->getServer()->enqueue("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\ndata");
$request = RequestFactory::getInstance()->create('GET', $this->getServer()->getUrl());
$request->setClient($this->client);
$entityBody = EntityBody::factory(fopen($file, 'w+'));
$request->setResponseBody($entityBody);
$response = $request->send();
$this->assertSame($entityBody, $response->getBody());
$this->assertTrue(file_exists($file));
$this->assertEquals('data', file_get_contents($file));
unlink($file);
$this->assertEquals('data', $response->getBody(true));
}
public function testHoldsCookies()
{
$this->assertNull($this->request->getCookie('test'));
$this->assertSame($this->request, $this->request->addCookie('test', 'abc'));
$this->assertEquals('abc', $this->request->getCookie('test'));
$this->request->setHeader('Cookie', '__utma=1.638370270.1344367610.1374365610.1944450276.2; __utmz=1.1346368610.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); hl=de; PHPSESSID=ak93pqashi5uubuoq8fjv60897');
$this->assertEquals('1.638370270.1344367610.1374365610.1944450276.2', $this->request->getCookie('__utma'));
$this->assertEquals('1.1346368610.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)', $this->request->getCookie('__utmz'));
$this->assertEquals('de', $this->request->getCookie('hl'));
$this->assertEquals('ak93pqashi5uubuoq8fjv60897', $this->request->getCookie('PHPSESSID'));
$this->request->setHeader('Cookie', null);
$this->assertNull($this->request->getCookie('test'));
$this->request->removeHeader('Cookie');
$this->assertSame($this->request, $this->request->addCookie('test', 'abc'));
$this->assertEquals('abc', $this->request->getCookie('test'));
$this->assertSame($this->request, $this->request->removeCookie('test'));
$this->assertNull($this->request->getCookie('test'));
$this->assertSame($this->request, $this->request->addCookie('test', 'abc'));
$this->request->removeHeader('Cookie');
$this->assertEquals('', (string) $this->request->getHeader('Cookie'));
$this->request->addCookie('foo', 'bar')->addCookie('baz', 'boo');
$this->request->removeCookie('foo');
$this->assertEquals(array(
'baz' => 'boo'
), $this->request->getCookies());
$this->request->addCookie('foo', 'bar');
$this->assertEquals('baz=boo; foo=bar', (string) $this->request->getHeader('Cookie'));
}
public function testRequestThrowsExceptionWhenSetToCompleteWithNoResponse()
{
$this->request->setState(RequestInterface::STATE_COMPLETE);
}
public function testClonedRequestsUseNewInternalState()
{
$p = new AsyncPlugin();
$this->request->getEventDispatcher()->addSubscriber($p);
$h = $this->request->getHeader('Host');
$r = clone $this->request;
$this->assertEquals(RequestInterface::STATE_NEW, $r->getState());
$this->assertNotSame($r->getQuery(), $this->request->getQuery());
$this->assertNotSame($r->getCurlOptions(), $this->request->getCurlOptions());
$this->assertNotSame($r->getEventDispatcher(), $this->request->getEventDispatcher());
$this->assertEquals($r->getHeaders(), $this->request->getHeaders());
$this->assertNotSame($h, $r->getHeader('Host'));
$this->assertNotSame($r->getParams(), $this->request->getParams());
$this->assertTrue($this->request->getEventDispatcher()->hasListeners('request.sent'));
}
public function testRecognizesBasicAuthCredentialsInUrls()
{
$this->request->setUrl('http://michael:test@test.com/');
$this->assertEquals('michael', $this->request->getUsername());
$this->assertEquals('test', $this->request->getPassword());
}
public function testRequestCanBeSentUsingCurl()
{
$this->getServer()->flush();
$this->getServer()->enqueue(array(
"HTTP/1.1 200 OK\r\nContent-Length: 4\r\nExpires: Thu, 01 Dec 1994 16:00:00 GMT\r\nConnection: close\r\n\r\ndata",
"HTTP/1.1 200 OK\r\nContent-Length: 4\r\nExpires: Thu, 01 Dec 1994 16:00:00 GMT\r\nConnection: close\r\n\r\ndata",
"HTTP/1.1 404 Not Found\r\nContent-Encoding: application/xml\r\nContent-Length: 48\r\n\r\n<error><mesage>File not found</message></error>"
));
$request = RequestFactory::getInstance()->create('GET', $this->getServer()->getUrl());
$request->setClient($this->client);
$response = $request->send();
$this->assertEquals('data', $response->getBody(true));
$this->assertEquals(200, (int) $response->getStatusCode());
$this->assertEquals('OK', $response->getReasonPhrase());
$this->assertEquals(4, $response->getContentLength());
$this->assertEquals('Thu, 01 Dec 1994 16:00:00 GMT', $response->getExpires());
$response2 = $request->send();
$this->assertNotSame($response, $response2);
try {
$request = RequestFactory::getInstance()->create('GET', $this->getServer()->getUrl() . 'index.html');
$request->setClient($this->client);
$response = $request->send();
$this->fail('Request did not receive a 404 response');
} catch (BadResponseException $e) {
}
$requests = $this->getServer()->getReceivedRequests(true);
$messages = $this->getServer()->getReceivedRequests(false);
$port = $this->getServer()->getPort();
$userAgent = $this->client->getDefaultUserAgent();
$this->assertEquals('127.0.0.1:' . $port, $requests[0]->getHeader('Host'));
$this->assertEquals('127.0.0.1:' . $port, $requests[1]->getHeader('Host'));
$this->assertEquals('127.0.0.1:' . $port, $requests[2]->getHeader('Host'));
$this->assertEquals('/', $requests[0]->getPath());
$this->assertEquals('/', $requests[1]->getPath());
$this->assertEquals('/index.html', $requests[2]->getPath());
$parts = explode("\r\n", $messages[0]);
$this->assertEquals('GET / HTTP/1.1', $parts[0]);
$parts = explode("\r\n", $messages[1]);
$this->assertEquals('GET / HTTP/1.1', $parts[0]);
$parts = explode("\r\n", $messages[2]);
$this->assertEquals('GET /index.html HTTP/1.1', $parts[0]);
}
public function testThrowsExceptionsWhenUnsuccessfulResponseIsReceivedByDefault()
{
$this->getServer()->flush();
$this->getServer()->enqueue("HTTP/1.1 404 Not found\r\nContent-Length: 0\r\n\r\n");
try {
$request = $this->client->get('/index.html');
$response = $request->send();
$this->fail('Request did not receive a 404 response');
} catch (BadResponseException $e) {
$this->assertContains('Client error response', $e->getMessage());
$this->assertContains('[status code] 404', $e->getMessage());
$this->assertContains('[reason phrase] Not found', $e->getMessage());
}
}
public function testCanShortCircuitErrorHandling()
{
$request = $this->request;
$response = new Response(404);
$request->setResponse($response, true);
$out = '';
$that = $this;
$request->getEventDispatcher()->addListener('request.error', function($event) use (&$out, $that) {
$out .= $event['request'] . "\n" . $event['response'] . "\n";
$event->stopPropagation();
});
$request->send();
$this->assertContains((string) $request, $out);
$this->assertContains((string) $request->getResponse(), $out);
$this->assertSame($response, $request->getResponse());
}
public function testCanOverrideUnsuccessfulResponses()
{
$this->getServer()->flush();
$this->getServer()->enqueue(array(
"HTTP/1.1 404 NOT FOUND\r\n" .
"Content-Length: 0\r\n" .
"\r\n",
"HTTP/1.1 200 OK\r\n" .
"Content-Length: 0\r\n" .
"\r\n"
));
$newResponse = null;
$request = $this->request;
$request->getEventDispatcher()->addListener('request.error', function($event) use (&$newResponse) {
if ($event['response']->getStatusCode() == 404) {
$newRequest = clone $event['request'];
$newResponse = $newRequest->send();
$event['response'] = $newResponse;
$event->stopPropagation();
}
});
$request->send();
$this->assertEquals(200, $request->getResponse()->getStatusCode());
$this->assertSame($newResponse, $request->getResponse());
$this->assertEquals(2, count($this->getServer()->getReceivedRequests()));
}
public function testCanRetrieveUrlObject()
{
$request = new Request('GET', 'http://www.example.com/foo?abc=d');
$this->assertInstanceOf('Guzzle\Http\Url', $request->getUrl(true));
$this->assertEquals('http://www.example.com/foo?abc=d', $request->getUrl());
$this->assertEquals('http://www.example.com/foo?abc=d', (string) $request->getUrl(true));
}
public function testUnresolvedRedirectsReturnResponse()
{
$this->getServer()->flush();
$this->getServer()->enqueue(array(
"HTTP/1.1 303 SEE OTHER\r\nContent-Length: 0\r\n\r\n",
"HTTP/1.1 301 Foo\r\nLocation: /foo\r\nContent-Length: 0\r\n\r\n"
));
$request = $this->request;
$this->assertEquals(303, $request->send()->getStatusCode());
$request->getParams()->set(RedirectPlugin::DISABLE, true);
$this->assertEquals(301, $request->send()->getStatusCode());
}
public function testCanSendCustomRequests()
{
$this->getServer()->flush();
$this->getServer()->enqueue("HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");
$request = $this->client->createRequest('PROPFIND', $this->getServer()->getUrl(), array(
'Content-Type' => 'text/plain'
), 'foo');
$response = $request->send();
$requests = $this->getServer()->getReceivedRequests(true);
$this->assertEquals('PROPFIND', $requests[0]->getMethod());
$this->assertEquals(3, (string) $requests[0]->getHeader('Content-Length'));
$this->assertEquals('foo', (string) $requests[0]->getBody());
}
public function testEnsuresFileCanBeCreated()
{
$this->getServer()->flush();
$this->getServer()->enqueue("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\ntest");
$this->client->get('/')->setResponseBody('/wefwefefefefwewefwe/wefwefwefefwe/wefwefewfw.txt')->send();
}
public function testAllowsFilenameForDownloadingContent()
{
$this->getServer()->flush();
$this->getServer()->enqueue("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\ntest");
$name = sys_get_temp_dir() . '/foo.txt';
$this->client->get('/')->setResponseBody($name)->send();
$this->assertEquals('test', file_get_contents($name));
unlink($name);
}
public function testUsesCustomResponseBodyWhenItIsCustom()
{
$en = EntityBody::factory();
$request = $this->client->get();
$request->setResponseBody($en);
$request->setResponse(new Response(200, array(), 'foo'));
$this->assertEquals('foo', (string) $en);
}
public function testCanChangePortThroughScheme()
{
$request = new Request('GET', 'http://foo.com');
$request->setScheme('https');
$this->assertEquals('https://foo.com', (string) $request->getUrl());
$this->assertEquals('foo.com', $request->getHost());
$request->setScheme('http');
$this->assertEquals('http://foo.com', (string) $request->getUrl());
$this->assertEquals('foo.com', $request->getHost());
$request->setPort(null);
$this->assertEquals('http://foo.com', (string) $request->getUrl());
$this->assertEquals('foo.com', $request->getHost());
}
}