* @copyright 2012-2013 Jurian Sluiman. * @license http://www.opensource.org/licenses/bsd-license.php BSD License * @link http://juriansluiman.nl */ namespace SlmLocaleTest\Locale; use Laminas\Http\Header\Cookie; use Laminas\Http\Request as HttpRequest; use Laminas\Http\Response as HttpResponse; use PHPUnit\Framework\TestCase; use SlmLocale\LocaleEvent; use SlmLocale\Strategy\CookieStrategy; use SlmLocale\Strategy\Exception\InvalidArgumentException; class CookieStrategyTest extends TestCase { protected $strategy; protected $event; public function setUp(): void { $this->strategy = new CookieStrategy(); $this->event = new LocaleEvent(); $request = new HttpRequest(); $response = new HttpResponse(); $this->event->setRequest($request); $this->event->setResponse($response); } public function testReturnsVoidWhenNoSupportedLocalesAreGiven() { $event = $this->event; $strategy = $this->strategy; $locale = $strategy->detect($event); $this->assertNull($locale); } public function testReturnsVoidWhenNoCookieIsNotSet() { $event = $this->event; $strategy = $this->strategy; $event->setSupported(['foo']); $locale = $strategy->detect($event); $this->assertNull($locale); } public function testLocaleInCookieIsReturned() { $cookie = new Cookie(); $cookie->offsetSet(CookieStrategy::COOKIE_NAME, 'foo'); $event = $this->event; $event->setSupported(['foo']); $event->getRequest() ->getHeaders()->addHeader($cookie); $strategy = $this->strategy; $locale = $strategy->detect($event); $this->assertEquals('foo', $locale); } public function testLocaleInSetCookieHeaderWhenFound() { $strategy = $this->strategy; $event = $this->event; $headers = $event->getResponse()->getHeaders(); $event->setLocale('foo'); $strategy->found($event); $this->assertTrue($headers->has('Set-Cookie')); $cookies = $headers->get('Set-Cookie'); $cookie = $cookies[0]; $name = CookieStrategy::COOKIE_NAME; $this->assertEquals($name, $cookie->getName()); $this->assertEquals('foo', $cookie->getValue()); } public function testSetCookieHeaderSkippedWhenLocaleInRequestHeader() { $cookie = new Cookie(); $cookie->offsetSet(CookieStrategy::COOKIE_NAME, 'foo'); $event = $this->event; $event->getRequest() ->getHeaders()->addHeader($cookie); $strategy = $this->strategy; $headers = $event->getResponse()->getHeaders(); $event->setLocale('foo'); $strategy->found($event); $this->assertFalse($headers->has('Set-Cookie')); } public function testLocaleInSetCookieHeaderWhenLocaleInRequestIsDifferent() { $cookie = new Cookie(); $cookie->offsetSet(CookieStrategy::COOKIE_NAME, 'foo'); $event = $this->event; $event->getRequest() ->getHeaders()->addHeader($cookie); $strategy = $this->strategy; $headers = $event->getResponse()->getHeaders(); $event->setLocale('bar'); $strategy->found($event); $this->assertTrue($headers->has('Set-Cookie')); $cookies = $headers->get('Set-Cookie'); $cookie = $cookies[0]; $name = CookieStrategy::COOKIE_NAME; $this->assertEquals($name, $cookie->getName()); $this->assertEquals('bar', $cookie->getValue()); } public function testLocaleInCookieIsReturnedIfNameChanged() { $cookie = new Cookie(); $cookie->offsetSet('foo_cookie', 'foo'); $event = $this->event; $event->setSupported(['foo']); $event->getRequest() ->getHeaders()->addHeader($cookie); $strategy = $this->strategy; $strategy->setCookieName('foo_cookie'); $locale = $strategy->detect($event); $this->assertEquals('foo', $locale); } public function testInvalidCookieNameFails() { $strategy = $this->strategy; $this->expectException(InvalidArgumentException::class); $strategy->setCookieName('$ThisIsAnInvalidCookieName'); } }