Skip to content
This repository was archived by the owner on Jan 30, 2020. It is now read-only.

Commit f47bafc

Browse files
committed
Merge pull request #188 from michalbundyra/hotfix/client-set-cookies
Method setCookies on Client accepts name=>value pairs or SetCookie instances
2 parents 5540783 + 052db7b commit f47bafc

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

src/Client.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Traversable;
1212
use Zend\Http\Client\Adapter\Curl;
1313
use Zend\Http\Client\Adapter\Socket;
14+
use Zend\Http\Header\SetCookie;
1415
use Zend\Stdlib;
1516
use Zend\Stdlib\ArrayUtils;
1617
use Zend\Stdlib\ErrorHandler;
@@ -603,7 +604,7 @@ public function addCookie(
603604
/**
604605
* Set an array of cookies
605606
*
606-
* @param array $cookies
607+
* @param array|SetCookie[] $cookies Cookies as name=>value pairs or instances of SetCookie.
607608
* @throws Exception\InvalidArgumentException
608609
* @return Client
609610
*/
@@ -612,7 +613,11 @@ public function setCookies($cookies)
612613
if (is_array($cookies)) {
613614
$this->clearCookies();
614615
foreach ($cookies as $name => $value) {
615-
$this->addCookie($name, $value);
616+
if ($value instanceof SetCookie) {
617+
$this->addCookie($value);
618+
} else {
619+
$this->addCookie($name, $value);
620+
}
616621
}
617622
} else {
618623
throw new Exception\InvalidArgumentException('Invalid cookies passed as parameter, it must be an array');

test/ClientTest.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,4 +579,32 @@ public function testUriPortIsNotSetWhenUriIsRelative()
579579
$client->send();
580580
$this->assertNull($client->getUri()->getPort());
581581
}
582+
583+
public function cookies()
584+
{
585+
yield 'name-value' => [['cookie-name' => 'cookie-value']];
586+
yield 'SetCookie' => [[new SetCookie('cookie-name', 'cookie-value')]];
587+
}
588+
589+
/**
590+
* @dataProvider cookies
591+
*/
592+
public function testSetCookies(array $cookies)
593+
{
594+
$client = new Client();
595+
596+
$client->setCookies($cookies);
597+
598+
self::assertCount(1, $client->getCookies());
599+
self::assertContainsOnlyInstancesOf(SetCookie::class, $client->getCookies());
600+
}
601+
602+
public function testSetCookieAcceptOnlyArray()
603+
{
604+
$client = new Client();
605+
606+
$this->expectException(HttpException\InvalidArgumentException::class);
607+
$this->expectExceptionMessage('Invalid cookies passed as parameter, it must be an array');
608+
$client->setCookies(new SetCookie('name', 'value'));
609+
}
582610
}

0 commit comments

Comments
 (0)