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!'); | 
						|
	} | 
						|
} |