|
14 | 14 | use Zend\Http\Header\MultipleHeaderInterface;
|
15 | 15 | use Zend\Http\Header\SetCookie;
|
16 | 16 |
|
| 17 | +use function strtolower; |
| 18 | +use function strtoupper; |
| 19 | + |
17 | 20 | class SetCookieTest extends TestCase
|
18 | 21 | {
|
19 | 22 | /**
|
@@ -69,6 +72,32 @@ public function testSetCookieConstructorWithSameSite()
|
69 | 72 | $this->assertEquals('Strict', $setCookieHeader->getSameSite());
|
70 | 73 | }
|
71 | 74 |
|
| 75 | + public function testSetCookieConstructorWithSameSiteCaseInsensitive() |
| 76 | + { |
| 77 | + $setCookieHeader = new SetCookie( |
| 78 | + 'myname', |
| 79 | + 'myvalue', |
| 80 | + 'Wed, 13-Jan-2021 22:23:01 GMT', |
| 81 | + '/accounts', |
| 82 | + 'docs.foo.com', |
| 83 | + true, |
| 84 | + true, |
| 85 | + 99, |
| 86 | + 9, |
| 87 | + strtolower(SetCookie::SAME_SITE_STRICT) |
| 88 | + ); |
| 89 | + $this->assertEquals('myname', $setCookieHeader->getName()); |
| 90 | + $this->assertEquals('myvalue', $setCookieHeader->getValue()); |
| 91 | + $this->assertEquals('Wed, 13-Jan-2021 22:23:01 GMT', $setCookieHeader->getExpires()); |
| 92 | + $this->assertEquals('/accounts', $setCookieHeader->getPath()); |
| 93 | + $this->assertEquals('docs.foo.com', $setCookieHeader->getDomain()); |
| 94 | + $this->assertTrue($setCookieHeader->isSecure()); |
| 95 | + $this->assertTrue($setCookieHeader->isHttpOnly()); |
| 96 | + $this->assertEquals(99, $setCookieHeader->getMaxAge()); |
| 97 | + $this->assertEquals(9, $setCookieHeader->getVersion()); |
| 98 | + $this->assertEquals(SetCookie::SAME_SITE_STRICT, $setCookieHeader->getSameSite()); |
| 99 | + } |
| 100 | + |
72 | 101 | public function testSetCookieWithInvalidSameSiteValueThrowException()
|
73 | 102 | {
|
74 | 103 | $this->expectException(InvalidArgumentException::class);
|
@@ -105,6 +134,29 @@ public function testSetInvalidSameSiteDirectiveValueViaSetter()
|
105 | 134 | $setCookieHeader->setSameSite('InvalidValue');
|
106 | 135 | }
|
107 | 136 |
|
| 137 | + public function testSameSiteGetterReturnsCanonicalValue() |
| 138 | + { |
| 139 | + $setCookieHeader = new SetCookie( |
| 140 | + 'myname', |
| 141 | + 'myvalue', |
| 142 | + 'Wed, 13-Jan-2021 22:23:01 GMT', |
| 143 | + '/accounts', |
| 144 | + 'docs.foo.com', |
| 145 | + true, |
| 146 | + true, |
| 147 | + 99, |
| 148 | + 9, |
| 149 | + SetCookie::SAME_SITE_STRICT |
| 150 | + ); |
| 151 | + $this->assertEquals(SetCookie::SAME_SITE_STRICT, $setCookieHeader->getSameSite()); |
| 152 | + |
| 153 | + $setCookieHeader->setSameSite(strtolower(SetCookie::SAME_SITE_LAX)); |
| 154 | + $this->assertEquals(SetCookie::SAME_SITE_LAX, $setCookieHeader->getSameSite()); |
| 155 | + |
| 156 | + $setCookieHeader->setSameSite(strtoupper(SetCookie::SAME_SITE_NONE)); |
| 157 | + $this->assertEquals(SetCookie::SAME_SITE_NONE, $setCookieHeader->getSameSite()); |
| 158 | + } |
| 159 | + |
108 | 160 | public function testSetCookieFromStringWithQuotedValue()
|
109 | 161 | {
|
110 | 162 | $setCookieHeader = SetCookie::fromString('Set-Cookie: myname="quotedValue"');
|
@@ -161,6 +213,39 @@ public function testSetCookieFromStringCanCreateSingleHeader()
|
161 | 213 | $this->assertTrue($setCookieHeader->isSecure());
|
162 | 214 | $this->assertTrue($setCookieHeader->isHttponly());
|
163 | 215 | $this->assertEquals(setCookie::SAME_SITE_STRICT, $setCookieHeader->getSameSite());
|
| 216 | + |
| 217 | + $setCookieHeader = SetCookie::fromString( |
| 218 | + 'set-cookie: myname=myvalue; Domain=docs.foo.com; Path=/accounts;' |
| 219 | + . 'Expires=Wed, 13-Jan-2021 22:23:01 GMT; Secure; HttpOnly; SameSite=strict' |
| 220 | + ); |
| 221 | + $this->assertInstanceOf(MultipleHeaderInterface::class, $setCookieHeader); |
| 222 | + $this->assertEquals('myname', $setCookieHeader->getName()); |
| 223 | + $this->assertEquals('myvalue', $setCookieHeader->getValue()); |
| 224 | + $this->assertEquals('docs.foo.com', $setCookieHeader->getDomain()); |
| 225 | + $this->assertEquals('/accounts', $setCookieHeader->getPath()); |
| 226 | + $this->assertEquals('Wed, 13-Jan-2021 22:23:01 GMT', $setCookieHeader->getExpires()); |
| 227 | + $this->assertTrue($setCookieHeader->isSecure()); |
| 228 | + $this->assertTrue($setCookieHeader->isHttponly()); |
| 229 | + $this->assertEquals(setCookie::SAME_SITE_STRICT, $setCookieHeader->getSameSite()); |
| 230 | + } |
| 231 | + |
| 232 | + public function testFieldValueWithSameSiteCaseInsensitive() |
| 233 | + { |
| 234 | + $setCookieHeader = SetCookie::fromString( |
| 235 | + 'set-cookie: myname=myvalue; SameSite=Strict' |
| 236 | + ); |
| 237 | + $this->assertEquals( |
| 238 | + 'myname=myvalue; SameSite=Strict', |
| 239 | + $setCookieHeader->getFieldValue() |
| 240 | + ); |
| 241 | + |
| 242 | + $setCookieHeader = SetCookie::fromString( |
| 243 | + 'set-cookie: myname=myvalue; SameSite=strict' |
| 244 | + ); |
| 245 | + $this->assertEquals( |
| 246 | + 'myname=myvalue; SameSite=Strict', |
| 247 | + $setCookieHeader->getFieldValue() |
| 248 | + ); |
164 | 249 | }
|
165 | 250 |
|
166 | 251 | public function testSetCookieFromStringCanCreateMultipleHeaders()
|
|
0 commit comments