Skip to content

Commit

Permalink
Use methods that exist on RequestInterface
Browse files Browse the repository at this point in the history
I mistakenly used ServerRequest methods before. The new code uses
methods that actually exist on client requests.
  • Loading branch information
markstory committed Mar 30, 2017
1 parent 87d9062 commit edd7109
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 59 deletions.
17 changes: 10 additions & 7 deletions src/Http/Cookie/CookieCollection.php
Expand Up @@ -182,13 +182,16 @@ public function getIterator()
public function addToRequest(RequestInterface $request)
{
$uri = $request->getUri();
$path = $uri->getPath();
$host = $uri->getHost();
$scheme = $uri->getScheme();
$cookies = $this->findMatchingCookies($scheme, $host, $path);
$cookies = array_merge($request->getCookieParams(), $cookies);

return $request->withCookieParams($cookies);
$cookies = $this->findMatchingCookies(
$uri->getScheme(),
$uri->getHost(),
$uri->getPath()
);
$cookiePairs = [];
foreach ($cookies as $key => $value) {
$cookiePairs[] = sprintf("%s=%s", urlencode($key), urlencode($value));
}
return $request->withAddedHeader('Cookie', implode('; ', $cookiePairs));
}

/**
Expand Down
67 changes: 15 additions & 52 deletions tests/TestCase/Http/Cookie/CookieCollectionTest.php
Expand Up @@ -12,6 +12,7 @@
*/
namespace Cake\Test\TestCase\Http\Cookie;

use Cake\Http\Client\Request as ClientRequest;
use Cake\Http\Client\Response as ClientResponse;
use Cake\Http\Cookie\Cookie;
use Cake\Http\Cookie\CookieCollection;
Expand Down Expand Up @@ -329,43 +330,21 @@ public function testAddToRequest()
->add(new Cookie('api', 'A', null, '/api', 'example.com'))
->add(new Cookie('blog', 'b', null, '/blog', 'blog.example.com'))
->add(new Cookie('expired', 'ex', new DateTime('-2 seconds'), '/', 'example.com'));
$request = new ServerRequest([
'environment' => [
'HTTP_HOST' => 'example.com',
'REQUEST_URI' => '/api'
]
]);
$request = new ClientRequest('http://example.com/api');
$request = $collection->addToRequest($request);
$this->assertCount(1, $request->getCookieParams());
$this->assertSame(['api' => 'A'], $request->getCookieParams());
$this->assertSame('api=A', $request->getHeaderLine('Cookie'));

$request = new ServerRequest([
'environment' => [
'HTTP_HOST' => 'example.com',
'REQUEST_URI' => '/'
]
]);
$request = new ClientRequest('http://example.com/');
$request = $collection->addToRequest($request);
$this->assertCount(0, $request->getCookieParams());
$this->assertSame('', $request->getHeaderLine(''));

$request = new ServerRequest([
'environment' => [
'HTTP_HOST' => 'example.com',
'REQUEST_URI' => '/blog'
]
]);
$request = new ClientRequest('http://example.com/blog');
$request = $collection->addToRequest($request);
$this->assertCount(0, $request->getCookieParams(), 'domain matching should apply');
$this->assertSame('', $request->getHeaderLine('Cookie'), 'domain matching should apply');

$request = new ServerRequest([
'environment' => [
'HTTP_HOST' => 'foo.blog.example.com',
'REQUEST_URI' => '/blog'
]
]);
$request = new ClientRequest('http://foo.blog.example.com/blog');
$request = $collection->addToRequest($request);
$this->assertCount(1, $request->getCookieParams(), 'domain matching should apply');
$this->assertSame(['blog' => 'b'], $request->getCookieParams());
$this->assertSame('blog=b', $request->getHeaderLine('Cookie'));
}

/**
Expand All @@ -378,14 +357,9 @@ public function testAddToRequestLeadingDot()
$collection = new CookieCollection();
$collection = $collection
->add(new Cookie('public', 'b', null, '/', '.example.com'));
$request = new ServerRequest([
'environment' => [
'HTTP_HOST' => 'example.com',
'REQUEST_URI' => '/blog'
]
]);
$request = new ClientRequest('http://example.com/blog');
$request = $collection->addToRequest($request);
$this->assertSame(['public' => 'b'], $request->getCookieParams());
$this->assertSame('public=b', $request->getHeaderLine('Cookie'));
}

/**
Expand All @@ -399,24 +373,13 @@ public function testAddToRequestSecureCrumb()
$collection = $collection
->add(new Cookie('secret', 'A', null, '/', 'example.com', true))
->add(new Cookie('public', 'b', null, '/', '.example.com', false));
$request = new ServerRequest([
'environment' => [
'HTTPS' => 'on',
'HTTP_HOST' => 'example.com',
'REQUEST_URI' => '/api'
]
]);
$request = new ClientRequest('https://example.com/api');
$request = $collection->addToRequest($request);
$this->assertSame(['secret' => 'A', 'public' => 'b'], $request->getCookieParams());
$this->assertSame('secret=A; public=b', $request->getHeaderLine('Cookie'));

// no HTTPS set.
$request = new ServerRequest([
'environment' => [
'HTTP_HOST' => 'example.com',
'REQUEST_URI' => '/api'
]
]);
$request = new ClientRequest('http://example.com/api');
$request = $collection->addToRequest($request);
$this->assertSame(['public' => 'b'], $request->getCookieParams());
$this->assertSame('public=b', $request->getHeaderLine('Cookie'));
}
}

0 comments on commit edd7109

Please sign in to comment.