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.
251 lines
6.9 KiB
251 lines
6.9 KiB
<?php |
|
|
|
namespace yiiunit\extensions\authclient; |
|
|
|
use yii\authclient\signature\PlainText; |
|
use yii\authclient\OAuthToken; |
|
use yiiunit\extensions\authclient\TestCase; |
|
use yii\authclient\BaseOAuth; |
|
|
|
class BaseOAuthTest extends TestCase |
|
{ |
|
/** |
|
* Creates test OAuth client instance. |
|
* @return BaseOAuth oauth client. |
|
*/ |
|
protected function createOAuthClient() |
|
{ |
|
$oauthClient = $this->getMock(BaseOAuth::className(), ['setState', 'getState', 'composeRequestCurlOptions', 'refreshAccessToken', 'apiInternal']); |
|
$oauthClient->expects($this->any())->method('setState')->will($this->returnValue($oauthClient)); |
|
$oauthClient->expects($this->any())->method('getState')->will($this->returnValue(null)); |
|
return $oauthClient; |
|
} |
|
|
|
/** |
|
* Invokes the OAuth client method even if it is protected. |
|
* @param BaseOAuth $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 testSetGet() |
|
{ |
|
$oauthClient = $this->createOAuthClient(); |
|
|
|
$returnUrl = 'http://test.return.url'; |
|
$oauthClient->setReturnUrl($returnUrl); |
|
$this->assertEquals($returnUrl, $oauthClient->getReturnUrl(), 'Unable to setup return URL!'); |
|
|
|
$curlOptions = [ |
|
'option1' => 'value1', |
|
'option2' => 'value2', |
|
]; |
|
$oauthClient->setCurlOptions($curlOptions); |
|
$this->assertEquals($curlOptions, $oauthClient->getCurlOptions(), 'Unable to setup cURL options!'); |
|
} |
|
|
|
public function testSetupComponents() |
|
{ |
|
$oauthClient = $this->createOAuthClient(); |
|
|
|
$oauthToken = new OAuthToken(); |
|
$oauthClient->setAccessToken($oauthToken); |
|
$this->assertEquals($oauthToken, $oauthClient->getAccessToken(), 'Unable to setup token!'); |
|
|
|
$oauthSignatureMethod = new PlainText(); |
|
$oauthClient->setSignatureMethod($oauthSignatureMethod); |
|
$this->assertEquals($oauthSignatureMethod, $oauthClient->getSignatureMethod(), 'Unable to setup signature method!'); |
|
} |
|
|
|
/** |
|
* @depends testSetupComponents |
|
*/ |
|
public function testSetupComponentsByConfig() |
|
{ |
|
$oauthClient = $this->createOAuthClient(); |
|
|
|
$oauthToken = [ |
|
'token' => 'test_token', |
|
'tokenSecret' => 'test_token_secret', |
|
]; |
|
$oauthClient->setAccessToken($oauthToken); |
|
$this->assertEquals($oauthToken['token'], $oauthClient->getAccessToken()->getToken(), 'Unable to setup token as config!'); |
|
|
|
$oauthSignatureMethod = [ |
|
'class' => 'yii\authclient\signature\PlainText' |
|
]; |
|
$oauthClient->setSignatureMethod($oauthSignatureMethod); |
|
$returnedSignatureMethod = $oauthClient->getSignatureMethod(); |
|
$this->assertEquals($oauthSignatureMethod['class'], get_class($returnedSignatureMethod), 'Unable to setup signature method as config!'); |
|
} |
|
|
|
/** |
|
* Data provider for [[testComposeUrl()]]. |
|
* @return array test data. |
|
*/ |
|
public function composeUrlDataProvider() |
|
{ |
|
return [ |
|
[ |
|
'http://test.url', |
|
[ |
|
'param1' => 'value1', |
|
'param2' => 'value2', |
|
], |
|
'http://test.url?param1=value1¶m2=value2', |
|
], |
|
[ |
|
'http://test.url?with=some', |
|
[ |
|
'param1' => 'value1', |
|
'param2' => 'value2', |
|
], |
|
'http://test.url?with=some¶m1=value1¶m2=value2', |
|
], |
|
]; |
|
} |
|
|
|
/** |
|
* @dataProvider composeUrlDataProvider |
|
* |
|
* @param string $url request URL. |
|
* @param array $params request params |
|
* @param string $expectedUrl expected composed URL. |
|
*/ |
|
public function testComposeUrl($url, array $params, $expectedUrl) |
|
{ |
|
$oauthClient = $this->createOAuthClient(); |
|
$composedUrl = $this->invokeOAuthClientMethod($oauthClient, 'composeUrl', [$url, $params]); |
|
$this->assertEquals($expectedUrl, $composedUrl); |
|
} |
|
|
|
/** |
|
* Data provider for {@link testDetermineContentTypeByHeaders}. |
|
* @return array test data. |
|
*/ |
|
public function determineContentTypeByHeadersDataProvider() |
|
{ |
|
return [ |
|
[ |
|
['content_type' => 'application/json'], |
|
'json' |
|
], |
|
[ |
|
['content_type' => 'application/x-www-form-urlencoded'], |
|
'urlencoded' |
|
], |
|
[ |
|
['content_type' => 'application/xml'], |
|
'xml' |
|
], |
|
[ |
|
['some_header' => 'some_header_value'], |
|
'auto' |
|
], |
|
[ |
|
['content_type' => 'unknown'], |
|
'auto' |
|
], |
|
]; |
|
} |
|
|
|
/** |
|
* @dataProvider determineContentTypeByHeadersDataProvider |
|
* |
|
* @param array $headers request headers. |
|
* @param string $expectedResponseType expected response type. |
|
*/ |
|
public function testDetermineContentTypeByHeaders(array $headers, $expectedResponseType) |
|
{ |
|
$oauthClient = $this->createOAuthClient(); |
|
$responseType = $this->invokeOAuthClientMethod($oauthClient, 'determineContentTypeByHeaders', [$headers]); |
|
$this->assertEquals($expectedResponseType, $responseType); |
|
} |
|
|
|
/** |
|
* Data provider for [[testDetermineContentTypeByRaw]]. |
|
* @return array test data. |
|
*/ |
|
public function determineContentTypeByRawDataProvider() |
|
{ |
|
return array( |
|
['{name: value}', 'json'], |
|
['name=value', 'urlencoded'], |
|
['name1=value1&name2=value2', 'urlencoded'], |
|
['<?xml version="1.0" encoding="UTF-8"?><tag>Value</tag>', 'xml'], |
|
['<tag>Value</tag>', 'xml'], |
|
); |
|
} |
|
|
|
/** |
|
* @dataProvider determineContentTypeByRawDataProvider |
|
* |
|
* @param string $rawResponse raw response content. |
|
* @param string $expectedResponseType expected response type. |
|
*/ |
|
public function testDetermineContentTypeByRaw($rawResponse, $expectedResponseType) |
|
{ |
|
$oauthClient = $this->createOAuthClient(); |
|
$responseType = $this->invokeOAuthClientMethod($oauthClient, 'determineContentTypeByRaw', [$rawResponse]); |
|
$this->assertEquals($expectedResponseType, $responseType); |
|
} |
|
|
|
/** |
|
* Data provider for [[testApiUrl]]. |
|
* @return array test data. |
|
*/ |
|
public function apiUrlDataProvider() |
|
{ |
|
return [ |
|
[ |
|
'http://api.base.url', |
|
'sub/url', |
|
'http://api.base.url/sub/url', |
|
], |
|
[ |
|
'http://api.base.url', |
|
'http://api.base.url/sub/url', |
|
'http://api.base.url/sub/url', |
|
], |
|
[ |
|
'http://api.base.url', |
|
'https://api.base.url/sub/url', |
|
'https://api.base.url/sub/url', |
|
], |
|
]; |
|
} |
|
|
|
/** |
|
* @dataProvider apiUrlDataProvider |
|
* |
|
* @param $apiBaseUrl |
|
* @param $apiSubUrl |
|
* @param $expectedApiFullUrl |
|
*/ |
|
public function testApiUrl($apiBaseUrl, $apiSubUrl, $expectedApiFullUrl) |
|
{ |
|
$oauthClient = $this->createOAuthClient(); |
|
$oauthClient->expects($this->any())->method('apiInternal')->will($this->returnArgument(1)); |
|
|
|
$accessToken = new OAuthToken(); |
|
$accessToken->setToken('test_access_token'); |
|
$accessToken->setExpireDuration(1000); |
|
$oauthClient->setAccessToken($accessToken); |
|
|
|
$oauthClient->apiBaseUrl = $apiBaseUrl; |
|
|
|
$this->assertEquals($expectedApiFullUrl, $oauthClient->api($apiSubUrl)); |
|
} |
|
} |