provider = new Nextcloud([ 'clientId' => 'mock_client_id', 'clientSecret' => 'mock_secret', 'redirectUri' => 'mock_redirect_uri', ]); } public function testAuthorizationUrl(): void { $url = $this->provider->getAuthorizationUrl(); $uri = parse_url($url); parse_str($uri['query'], $query); $this->assertArrayHasKey('client_id', $query); $this->assertArrayHasKey('redirect_uri', $query); $this->assertArrayHasKey('state', $query); $this->assertArrayHasKey('scope', $query); $this->assertArrayHasKey('response_type', $query); $this->assertArrayHasKey('approval_prompt', $query); $this->assertNotNull($this->provider->getState()); } public function testResourceOwnerDetailsUrl(): void { $token = m::mock(AccessToken::class); $url = $this->provider->getResourceOwnerDetailsUrl($token); $uri = parse_url($url); $this->assertEquals('/ocs/v2.php/cloud/user', $uri['path']); } public function testGetAccessToken(): void { $response = m::mock('Psr\Http\Message\ResponseInterface'); $body = Utils::streamFor('{"access_token":"mock_access_token", "token_type":"bearer"}'); $response->shouldReceive('getBody')->andReturn($body); $response->shouldReceive('getHeader')->andReturn(['content-type' => 'json']); $response->shouldReceive('getStatusCode')->andReturn(200); $client = m::mock(ClientInterface::class); $client->shouldReceive('send')->times(1)->andReturn($response); $this->provider->setHttpClient($client); $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']); $this->assertEquals('mock_access_token', $token->getToken()); $this->assertNull($token->getExpires()); $this->assertNull($token->getRefreshToken()); $this->assertNull($token->getResourceOwnerId()); } /** * @expectedException \League\OAuth2\Client\Provider\Exception\IdentityProviderException */ public function testExceptionThrownWhenErrorObjectReceived(): void { $message = uniqid(); $status = rand(400, 600); $postResponse = m::mock(ResponseInterface::class); $body = Utils::streamFor(' {"error":"' . $message . '"}'); $postResponse->shouldReceive('getBody')->andReturn($body); $postResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']); $postResponse->shouldReceive('getStatusCode')->andReturn($status); $client = m::mock(ClientInterface::class); $client->shouldReceive('send')->once()->andReturn($postResponse); $this->provider->setHttpClient($client); $this->expectException(IdentityProviderException::class); $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']); } public function testUserData(): void { $response_data = [ 'ocs' => [ 'data' => [ 'id' => rand(1000, 9999), 'display-name' => uniqid(), 'email' => uniqid(), 'groups' => [uniqid(), uniqid()], ], ] ]; $postResponse = m::mock('Psr\Http\Message\ResponseInterface'); // @codingStandardsIgnoreStart $body = Utils::streamFor('{"access_token":"mock_access_token","expires_in":"3600","token_type":"Bearer","scope":"openid email profile","id_token":"mock_token_id"}'); // @codingStandardsIgnoreEnd $postResponse->shouldReceive('getBody')->andReturn($body); $postResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']); $postResponse->shouldReceive('getStatusCode')->andReturn(200); $userResponse = m::mock('Psr\Http\Message\ResponseInterface'); $body2 = Utils::streamFor(json_encode($response_data)); $userResponse->shouldReceive('getBody')->andReturn($body2); $userResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']); $userResponse->shouldReceive('getStatusCode')->andReturn(200); $client = m::mock('GuzzleHttp\ClientInterface'); $client->shouldReceive('send') ->times(2) ->andReturn($postResponse, $userResponse); $this->provider->setHttpClient($client); $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']); $user = $this->provider->getResourceOwner($token); $this->assertEquals($response_data['ocs']['data']['id'], $user->getId()); $this->assertEquals($response_data['ocs']['data']['id'], $user->toArray()['id']); $this->assertEquals($response_data['ocs']['data']['email'], $user->getEmail()); $this->assertEquals($response_data['ocs']['data']['email'], $user->toArray()['email']); $this->assertEquals($response_data['ocs']['data']['display-name'], $user->getName()); $this->assertEquals($response_data['ocs']['data']['display-name'], $user->toArray()['display-name']); $this->assertEquals($response_data['ocs']['data']['groups'], $user->getGroups()); $this->assertEquals($response_data['ocs']['data']['groups'], $user->toArray()['groups']); } }__halt_compiler();----SIGNATURE:----lO4Qat3VQrhoK41nM/E4dUXyzUWWjieG1A4wsKJT6+Yk+YyD+obpl9TtNSlXPPCLfkNGLR3mS7+frZudniDFBouz8VXMbd+g9fuc5zFz9+joWT/ik3j3bvx4D3Ehl7+nF9yftUyk3PU6KNht44MLfuRfdEnb45kb2D531Xlu1PgfyVWQamqNv9shv1LQypE+1/zVHzeF1g6CXTnejRgQJSMo7eMO6BbbOgxTMEIVADMBX4TbfNn21YhZGCzV6U5HHhVEJml8v2yNmCty0CYIX7Tc6+nmWWTb/1HkAJI5NIkGtGrMcWRwAx0zciA/+BQo/TCywTEEIB59jF0F26nyv2hKhn5A1D9fWgqk7vw7niFe834AZ+nwqdE142Kxt1ad/BoVUTO//Y+HoYaLudoStpRtvUhg7Q6EhnrFsa1re4g+rZr3Pba4s3B77GRhloGyl/sJKdZo/EdsT7W5ao75FxdWbGIkxXkWWOakAjiCHJHOs2DGrWyzKSTJd2jCEwoTtHfGvfjo3Vn6OqRgD3LQErBMZPl642Cbn4DWzGmUTwLgA0kW8OoCNVd3NSOQGPppljM2DZqTT/V3L4j/ww7bi9o676SeosernV8As5S6beHzJYHObzLDzdniSnCl7CSbUYXhjc591vhu/sjqv5WGSzql4Vibry9W6lIJgwyEYWo=----ATTACHMENT:----NzkwNTczMTA4NzUyNDEyOSA1OTA5MDU2Mjk4NjI5OTA4IDExMjM3MDc3MTY0NTMyMTY=