138 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			138 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | 
 | ||
|  | /* | ||
|  |  * This file is part of the overtrue/socialite. | ||
|  |  * | ||
|  |  * (c) overtrue <i@overtrue.me> | ||
|  |  * | ||
|  |  * This source file is subject to the MIT license that is bundled | ||
|  |  * with this source code in the file LICENSE. | ||
|  |  */ | ||
|  | 
 | ||
|  | use Overtrue\Socialite\Providers\WeChatProvider as RealWeChatProvider; | ||
|  | use PHPUnit\Framework\TestCase; | ||
|  | use Symfony\Component\HttpFoundation\Request; | ||
|  | 
 | ||
|  | class WechatProviderTest extends TestCase | ||
|  | { | ||
|  |     public function testWeChatProviderHasCorrectlyRedirectResponse() | ||
|  |     { | ||
|  |         $response = (new WeChatProvider(Request::create('foo'), [ | ||
|  |             'client_id' => 'client_id', | ||
|  |             'client_secret' => 'client_secret', | ||
|  |             'redirect' => 'http://localhost/socialite/callback.php', | ||
|  |         ]))->redirect(); | ||
|  | 
 | ||
|  |         $this->assertInstanceOf('Symfony\Component\HttpFoundation\RedirectResponse', $response); | ||
|  |         $this->assertStringStartsWith('https://open.weixin.qq.com/connect/qrconnect', $response->getTargetUrl()); | ||
|  |         $this->assertRegExp('/redirect_uri=http%3A%2F%2Flocalhost%2Fsocialite%2Fcallback.php/', $response->getTargetUrl()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testWeChatProviderTokenUrlAndRequestFields() | ||
|  |     { | ||
|  |         $provider = new WeChatProvider(Request::create('foo'), [ | ||
|  |             'client_id' => 'client_id', | ||
|  |             'client_secret' => 'client_secret', | ||
|  |             'redirect' => 'http://localhost/socialite/callback.php', | ||
|  |         ]); | ||
|  | 
 | ||
|  |         $this->assertSame('https://api.weixin.qq.com/sns/oauth2/access_token', $provider->tokenUrl()); | ||
|  |         $this->assertSame([ | ||
|  |             'appid' => 'client_id', | ||
|  |             'secret' => 'client_secret', | ||
|  |             'code' => 'iloveyou', | ||
|  |             'grant_type' => 'authorization_code', | ||
|  |         ], $provider->tokenFields('iloveyou')); | ||
|  | 
 | ||
|  |         $this->assertSame([ | ||
|  |             'appid' => 'client_id', | ||
|  |             'redirect_uri' => 'http://localhost/socialite/callback.php', | ||
|  |             'response_type' => 'code', | ||
|  |             'scope' => 'snsapi_login', | ||
|  |             'state' => 'wechat-state', | ||
|  |             'connect_redirect' => 1, | ||
|  |         ], $provider->codeFields('wechat-state')); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testOpenPlatformComponent() | ||
|  |     { | ||
|  |         $provider = new WeChatProvider(Request::create('foo'), [ | ||
|  |             'client_id' => 'client_id', | ||
|  |             'client_secret' => null, | ||
|  |             'redirect' => 'redirect-url', | ||
|  |         ]); | ||
|  |         $provider->component(new WeChatComponent()); | ||
|  |         $this->assertSame([ | ||
|  |             'appid' => 'client_id', | ||
|  |             'redirect_uri' => 'redirect-url', | ||
|  |             'response_type' => 'code', | ||
|  |             'scope' => 'snsapi_base', | ||
|  |             'state' => 'state', | ||
|  |             'connect_redirect' => 1, | ||
|  |             'component_appid' => 'component-app-id', | ||
|  |         ], $provider->codeFields('state')); | ||
|  | 
 | ||
|  |         $this->assertSame([ | ||
|  |             'appid' => 'client_id', | ||
|  |             'component_appid' => 'component-app-id', | ||
|  |             'component_access_token' => 'token', | ||
|  |             'code' => 'simcode', | ||
|  |             'grant_type' => 'authorization_code', | ||
|  |         ], $provider->tokenFields('simcode')); | ||
|  | 
 | ||
|  |         $this->assertSame('https://api.weixin.qq.com/sns/oauth2/component/access_token', $provider->tokenUrl()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testOpenPlatformComponentWithCustomParameters() | ||
|  |     { | ||
|  |         $provider = new WeChatProvider(Request::create('foo'), [ | ||
|  |             'client_id' => 'client_id', | ||
|  |             'client_secret' => null, | ||
|  |             'redirect' => 'redirect-url', | ||
|  |         ]); | ||
|  |         $provider->component(new WeChatComponent()); | ||
|  |         $provider->with(['foo' => 'bar']); | ||
|  | 
 | ||
|  |         $fields = $provider->codeFields('wechat-state'); | ||
|  | 
 | ||
|  |         $this->assertArrayHasKey('foo', $fields); | ||
|  |         $this->assertSame('bar', $fields['foo']); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | trait ProviderTrait | ||
|  | { | ||
|  |     public function tokenUrl() | ||
|  |     { | ||
|  |         return $this->getTokenUrl(); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function tokenFields($code) | ||
|  |     { | ||
|  |         return $this->getTokenFields($code); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function codeFields($state = null) | ||
|  |     { | ||
|  |         return $this->getCodeFields($state); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | class WeChatProvider extends RealWeChatProvider | ||
|  | { | ||
|  |     use ProviderTrait; | ||
|  | } | ||
|  | 
 | ||
|  | class WeChatComponent implements \Overtrue\Socialite\WeChatComponentInterface | ||
|  | { | ||
|  |     public function getAppId() | ||
|  |     { | ||
|  |         return 'component-app-id'; | ||
|  |     } | ||
|  | 
 | ||
|  |     public function getToken() | ||
|  |     { | ||
|  |         return 'token'; | ||
|  |     } | ||
|  | } |