Completed
Push — master ( 9aac35...6c213e )
by Manuele
03:41
created

OrbitronDevTest::testGetBaseAccessTokenUrl()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 5
nc 1
nop 0
1
<?php
2
3
namespace OrbitronDev\OAuth2\Client\Test\Provider;
4
5
use League\OAuth2\Client\Tool\QueryBuilderTrait;
6
use Mockery;
7
8
class OrbitronDevTest extends \PHPUnit_Framework_TestCase
9
{
10
    use QueryBuilderTrait;
11
12
    protected $provider;
13
14
    protected function setUp()
15
    {
16
        $this->provider = new \OrbitronDev\OAuth2\Client\Provider\OrbitronDev(
17
            [
18
            'clientId' => 'mock_client_id',
19
            'clientSecret' => 'mock_secret',
20
            'redirectUri' => 'none',
21
            ]
22
        );
23
    }
24
25
    public function testAuthorizationUrl()
26
    {
27
        $url = $this->provider->getAuthorizationUrl();
28
        $uri = parse_url($url);
29
        parse_str($uri['query'], $query);
30
31
        $this->assertArrayHasKey('client_id', $query);
32
        $this->assertArrayHasKey('redirect_uri', $query);
33
        $this->assertArrayHasKey('state', $query);
34
        $this->assertArrayHasKey('scope', $query);
35
        $this->assertArrayHasKey('response_type', $query);
36
        $this->assertArrayHasKey('approval_prompt', $query);
37
        $this->assertNotNull($this->provider->getState());
38
    }
39
40
    public function testScopes()
41
    {
42
        $scopeSeparator = ' ';
43
        $options = ['scope' => [uniqid(), uniqid()]];
44
        $query = ['scope' => implode($scopeSeparator, $options['scope'])];
45
        $url = $this->provider->getAuthorizationUrl($options);
46
        $encodedScope = $this->buildQueryString($query);
47
        $this->assertContains($encodedScope, $url);
48
    }
49
50
    public function testGetAuthorizationUrl()
51
    {
52
        $url = $this->provider->getAuthorizationUrl();
53
        $uri = parse_url($url);
54
        $this->assertEquals('/oauth/authorize', $uri['path']);
55
    }
56
57
    public function testGetBaseAccessTokenUrl()
58
    {
59
        $params = [];
60
        $url = $this->provider->getBaseAccessTokenUrl($params);
61
        $uri = parse_url($url);
62
        $this->assertEquals('/oauth/token', $uri['path']);
63
    }
64
65
    public function testGetAccessToken()
66
    {
67
        $response = Mockery::mock('Psr\Http\Message\ResponseInterface');
68
        $response->shouldReceive('getBody')->andReturn('{"access_token":"mock_access_token","user": {"id": "123","username": "snoopdogg","full_name": "Snoop Dogg","profile_picture": "..."}}');
69
        $response->shouldReceive('getHeader')->andReturn(['content-type' => 'json']);
70
        $client = Mockery::mock('GuzzleHttp\ClientInterface');
71
        $client->shouldReceive('send')->times(1)->andReturn($response);
72
        $this->provider->setHttpClient($client);
73
        $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);
74
        $this->assertEquals('mock_access_token', $token->getToken());
75
        $this->assertNull($token->getExpires());
76
        $this->assertNull($token->getRefreshToken());
77
        $this->assertEquals('123', $token->getResourceOwnerId());
78
    }
79
80
    public function testUserData()
81
    {
82
        $userId = rand(1000, 9999);
83
        $name = uniqid();
84
        $nickname = uniqid();
85
        $picture = uniqid();
86
        $description = uniqid();
87
        $postResponse = Mockery::mock('Psr\Http\Message\ResponseInterface');
88
        $postResponse->shouldReceive('getBody')->andReturn('{"access_token": "mock_access_token","user": {"id": "1574083","username": "snoopdogg","full_name": "Snoop Dogg","profile_picture": "..."}}');
89
        $postResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']);
90
        $userResponse = Mockery::mock('Psr\Http\Message\ResponseInterface');
91
        $userResponse->shouldReceive('getBody')->andReturn('{"data": {"id": "'.$userId.'", "username": "'.$nickname.'", "full_name": "'.$name.'", "bio": "'.$description.'", "profile_picture": "'.$picture.'"}}');
92
        $userResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']);
93
        $client = Mockery::mock('GuzzleHttp\ClientInterface');
94
        $client->shouldReceive('send')
95
            ->times(2)
96
            ->andReturn($postResponse, $userResponse);
97
        $this->provider->setHttpClient($client);
98
        $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);
99
        $user = $this->provider->getResourceOwner($token);
100
        $this->assertEquals($userId, $user->getId());
101
        $this->assertEquals($userId, $user->toArray()['id']);
102
        $this->assertEquals($name, $user->getUsername());
103
        $this->assertEquals($name, $user->toArray()['username']);
104
        $this->assertEquals($nickname, $user->getEmail());
105
        $this->assertEquals($nickname, $user->toArray()['email']);
106
        $this->assertEquals($picture, $user->getFirstName());
107
        $this->assertEquals($picture, $user->toArray()['name']);
108
        $this->assertEquals($description, $user->getSurname());
109
        $this->assertEquals($description, $user->toArray()['surname']);
110
        $this->assertEquals($description, $user->getBirthday()->getTimestamp());
111
        $this->assertEquals($description, $user->toArray()['birthday']);
112
        $this->assertEquals($description, $user->getSubscription());
113
        $this->assertEquals($description, $user->toArray()['subscription_type']);
114
    }
115
116
    /**
117
     * @expectedException League\OAuth2\Client\Provider\Exception\IdentityProviderException
118
     **/
119
    public function testExceptionThrownWhenErrorObjectReceived()
120
    {
121
        $message = uniqid();
122
        $status = rand(400, 600);
123
        $postResponse = Mockery::mock('Psr\Http\Message\ResponseInterface');
124
        $postResponse->shouldReceive('getBody')->andReturn('{"meta": {"error_type": "OAuthException","code": '.$status.',"error_message": "'.$message.'"}}');
125
        $postResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']);
126
        $postResponse->shouldReceive('getReasonPhrase');
127
        $postResponse->shouldReceive('getStatusCode')->andReturn($status);
128
        $client = Mockery::mock('GuzzleHttp\ClientInterface');
129
        $client->shouldReceive('send')
130
            ->times(1)
131
            ->andReturn($postResponse);
132
        $this->provider->setHttpClient($client);
133
        $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);
134
    }
135
136
    /**
137
     * @expectedException League\OAuth2\Client\Provider\Exception\IdentityProviderException
138
     **/
139
    public function testExceptionThrownWhenAuthErrorObjectReceived()
140
    {
141
        $message = uniqid();
142
        $status = rand(400, 600);
143
        $postResponse = Mockery::mock('Psr\Http\Message\ResponseInterface');
144
        $postResponse->shouldReceive('getBody')->andReturn('{"error_type": "OAuthException","code": '.$status.',"error_message": "'.$message.'"}');
145
        $postResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']);
146
        $postResponse->shouldReceive('getReasonPhrase');
147
        $postResponse->shouldReceive('getStatusCode')->andReturn($status);
148
        $client = Mockery::mock('GuzzleHttp\ClientInterface');
149
        $client->shouldReceive('send')
150
            ->times(1)
151
            ->andReturn($postResponse);
152
        $this->provider->setHttpClient($client);
153
        $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);
154
    }
155
156
    public function testGetAuthenticatedRequest()
157
    {
158
        $method = 'GET';
159
        $url = 'https://api.instagram.com/v1/users/self/feed';
160
        $accessTokenResponse = Mockery::mock('Psr\Http\Message\ResponseInterface');
161
        $accessTokenResponse->shouldReceive('getBody')->andReturn('{"access_token": "mock_access_token","user": {"id": "1574083","username": "snoopdogg","full_name": "Snoop Dogg","profile_picture": "..."}}');
162
        $accessTokenResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']);
163
        $client = Mockery::mock('GuzzleHttp\ClientInterface');
164
        $client->shouldReceive('send')
165
            ->times(1)
166
            ->andReturn($accessTokenResponse);
167
        $this->provider->setHttpClient($client);
168
        $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);
169
        $authenticatedRequest = $this->provider->getAuthenticatedRequest($method, $url, $token);
170
        $this->assertInstanceOf('Psr\Http\Message\RequestInterface', $authenticatedRequest);
171
        $this->assertEquals($method, $authenticatedRequest->getMethod());
172
        $this->assertContains('access_token=mock_access_token', $authenticatedRequest->getUri()->getQuery());
173
    }
174
}
175