magento2-docker/dev/tests/api-functional/testsuite/Magento/Framework/Stdlib/CookieManagerTest.php

174 lines
5.9 KiB
PHP

<?php
namespace Magento\Framework\Stdlib;
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\TestCase\HttpClient\CurlClientWithCookies;
/**
* End to end test of the Cookie Manager, using curl.
*
* Uses controllers in TestModule1 to set and delete cookies and verify 'Set-Cookie' headers that come back.
*/
class CookieManagerTest extends \Magento\TestFramework\TestCase\WebapiAbstract
{
/**
* @var string
*/
private $cookieTesterUrl = 'testmoduleone/CookieTester';
/** @var CurlClientWithCookies */
protected $curlClient;
protected function setUp(): void
{
$objectManager = Bootstrap::getObjectManager();
$this->curlClient = $objectManager->get(
\Magento\TestFramework\TestCase\HttpClient\CurlClientWithCookies::class
);
}
/**
* Set a sensitive Cookie and delete it.
*
*/
public function testSensitiveCookie()
{
$url = $this->cookieTesterUrl . '/SetSensitiveCookie';
$cookieParams =
[
'cookie_name' => 'test-sensitive-cookie',
'cookie_value' => 'test-sensitive-cookie-value',
];
$response = $this->curlClient->get($url, $cookieParams);
$cookie = $this->findCookie($cookieParams['cookie_name'], $response['cookies']);
$this->assertNotNull($cookie);
$this->assertEquals($cookieParams['cookie_name'], $cookie['name']);
$this->assertEquals($cookieParams['cookie_value'], $cookie['value']);
$this->assertFalse(isset($cookie['domain']));
$this->assertFalse(isset($cookie['path']));
$this->assertEquals('true', $cookie['httponly']);
$this->assertFalse(isset($cookie['secure']));
$this->assertFalse(isset($cookie['max-age']));
}
/**
* Set a public cookie
*
*/
public function testPublicCookieNameValue()
{
$url = $this->cookieTesterUrl . '/SetPublicCookie';
$cookieParams =
[
'cookie_name' => 'test-cookie',
'cookie_value' => 'test-cookie-value',
];
$response = $this->curlClient->get($url, $cookieParams);
$cookie = $this->findCookie($cookieParams['cookie_name'], $response['cookies']);
$this->assertNotNull($cookie);
$this->assertEquals($cookieParams['cookie_name'], $cookie['name']);
$this->assertEquals($cookieParams['cookie_value'], $cookie['value']);
$this->assertFalse(isset($cookie['domain']));
$this->assertFalse(isset($cookie['path']));
$this->assertFalse(isset($cookie['httponly']));
$this->assertFalse(isset($cookie['secure']));
$this->assertFalse(isset($cookie['max-age']));
}
/**
* Set a public cookie
*
*/
public function testPublicCookieAll()
{
$url = $this->cookieTesterUrl . '/SetPublicCookie';
$cookieParams =
[
'cookie_name' => 'test-cookie',
'cookie_value' => 'test-cookie-value',
'cookie_domain' => 'www.example.com',
'cookie_path' => '/test/path',
'cookie_httponly' => 'true',
'cookie_secure' => 'true',
'cookie_duration' => '600',
];
$response = $this->curlClient->get($url, $cookieParams);
$cookie = $this->findCookie($cookieParams['cookie_name'], $response['cookies']);
$this->assertNotNull($cookie);
$this->assertEquals($cookieParams['cookie_name'], $cookie['name']);
$this->assertEquals($cookieParams['cookie_value'], $cookie['value']);
$this->assertEquals($cookieParams['cookie_domain'], $cookie['domain']);
$this->assertEquals($cookieParams['cookie_path'], $cookie['path']);
$this->assertEquals($cookieParams['cookie_httponly'], $cookie['httponly']);
$this->assertEquals($cookieParams['cookie_secure'], $cookie['secure']);
if (isset($cookie['max-age'])) {
$this->assertEquals($cookieParams['cookie_duration'], $cookie['max-age']);
}
$this->assertTrue(isset($cookie['expires']));
}
/**
* Delete a cookie
*
*/
public function testDeleteCookie()
{
$url = $this->cookieTesterUrl . '/DeleteCookie';
$cookieParams =
[
'cookie_name' => 'test-cookie',
'cookie_value' => 'test-cookie-value',
];
$response = $this->curlClient->get(
$url,
$cookieParams,
['Cookie: test-cookie=test-cookie-value; anothertestcookie=anothertestcookievalue']
);
$cookie = $this->findCookie($cookieParams['cookie_name'], $response['cookies']);
$this->assertNotNull($cookie);
$this->assertEquals($cookieParams['cookie_name'], $cookie['name']);
$this->assertEquals('deleted', $cookie['value']);
$this->assertFalse(isset($cookie['domain']));
$this->assertFalse(isset($cookie['path']));
$this->assertFalse(isset($cookie['httponly']));
$this->assertFalse(isset($cookie['secure']));
if (isset($cookie['max-age'])) {
$this->assertEquals(0, $cookie['max-age']);
}
$this->assertEquals(
date('D, j-M-o H:i:s T', strtotime('Thu, 01-Jan-1970 00:00:01 GMT')),
date('D, j-M-o H:i:s T', strtotime($cookie['expires']))
);
}
/**
* Find cookie with given name in the list of cookies
*
* @param string $cookieName
* @param array $cookies
* @return $cookie|null
* @SuppressWarnings(PHPMD.UnusedLocalVariable)
*/
private function findCookie($cookieName, $cookies)
{
foreach ($cookies as $cookieIndex => $cookie) {
if ($cookie['name'] === $cookieName) {
return $cookie;
}
}
return null;
}
}