You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
4.9 KiB
149 lines
4.9 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yiiunit\framework\web; |
|
|
|
use yii\web\Request; |
|
use yiiunit\TestCase; |
|
|
|
/** |
|
* @group web |
|
*/ |
|
class RequestTest extends TestCase |
|
{ |
|
public function testParseAcceptHeader() |
|
{ |
|
$request = new Request; |
|
|
|
$this->assertEquals([], $request->parseAcceptHeader(' ')); |
|
|
|
$this->assertEquals([ |
|
'audio/basic' => ['q' => 1], |
|
'audio/*' => ['q' => 0.2], |
|
], $request->parseAcceptHeader('audio/*; q=0.2, audio/basic')); |
|
|
|
$this->assertEquals([ |
|
'application/json' => ['q' => 1, 'version' => '1.0'], |
|
'application/xml' => ['q' => 1, 'version' => '2.0', 'x'], |
|
'text/x-c' => ['q' => 1], |
|
'text/x-dvi' => ['q' => 0.8], |
|
'text/plain' => ['q' => 0.5], |
|
], $request->parseAcceptHeader('text/plain; q=0.5, |
|
application/json; version=1.0, |
|
application/xml; version=2.0; x, |
|
text/x-dvi; q=0.8, text/x-c')); |
|
} |
|
|
|
public function testPrefferedLanguage() |
|
{ |
|
$this->mockApplication([ |
|
'language' => 'en', |
|
]); |
|
|
|
$request = new Request(); |
|
$request->acceptableLanguages = []; |
|
$this->assertEquals('en', $request->getPreferredLanguage()); |
|
|
|
$request = new Request(); |
|
$request->acceptableLanguages = ['de']; |
|
$this->assertEquals('en', $request->getPreferredLanguage()); |
|
|
|
$request = new Request(); |
|
$request->acceptableLanguages = ['en-us', 'de', 'ru-RU']; |
|
$this->assertEquals('en', $request->getPreferredLanguage(['en'])); |
|
|
|
$request = new Request(); |
|
$request->acceptableLanguages = ['en-us', 'de', 'ru-RU']; |
|
$this->assertEquals('de', $request->getPreferredLanguage(['ru', 'de'])); |
|
$this->assertEquals('de-DE', $request->getPreferredLanguage(['ru', 'de-DE'])); |
|
|
|
$request = new Request(); |
|
$request->acceptableLanguages = ['en-us', 'de', 'ru-RU']; |
|
$this->assertEquals('de', $request->getPreferredLanguage(['de', 'ru'])); |
|
|
|
$request = new Request(); |
|
$request->acceptableLanguages = ['en-us', 'de', 'ru-RU']; |
|
$this->assertEquals('ru-ru', $request->getPreferredLanguage(['ru-ru'])); |
|
|
|
$request = new Request(); |
|
$request->acceptableLanguages = ['en-us', 'de']; |
|
$this->assertEquals('ru-ru', $request->getPreferredLanguage(['ru-ru', 'pl'])); |
|
$this->assertEquals('ru-RU', $request->getPreferredLanguage(['ru-RU', 'pl'])); |
|
|
|
$request = new Request(); |
|
$request->acceptableLanguages = ['en-us', 'de']; |
|
$this->assertEquals('pl', $request->getPreferredLanguage(['pl', 'ru-ru'])); |
|
} |
|
|
|
public function testCsrfTokenValidation() |
|
{ |
|
$this->mockWebApplication(); |
|
|
|
$request = new Request(); |
|
$request->enableCsrfCookie = false; |
|
|
|
$token = $request->getCsrfToken(); |
|
|
|
$this->assertTrue($request->validateCsrfToken($token)); |
|
} |
|
|
|
public function testResolve() |
|
{ |
|
$this->mockWebApplication([ |
|
'components' => [ |
|
'urlManager' => [ |
|
'enablePrettyUrl' => true, |
|
'showScriptName' => false, |
|
'cache' => null, |
|
'rules' => [ |
|
'posts' => 'post/list', |
|
'post/<id>' => 'post/view', |
|
], |
|
] |
|
] |
|
]); |
|
|
|
$request = new Request(); |
|
$request->pathInfo = 'posts'; |
|
|
|
$_GET['page'] = 1; |
|
$result = $request->resolve(); |
|
$this->assertEquals(['post/list', ['page' => 1]], $result); |
|
$this->assertEquals($_GET, ['page' => 1]); |
|
|
|
$request->setQueryParams(['page' => 5]); |
|
$result = $request->resolve(); |
|
$this->assertEquals(['post/list', ['page' => 5]], $result); |
|
$this->assertEquals($_GET, ['page' => 1]); |
|
|
|
$request->setQueryParams(['custom-page' => 5]); |
|
$result = $request->resolve(); |
|
$this->assertEquals(['post/list', ['custom-page' => 5]], $result); |
|
$this->assertEquals($_GET, ['page' => 1]); |
|
|
|
unset($_GET['page']); |
|
|
|
$request = new Request(); |
|
$request->pathInfo = 'post/21'; |
|
|
|
$this->assertEquals($_GET, []); |
|
$result = $request->resolve(); |
|
$this->assertEquals(['post/view', ['id' => 21]], $result); |
|
$this->assertEquals($_GET, ['id' => 21]); |
|
|
|
$_GET['id'] = 42; |
|
$result = $request->resolve(); |
|
$this->assertEquals(['post/view', ['id' => 21]], $result); |
|
$this->assertEquals($_GET, ['id' => 21]); |
|
|
|
$_GET['id'] = 63; |
|
$request->setQueryParams(['token' => 'secret']); |
|
$result = $request->resolve(); |
|
$this->assertEquals(['post/view', ['id' => 21, 'token' => 'secret']], $result); |
|
$this->assertEquals($_GET, ['id' => 63]); |
|
} |
|
}
|
|
|