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.
109 lines
3.2 KiB
109 lines
3.2 KiB
<?php |
|
|
|
namespace yiiunit\extensions\authclient\oauth; |
|
|
|
use yii\authclient\OAuth1; |
|
use yii\authclient\signature\PlainText; |
|
use yii\authclient\OAuthToken; |
|
use yiiunit\extensions\authclient\TestCase; |
|
|
|
class OAuth1Test extends TestCase |
|
{ |
|
protected function setUp() |
|
{ |
|
$this->mockApplication([], '\yii\web\Application'); |
|
} |
|
|
|
/** |
|
* Invokes the OAuth client method even if it is protected. |
|
* @param OAuth1 $oauthClient OAuth client instance. |
|
* @param string $methodName name of the method to be invoked. |
|
* @param array $arguments method arguments. |
|
* @return mixed method invoke result. |
|
*/ |
|
protected function invokeOAuthClientMethod($oauthClient, $methodName, array $arguments = []) |
|
{ |
|
$classReflection = new \ReflectionClass(get_class($oauthClient)); |
|
$methodReflection = $classReflection->getMethod($methodName); |
|
$methodReflection->setAccessible(true); |
|
$result = $methodReflection->invokeArgs($oauthClient, $arguments); |
|
$methodReflection->setAccessible(false); |
|
return $result; |
|
} |
|
|
|
// Tests : |
|
|
|
public function testSignRequest() |
|
{ |
|
$oauthClient = new OAuth1(); |
|
|
|
$oauthSignatureMethod = new PlainText(); |
|
$oauthClient->setSignatureMethod($oauthSignatureMethod); |
|
|
|
$signedParams = $this->invokeOAuthClientMethod($oauthClient, 'signRequest', ['GET', 'http://test.url', []]); |
|
$this->assertNotEmpty($signedParams['oauth_signature'], 'Unable to sign request!'); |
|
} |
|
|
|
/** |
|
* Data provider for [[testComposeAuthorizationHeader()]]. |
|
* @return array test data. |
|
*/ |
|
public function composeAuthorizationHeaderDataProvider() |
|
{ |
|
return [ |
|
[ |
|
'', |
|
[ |
|
'oauth_test_name_1' => 'oauth_test_value_1', |
|
'oauth_test_name_2' => 'oauth_test_value_2', |
|
], |
|
'Authorization: OAuth oauth_test_name_1="oauth_test_value_1", oauth_test_name_2="oauth_test_value_2"' |
|
], |
|
[ |
|
'test_realm', |
|
[ |
|
'oauth_test_name_1' => 'oauth_test_value_1', |
|
'oauth_test_name_2' => 'oauth_test_value_2', |
|
], |
|
'Authorization: OAuth realm="test_realm", oauth_test_name_1="oauth_test_value_1", oauth_test_name_2="oauth_test_value_2"' |
|
], |
|
[ |
|
'', |
|
[ |
|
'oauth_test_name_1' => 'oauth_test_value_1', |
|
'test_name_2' => 'test_value_2', |
|
], |
|
'Authorization: OAuth oauth_test_name_1="oauth_test_value_1"' |
|
], |
|
]; |
|
} |
|
|
|
/** |
|
* @dataProvider composeAuthorizationHeaderDataProvider |
|
* |
|
* @param string $realm authorization realm. |
|
* @param array $params request params. |
|
* @param string $expectedAuthorizationHeader expected authorization header. |
|
*/ |
|
public function testComposeAuthorizationHeader($realm, array $params, $expectedAuthorizationHeader) |
|
{ |
|
$oauthClient = new OAuth1(); |
|
$authorizationHeader = $this->invokeOAuthClientMethod($oauthClient, 'composeAuthorizationHeader', [$params, $realm]); |
|
$this->assertEquals($expectedAuthorizationHeader, $authorizationHeader); |
|
} |
|
|
|
public function testBuildAuthUrl() { |
|
$oauthClient = new OAuth1(); |
|
$authUrl = 'http://test.auth.url'; |
|
$oauthClient->authUrl = $authUrl; |
|
|
|
$requestTokenToken = 'test_request_token'; |
|
$requestToken = new OAuthToken(); |
|
$requestToken->setToken($requestTokenToken); |
|
|
|
$builtAuthUrl = $oauthClient->buildAuthUrl($requestToken); |
|
|
|
$this->assertContains($authUrl, $builtAuthUrl, 'No auth URL present!'); |
|
$this->assertContains($requestTokenToken, $builtAuthUrl, 'No token present!'); |
|
} |
|
} |