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

Commit e8e667e

Browse files
committed
Method setCookies on Client accepts name=>value pairs or SetCookie instances
Per documentation it should be possible to pass array of SetCookie to Client::setCookies. Fixes #114
1 parent e56f731 commit e8e667e

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-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: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,4 +579,34 @@ 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+
* @param string|array $cookies
593+
*/
594+
public function testSetCookies(array $cookies)
595+
{
596+
$client = new Client();
597+
598+
$client->setCookies($cookies);
599+
600+
self::assertCount(1, $client->getCookies());
601+
self::assertContainsOnlyInstancesOf(SetCookie::class, $client->getCookies());
602+
}
603+
604+
public function testSetCookieAcceptOnlyArray()
605+
{
606+
$client = new Client();
607+
608+
$this->expectException(HttpException\InvalidArgumentException::class);
609+
$this->expectExceptionMessage('Invalid cookies passed as parameter, it must be an array');
610+
$client->setCookies(new SetCookie('name', 'value'));
611+
}
582612
}

0 commit comments

Comments
 (0)