mirror of
https://github.com/guzzle/guzzle.git
synced 2025-02-25 18:43:22 +01:00
129 lines
4.1 KiB
PHP
129 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace Guzzle\Tests\Plugin\Cookie;
|
|
|
|
use Guzzle\Common\Event;
|
|
use Guzzle\Plugin\Cookie\Cookie;
|
|
use Guzzle\Plugin\Cookie\CookieJar\ArrayCookieJar;
|
|
use Guzzle\Http\Client;
|
|
use Guzzle\Http\Message\Response;
|
|
use Guzzle\Plugin\Cookie\CookiePlugin;
|
|
|
|
/**
|
|
* @group server
|
|
* @covers Guzzle\Plugin\Cookie\CookiePlugin
|
|
*/
|
|
class CookiePluginTest extends \Guzzle\Tests\GuzzleTestCase
|
|
{
|
|
public function testExtractsAndStoresCookies()
|
|
{
|
|
$response = new Response(200);
|
|
$mock = $this->getMockBuilder('Guzzle\Plugin\Cookie\CookieJar\ArrayCookieJar')
|
|
->setMethods(array('addCookiesFromResponse'))
|
|
->getMock();
|
|
|
|
$mock->expects($this->exactly(1))
|
|
->method('addCookiesFromResponse')
|
|
->with($response);
|
|
|
|
$plugin = new CookiePlugin($mock);
|
|
$plugin->onRequestSent(new Event(array(
|
|
'response' => $response
|
|
)));
|
|
}
|
|
|
|
public function testAddsCookiesToRequests()
|
|
{
|
|
$cookie = new Cookie(array(
|
|
'name' => 'foo',
|
|
'value' => 'bar'
|
|
));
|
|
|
|
$mock = $this->getMockBuilder('Guzzle\Plugin\Cookie\CookieJar\ArrayCookieJar')
|
|
->setMethods(array('getMatchingCookies'))
|
|
->getMock();
|
|
|
|
$mock->expects($this->once())
|
|
->method('getMatchingCookies')
|
|
->will($this->returnValue(array($cookie)));
|
|
|
|
$plugin = new CookiePlugin($mock);
|
|
|
|
$client = new Client();
|
|
$client->getEventDispatcher()->addSubscriber($plugin);
|
|
|
|
$request = $client->get('http://www.example.com');
|
|
$plugin->onRequestBeforeSend(new Event(array(
|
|
'request' => $request
|
|
)));
|
|
|
|
$this->assertEquals('bar', $request->getCookie('foo'));
|
|
}
|
|
|
|
public function testCookiesAreExtractedFromRedirectResponses()
|
|
{
|
|
$plugin = new CookiePlugin(new ArrayCookieJar());
|
|
$this->getServer()->flush();
|
|
$this->getServer()->enqueue(array(
|
|
"HTTP/1.1 302 Moved Temporarily\r\n" .
|
|
"Set-Cookie: test=583551; expires=Wednesday, 23-Mar-2050 19:49:45 GMT; path=/\r\n" .
|
|
"Location: /redirect\r\n\r\n",
|
|
"HTTP/1.1 200 OK\r\n" .
|
|
"Content-Length: 0\r\n\r\n",
|
|
"HTTP/1.1 200 OK\r\n" .
|
|
"Content-Length: 0\r\n\r\n"
|
|
));
|
|
|
|
$client = new Client($this->getServer()->getUrl());
|
|
$client->getEventDispatcher()->addSubscriber($plugin);
|
|
|
|
$client->get()->send();
|
|
$request = $client->get();
|
|
$request->send();
|
|
$this->assertEquals('test=583551', $request->getHeader('Cookie'));
|
|
|
|
$requests = $this->getServer()->getReceivedRequests(true);
|
|
// Confirm subsequent requests have the cookie.
|
|
$this->assertEquals('test=583551', $requests[2]->getHeader('Cookie'));
|
|
// Confirm the redirected request has the cookie.
|
|
$this->assertEquals('test=583551', $requests[1]->getHeader('Cookie'));
|
|
}
|
|
|
|
public function testCookiesAreNotAddedWhenParamIsSet()
|
|
{
|
|
$jar = new ArrayCookieJar();
|
|
$plugin = new CookiePlugin($jar);
|
|
|
|
$jar->add(new Cookie(array(
|
|
'domain' => 'example.com',
|
|
'path' => '/',
|
|
'name' => 'test',
|
|
'value' => 'hi',
|
|
'expires' => time() + 3600
|
|
)));
|
|
|
|
$client = new Client('http://example.com');
|
|
$client->getEventDispatcher()->addSubscriber($plugin);
|
|
|
|
// Ensure that it is normally added
|
|
$request = $client->get();
|
|
$request->setResponse(new Response(200), true);
|
|
$request->send();
|
|
$this->assertEquals('hi', $request->getCookie('test'));
|
|
|
|
// Now ensure that it is not added
|
|
$request = $client->get();
|
|
$request->getParams()->set('cookies.disable', true);
|
|
$request->setResponse(new Response(200), true);
|
|
$request->send();
|
|
$this->assertNull($request->getCookie('test'));
|
|
}
|
|
|
|
public function testProvidesCookieJar()
|
|
{
|
|
$jar = new ArrayCookieJar();
|
|
$plugin = new CookiePlugin($jar);
|
|
$this->assertSame($jar, $plugin->getCookieJar());
|
|
}
|
|
}
|