]> git.mxchange.org Git - friendica-addons.git/blob - twitter/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php
Merge branch '3.6-release'
[friendica-addons.git] / twitter / vendor / abraham / twitteroauth / tests / TwitterOAuthTest.php
1 <?php
2 /**
3  * WARNING: Running these tests will post and delete through the actual Twitter account.
4  */
5 namespace Abraham\TwitterOAuth\Test;
6
7 use Abraham\TwitterOAuth\TwitterOAuth;
8
9 class TwitterOAuthTest extends \PHPUnit_Framework_TestCase
10 {
11     /** @var TwitterOAuth */
12     protected $twitter;
13
14     protected function setUp()
15     {
16         $this->twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
17     }
18
19     public function testBuildClient()
20     {
21         $this->assertObjectHasAttribute('consumer', $this->twitter);
22         $this->assertObjectHasAttribute('token', $this->twitter);
23     }
24
25     public function testSetOauthToken()
26     {
27         $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
28         $twitter->setOauthToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
29         $this->assertObjectHasAttribute('consumer', $twitter);
30         $this->assertObjectHasAttribute('token', $twitter);
31         $twitter->get('friendships/show', ['target_screen_name' => 'twitterapi']);
32         $this->assertEquals(200, $twitter->getLastHttpCode());
33     }
34
35     public function testOauth2Token()
36     {
37         $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
38         $result = $twitter->oauth2('oauth2/token', ['grant_type' => 'client_credentials']);
39         $this->assertEquals(200, $twitter->getLastHttpCode());
40         $this->assertObjectHasAttribute('token_type', $result);
41         $this->assertObjectHasAttribute('access_token', $result);
42         $this->assertEquals('bearer', $result->token_type);
43         return $result;
44     }
45
46     /**
47      * @depends testOauth2Token
48      */
49     public function testBearerToken($accessToken)
50     {
51         $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, null, $accessToken->access_token);
52         $result = $twitter->get('statuses/user_timeline', ['screen_name' => 'twitterapi']);
53         if ($twitter->getLastHttpCode() !== 200) {
54             $this->assertEquals('foo', substr($accessToken->access_token, 0, 75));
55             $this->assertEquals('foo', print_r($result, true));
56         }
57         $this->assertEquals(200, $twitter->getLastHttpCode());
58         return $accessToken;
59     }
60
61     // This causes issues for parallel run tests.
62     // /**
63     //  * @depends testBearerToken
64     //  */
65     // public function testOauth2TokenInvalidate($accessToken)
66     // {
67     //     $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
68     //     // HACK: access_token is already urlencoded but gets urlencoded again breaking the invalidate request.
69     //     $result = $twitter->oauth2(
70     //         'oauth2/invalidate_token',
71     //         array('access_token' => urldecode($accessToken->access_token))
72     //     );
73     //     $this->assertEquals(200, $twitter->getLastHttpCode());
74     //     $this->assertObjectHasAttribute('access_token', $result);
75     //     return $result;
76     // }
77
78     public function testOauthRequestToken()
79     {
80         $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
81         $result = $twitter->oauth('oauth/request_token', ['oauth_callback' => OAUTH_CALLBACK]);
82         $this->assertEquals(200, $twitter->getLastHttpCode());
83         $this->assertArrayHasKey('oauth_token', $result);
84         $this->assertArrayHasKey('oauth_token_secret', $result);
85         $this->assertArrayHasKey('oauth_callback_confirmed', $result);
86         $this->assertEquals('true', $result['oauth_callback_confirmed']);
87         return $result;
88     }
89
90     /**
91      * @expectedException \Abraham\TwitterOAuth\TwitterOAuthException
92      * @expectedExceptionMessage Could not authenticate you
93      */
94     public function testOauthRequestTokenException()
95     {
96         $twitter = new TwitterOAuth('CONSUMER_KEY', 'CONSUMER_SECRET');
97         $result = $twitter->oauth('oauth/request_token', ['oauth_callback' => OAUTH_CALLBACK]);
98         return $result;
99     }
100
101     /**
102      * @expectedException \Abraham\TwitterOAuth\TwitterOAuthException
103      * @expectedExceptionMessage Invalid oauth_verifier parameter
104      * @depends testOauthRequestToken
105      */
106     public function testOauthAccessTokenTokenException(array $requestToken)
107     {
108         // Can't test this without a browser logging into Twitter so check for the correct error instead.
109         $twitter = new TwitterOAuth(
110             CONSUMER_KEY,
111             CONSUMER_SECRET,
112             $requestToken['oauth_token'],
113             $requestToken['oauth_token_secret']
114         );
115         $twitter->oauth("oauth/access_token", ["oauth_verifier" => "fake_oauth_verifier"]);
116     }
117
118     public function testUrl()
119     {
120         $url = $this->twitter->url('oauth/authorize', ['foo' => 'bar', 'baz' => 'qux']);
121         $this->assertEquals('https://api.twitter.com/oauth/authorize?foo=bar&baz=qux', $url);
122     }
123
124     public function testGetAccountVerifyCredentials()
125     {
126         // Include entities boolean added to test parameter value cohearsion
127         $this->twitter->get('account/verify_credentials', ["include_entities" => false]);
128         $this->assertEquals(200, $this->twitter->getLastHttpCode());
129     }
130
131     // BUG: testing is too unreliable for now
132     // public function testSetProxy()
133     // {
134     //     $this->twitter->setProxy(array(
135     //         'CURLOPT_PROXY' => PROXY,
136     //         'CURLOPT_PROXYUSERPWD' => PROXYUSERPWD,
137     //         'CURLOPT_PROXYPORT' => PROXYPORT,
138     //     ));
139     //     $this->twitter->setTimeouts(60, 60);
140     //     $result = $this->twitter->get('account/verify_credentials');
141     //     $this->assertEquals(200, $this->twitter->getLastHttpCode());
142     //     $this->assertObjectHasAttribute('id', $result);
143     // }
144
145     public function testGetStatusesMentionsTimeline()
146     {
147         $this->twitter->get('statuses/mentions_timeline');
148         $this->assertEquals(200, $this->twitter->getLastHttpCode());
149     }
150
151     public function testGetSearchTweets()
152     {
153         $result = $this->twitter->get('search/tweets', ['q' => 'twitter']);
154         $this->assertEquals(200, $this->twitter->getLastHttpCode());
155         return $result->statuses;
156     }
157
158     /**
159      * @depends testGetSearchTweets
160      */
161     public function testGetSearchTweetsWithMaxId($statuses)
162     {
163         $maxId = array_pop($statuses)->id_str;
164         $this->twitter->get('search/tweets', ['q' => 'twitter', 'max_id' => $maxId]);
165         $this->assertEquals(200, $this->twitter->getLastHttpCode());
166     }
167
168     public function testPostFavoritesCreate()
169     {
170         $result = $this->twitter->post('favorites/create', ['id' => '6242973112']);
171         if ($this->twitter->getLastHttpCode() == 403) {
172             // Status already favorited
173             $this->assertEquals(139, $result->errors[0]->code);
174         } else {
175             $this->assertEquals(200, $this->twitter->getLastHttpCode());
176         }
177     }
178
179     /**
180      * @depends testPostFavoritesCreate
181      */
182     public function testPostFavoritesDestroy()
183     {
184         $this->twitter->post('favorites/destroy', ['id' => '6242973112']);
185         $this->assertEquals(200, $this->twitter->getLastHttpCode());
186     }
187
188     public function testPostStatusesUpdateWithMedia()
189     {
190         $this->twitter->setTimeouts(60, 30);
191         // Image source https://www.flickr.com/photos/titrans/8548825587/
192         $file_path = __DIR__ . '/kitten.jpg';
193         $result = $this->twitter->upload('media/upload', ['media' => $file_path]);
194         $this->assertEquals(200, $this->twitter->getLastHttpCode());
195         $this->assertObjectHasAttribute('media_id_string', $result);
196         $parameters = ['status' => 'Hello World ' . time(), 'media_ids' => $result->media_id_string];
197         $result = $this->twitter->post('statuses/update', $parameters);
198         $this->assertEquals(200, $this->twitter->getLastHttpCode());
199         if ($this->twitter->getLastHttpCode() == 200) {
200             $result = $this->twitter->post('statuses/destroy/' . $result->id_str);
201         }
202         return $result;
203     }
204
205     public function testPostStatusesUpdateWithMediaChunked()
206     {
207         $this->twitter->setTimeouts(60, 30);
208         // Video source http://www.sample-videos.com/
209         $file_path = __DIR__ . '/video.mp4';
210         $result = $this->twitter->upload('media/upload', ['media' => $file_path, 'media_type' => 'video/mp4'], true);
211         $this->assertEquals(201, $this->twitter->getLastHttpCode());
212         $this->assertObjectHasAttribute('media_id_string', $result);
213         $parameters = ['status' => 'Hello World ' . time(), 'media_ids' => $result->media_id_string];
214         $result = $this->twitter->post('statuses/update', $parameters);
215         $this->assertEquals(200, $this->twitter->getLastHttpCode());
216         if ($this->twitter->getLastHttpCode() == 200) {
217             $result = $this->twitter->post('statuses/destroy/' . $result->id_str);
218         }
219         return $result;
220     }
221
222     public function testPostStatusesUpdateUtf8()
223     {
224         $result = $this->twitter->post('statuses/update', ['status' => 'xこんにちは世界 ' . time()]);
225         $this->assertEquals(200, $this->twitter->getLastHttpCode());
226         return $result;
227     }
228
229     /**
230      * @depends testPostStatusesUpdateUtf8
231      */
232     public function testPostStatusesDestroy($status)
233     {
234         $this->twitter->post('statuses/destroy/' . $status->id_str);
235         $this->assertEquals(200, $this->twitter->getLastHttpCode());
236     }
237
238     public function testLastResult()
239     {
240         $this->twitter->get('search/tweets', ['q' => 'twitter']);
241         $this->assertEquals('search/tweets', $this->twitter->getLastApiPath());
242         $this->assertEquals(200, $this->twitter->getLastHttpCode());
243         $this->assertObjectHasAttribute('statuses', $this->twitter->getLastBody());
244     }
245
246     /**
247      * @depends testLastResult
248      */
249     public function testResetLastResponse()
250     {
251         $this->twitter->resetLastResponse();
252         $this->assertEquals('', $this->twitter->getLastApiPath());
253         $this->assertEquals(0, $this->twitter->getLastHttpCode());
254         $this->assertEquals([], $this->twitter->getLastBody());
255     }
256 }