FacebookTest   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 232
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 12
eloc 96
dl 0
loc 232
c 2
b 0
f 0
rs 10

12 Methods

Rating   Name   Duplication   Size   Complexity  
A testParseAccessTokenResponseThrowsExceptionOnError() 0 14 1
A testConstructCorrectInstanceWithCustomUri() 0 11 1
A testGetAccessTokenEndpoint() 0 9 1
A testGetDialogUriRedirectUriMissing() 0 13 1
A testConstructCorrectInterfaceWithoutCustomUri() 0 9 1
A testGetDialogUriInstanceofUri() 0 18 1
A testGetAuthorizationEndpoint() 0 9 1
A testGetAuthorizationMethod() 0 22 1
A testGetDialogUriContainsAppIdAndOtherParameters() 0 26 1
A testConstructCorrectInstanceWithoutCustomUri() 0 9 1
A testParseAccessTokenResponseValidWithoutRefreshToken() 0 12 1
A testParseAccessTokenResponseValidWithRefreshToken() 0 12 1
1
<?php
2
3
namespace OAuthTest\Unit\OAuth2\Service;
4
5
use OAuth\Common\Token\TokenInterface;
6
use OAuth\OAuth2\Service\Facebook;
7
use PHPUnit\Framework\TestCase;
8
9
class FacebookTest extends TestCase
10
{
11
    /**
12
     * @covers \OAuth\OAuth2\Service\Facebook::__construct
13
     */
14
    public function testConstructCorrectInterfaceWithoutCustomUri(): void
15
    {
16
        $service = new Facebook(
17
            $this->createMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
18
            $this->createMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'),
19
            $this->createMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
20
        );
21
22
        self::assertInstanceOf('\\OAuth\\OAuth2\\Service\\ServiceInterface', $service);
23
    }
24
25
    /**
26
     * @covers \OAuth\OAuth2\Service\Facebook::__construct
27
     */
28
    public function testConstructCorrectInstanceWithoutCustomUri(): void
29
    {
30
        $service = new Facebook(
31
            $this->createMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
32
            $this->createMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'),
33
            $this->createMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
34
        );
35
36
        self::assertInstanceOf('\\OAuth\\OAuth2\\Service\\AbstractService', $service);
37
    }
38
39
    /**
40
     * @covers \OAuth\OAuth2\Service\Facebook::__construct
41
     */
42
    public function testConstructCorrectInstanceWithCustomUri(): void
43
    {
44
        $service = new Facebook(
45
            $this->createMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
46
            $this->createMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'),
47
            $this->createMock('\\OAuth\\Common\\Storage\\TokenStorageInterface'),
48
            [],
49
            $this->createMock('\\OAuth\\Common\\Http\\Uri\\UriInterface')
50
        );
51
52
        self::assertInstanceOf('\\OAuth\\OAuth2\\Service\\AbstractService', $service);
53
    }
54
55
    /**
56
     * @covers \OAuth\OAuth2\Service\Facebook::__construct
57
     * @covers \OAuth\OAuth2\Service\Facebook::getAuthorizationEndpoint
58
     */
59
    public function testGetAuthorizationEndpoint(): void
60
    {
61
        $service = new Facebook(
62
            $this->createMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
63
            $this->createMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'),
64
            $this->createMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
65
        );
66
67
        self::assertSame('https://www.facebook.com/dialog/oauth', $service->getAuthorizationEndpoint()->getAbsoluteUri());
68
    }
69
70
    /**
71
     * @covers \OAuth\OAuth2\Service\Facebook::__construct
72
     * @covers \OAuth\OAuth2\Service\Facebook::getAccessTokenEndpoint
73
     */
74
    public function testGetAccessTokenEndpoint(): void
75
    {
76
        $service = new Facebook(
77
            $this->createMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
78
            $this->createMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'),
79
            $this->createMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
80
        );
81
82
        self::assertSame('https://graph.facebook.com/oauth/access_token', $service->getAccessTokenEndpoint()->getAbsoluteUri());
83
    }
84
85
    /**
86
     * @covers \OAuth\OAuth2\Service\Facebook::__construct
87
     */
88
    public function testGetAuthorizationMethod(): void
89
    {
90
        $client = $this->createMock('\\OAuth\\Common\\Http\\Client\\ClientInterface');
91
        $client->expects(self::once())->method('retrieveResponse')->willReturnArgument(2);
92
93
        $token = $this->createMock('\\OAuth\\OAuth2\\Token\\TokenInterface');
94
        $token->expects(self::once())->method('getEndOfLife')->willReturn(TokenInterface::EOL_NEVER_EXPIRES);
95
        $token->expects(self::once())->method('getAccessToken')->willReturn('foo');
96
97
        $storage = $this->createMock('\\OAuth\\Common\\Storage\\TokenStorageInterface');
98
        $storage->expects(self::once())->method('retrieveAccessToken')->willReturn($token);
99
100
        $service = new Facebook(
101
            $this->createMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
102
            $client,
103
            $storage
104
        );
105
106
        $headers = $service->request('https://pieterhordijk.com/my/awesome/path');
107
108
        self::assertArrayHasKey('Authorization', $headers);
0 ignored issues
show
Bug introduced by
$headers of type string is incompatible with the type ArrayAccess|array expected by parameter $array of PHPUnit\Framework\Assert::assertArrayHasKey(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

108
        self::assertArrayHasKey('Authorization', /** @scrutinizer ignore-type */ $headers);
Loading history...
109
        self::assertTrue(in_array('OAuth foo', $headers, true));
0 ignored issues
show
Bug introduced by
$headers of type string is incompatible with the type array expected by parameter $haystack of in_array(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

109
        self::assertTrue(in_array('OAuth foo', /** @scrutinizer ignore-type */ $headers, true));
Loading history...
110
    }
111
112
    /**
113
     * @covers \OAuth\OAuth2\Service\Facebook::__construct
114
     * @covers \OAuth\OAuth2\Service\Facebook::parseAccessTokenResponse
115
     */
116
    public function testParseAccessTokenResponseThrowsExceptionOnError(): void
117
    {
118
        $client = $this->createMock('\\OAuth\\Common\\Http\\Client\\ClientInterface');
119
        $client->expects(self::once())->method('retrieveResponse')->willReturn('error=some_error');
120
121
        $service = new Facebook(
122
            $this->createMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
123
            $client,
124
            $this->createMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
125
        );
126
127
        $this->expectException('\\OAuth\\Common\\Http\\Exception\\TokenResponseException');
128
129
        $service->requestAccessToken('foo');
130
    }
131
132
    /**
133
     * @covers \OAuth\OAuth2\Service\Facebook::__construct
134
     * @covers \OAuth\OAuth2\Service\Facebook::parseAccessTokenResponse
135
     */
136
    public function testParseAccessTokenResponseValidWithoutRefreshToken(): void
137
    {
138
        $client = $this->createMock('\\OAuth\\Common\\Http\\Client\\ClientInterface');
139
        $client->expects(self::once())->method('retrieveResponse')->willReturn('access_token=foo&expires=bar');
140
141
        $service = new Facebook(
142
            $this->createMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
143
            $client,
144
            $this->createMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
145
        );
146
147
        self::assertInstanceOf('\\OAuth\\OAuth2\\Token\\StdOAuth2Token', $service->requestAccessToken('foo'));
148
    }
149
150
    /**
151
     * @covers \OAuth\OAuth2\Service\Facebook::__construct
152
     * @covers \OAuth\OAuth2\Service\Facebook::parseAccessTokenResponse
153
     */
154
    public function testParseAccessTokenResponseValidWithRefreshToken(): void
155
    {
156
        $client = $this->createMock('\\OAuth\\Common\\Http\\Client\\ClientInterface');
157
        $client->expects(self::once())->method('retrieveResponse')->willReturn('access_token=foo&expires=bar&refresh_token=baz');
158
159
        $service = new Facebook(
160
            $this->createMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
161
            $client,
162
            $this->createMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
163
        );
164
165
        self::assertInstanceOf('\\OAuth\\OAuth2\\Token\\StdOAuth2Token', $service->requestAccessToken('foo'));
166
    }
167
168
    /**
169
     * @covers \OAuth\OAuth2\Service\Facebook::__construct
170
     * @covers \OAuth\OAuth2\Service\Facebook::getDialogUri
171
     */
172
    public function testGetDialogUriRedirectUriMissing(): void
173
    {
174
        $client = $this->createMock('\\OAuth\\Common\\Http\\Client\\ClientInterface');
175
176
        $service = new Facebook(
177
            $this->createMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
178
            $client,
179
            $this->createMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
180
        );
181
182
        $this->expectException('\\OAuth\\Common\\Exception\\Exception');
183
184
        $service->getDialogUri('feed', []);
185
    }
186
187
    /**
188
     * @covers \OAuth\OAuth2\Service\Facebook::__construct
189
     * @covers \OAuth\OAuth2\Service\Facebook::getDialogUri
190
     */
191
    public function testGetDialogUriInstanceofUri(): void
192
    {
193
        $client = $this->createMock('\\OAuth\\Common\\Http\\Client\\ClientInterface');
194
195
        $service = new Facebook(
196
            $this->createMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
197
            $client,
198
            $this->createMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
199
        );
200
201
        $dialogUri = $service->getDialogUri(
202
            'feed',
203
            [
204
                'redirect_uri' => 'http://www.facebook.com',
205
                'state' => 'Random state',
206
            ]
207
        );
208
        self::assertInstanceOf('\\OAuth\\Common\\Http\\Uri\\Uri', $dialogUri);
209
    }
210
211
    /**
212
     * @covers \OAuth\OAuth2\Service\Facebook::__construct
213
     * @covers \OAuth\OAuth2\Service\Facebook::getDialogUri
214
     */
215
    public function testGetDialogUriContainsAppIdAndOtherParameters(): void
216
    {
217
        $client = $this->createMock('\\OAuth\\Common\\Http\\Client\\ClientInterface');
218
        $credentials = $this->createMock('\\OAuth\\Common\\Consumer\\CredentialsInterface');
219
        $credentials->expects(self::any())->method('getConsumerId')->willReturn('application_id');
220
221
        $service = new Facebook(
222
            $credentials,
223
            $client,
224
            $this->createMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
225
        );
226
227
        $dialogUri = $service->getDialogUri(
228
            'feed',
229
            [
230
                'redirect_uri' => 'http://www.facebook.com',
231
                'state' => 'Random state',
232
            ]
233
        );
234
235
        $queryString = $dialogUri->getQuery();
236
        parse_str($queryString, $queryArray);
237
238
        self::assertArrayHasKey('app_id', $queryArray);
239
        self::assertArrayHasKey('redirect_uri', $queryArray);
240
        self::assertArrayHasKey('state', $queryArray);
241
    }
242
}
243