PageRenderTime 27ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/twitter4j-core/src/test/java/twitter4j/TweetsResourcesTest.java

http://github.com/yusuke/twitter4j
Java | 299 lines | 216 code | 53 blank | 30 comment | 2 complexity | f0e6006b4aacb73689dc6b34dcf01cd6 MD5 | raw file
Possible License(s): Apache-2.0
  1. /*
  2. * Copyright 2007 Yusuke Yamamoto
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package twitter4j;
  17. import org.junit.jupiter.api.Test;
  18. import java.io.File;
  19. import java.io.FileInputStream;
  20. import java.util.List;
  21. import java.util.Map;
  22. import static org.junit.jupiter.api.Assertions.assertEquals;
  23. import static org.junit.jupiter.api.Assertions.assertNotNull;
  24. import static org.junit.jupiter.api.Assertions.assertTrue;
  25. /**
  26. * @author Yusuke Yamamoto - yusuke at mac.com
  27. * @since Twitter4J 2.2.4
  28. */
  29. class TweetsResourcesTest extends TwitterTestBase {
  30. @Test
  31. void testShowStatus() throws Exception {
  32. Status status;
  33. status = TwitterObjectFactory.createStatus("{\"text\":\"\\\\u5e30%u5e30 <%\\u007d& foobar <&Cynthia>\",\"contributors\":null,\"geo\":null,\"retweeted\":false,\"in_reply_to_screen_name\":null,\"truncated\":false,\"entities\":{\"urls\":[],\"hashtags\":[],\"user_mentions\":[]},\"in_reply_to_status_id_str\":null,\"id\":12029015787307008,\"in_reply_to_user_id_str\":null,\"source\":\"web\",\"favorited\":false,\"in_reply_to_status_id\":null,\"in_reply_to_user_id\":null,\"created_at\":\"Tue Dec 07 06:21:55 +0000 2010\",\"retweet_count\":0,\"id_str\":\"12029015787307008\",\"place\":null,\"user\":{\"location\":\"location:\",\"statuses_count\":13405,\"profile_background_tile\":false,\"lang\":\"en\",\"profile_link_color\":\"0000ff\",\"id\":6358482,\"following\":true,\"favourites_count\":2,\"protected\":false,\"profile_text_color\":\"000000\",\"contributors_enabled\":false,\"description\":\"Hi there, I do test a lot!new\",\"verified\":false,\"profile_sidebar_border_color\":\"87bc44\",\"name\":\"twit4j\",\"profile_background_color\":\"9ae4e8\",\"created_at\":\"Sun May 27 09:52:09 +0000 2007\",\"followers_count\":24,\"geo_enabled\":true,\"profile_background_image_url\":\"http://a3.twimg.com/profile_background_images/179009017/t4j-reverse.gif\",\"follow_request_sent\":false,\"url\":\"http://yusuke.homeip.net/twitter4j/\",\"utc_offset\":-32400,\"time_zone\":\"Alaska\",\"notifications\":false,\"friends_count\":4,\"profile_use_background_image\":true,\"profile_sidebar_fill_color\":\"e0ff92\",\"screen_name\":\"twit4j\",\"id_str\":\"6358482\",\"profile_image_url\":\"http://a3.twimg.com/profile_images/1184543043/t4j-reverse_normal.jpeg\",\"show_all_inline_media\":false,\"listed_count\":3},\"coordinates\":null}");
  34. assertEquals("\\u5e30%u5e30 <%}& foobar <&Cynthia>", status.getText());
  35. status = twitter2.showStatus(1000l);
  36. assertNotNull(TwitterObjectFactory.getRawJSON(status));
  37. assertEquals(status, TwitterObjectFactory.createStatus(TwitterObjectFactory.getRawJSON(status)));
  38. assertEquals("en", status.getLang());
  39. assertEquals(52, status.getUser().getId());
  40. Status status2 = twitter1.showStatus(1000l);
  41. assertEquals(52, status2.getUser().getId());
  42. assertNotNull(status.getRateLimitStatus());
  43. assertNotNull(TwitterObjectFactory.getRawJSON(status2));
  44. assertEquals(status2, TwitterObjectFactory.createStatus(TwitterObjectFactory.getRawJSON(status2)));
  45. status2 = twitter1.showStatus(999383469l);
  46. assertEquals("und", status2.getLang());
  47. assertNotNull(TwitterObjectFactory.getRawJSON(status2));
  48. assertEquals(status2, TwitterObjectFactory.createStatus(TwitterObjectFactory.getRawJSON(status2)));
  49. assertEquals("01010100 01110010 01101001 01110101 01101101 01110000 01101000 <3", status2.getText());
  50. status2 = twitter1.showStatus(12029015787307008l);
  51. assertNotNull(TwitterObjectFactory.getRawJSON(status2));
  52. assertEquals(status2, TwitterObjectFactory.createStatus(TwitterObjectFactory.getRawJSON(status2)));
  53. assertEquals("\\u5e30%u5e30 <%}& foobar <&Cynthia>", status2.getText());
  54. }
  55. @Test
  56. void testStatusMethods() throws Exception {
  57. String dateStr = new java.util.Date().toString();
  58. String date = dateStr + "test mytweet @" + id2.screenName + " #twitter4jtest";
  59. Status status = twitter1.updateStatus(date);
  60. assertNotNull(TwitterObjectFactory.getRawJSON(status));
  61. assertEquals(status, TwitterObjectFactory.createStatus(TwitterObjectFactory.getRawJSON(status)));
  62. assertTrue(status.getText().contains("#twitter4jtest"));
  63. // http://jira.twitter4j.org/browse/TFJ-715
  64. // current_user_retweet contains only id
  65. Status retweeted = twitter2.retweetStatus(status.getId());
  66. assertTrue(retweeted.getText().endsWith(status.getText()));
  67. Status status2 = twitter2.updateStatus(new StatusUpdate("@" + id1.screenName + " " + date).inReplyToStatusId(status.getId()));
  68. assertNotNull(TwitterObjectFactory.getRawJSON(status2));
  69. assertEquals(status2, TwitterObjectFactory.createStatus(TwitterObjectFactory.getRawJSON(status2)));
  70. assertTrue(status2.getText().contains("#twitter4jtest"));
  71. assertEquals(status.getId(), status2.getInReplyToStatusId());
  72. assertEquals(id1.id, status2.getInReplyToUserId());
  73. status = twitter1.destroyStatus(status.getId());
  74. assertNotNull(TwitterObjectFactory.getRawJSON(status));
  75. assertEquals(status, TwitterObjectFactory.createStatus(TwitterObjectFactory.getRawJSON(status)));
  76. date = new java.util.Date().toString();
  77. String tweet = date + "test @" + id2.screenName + " #twitter4jtest";
  78. status = twitter1.updateStatus(new StatusUpdate(tweet).possiblySensitive(false).media(getRandomlyChosenFile()));
  79. assertNotNull(TwitterObjectFactory.getRawJSON(status));
  80. assertEquals(status, TwitterObjectFactory.createStatus(TwitterObjectFactory.getRawJSON(status)));
  81. assertTrue(status.getText().startsWith(date));
  82. assertEquals(1, status.getMediaEntities().length);
  83. // testing un-retweet
  84. String dateStr3 = new java.util.Date().toString();
  85. String date3 = dateStr3 + "test http://t.co/VEDROet @" + id2.screenName + " #twitter4jtest";
  86. Status status3 = twitter1.updateStatus(date3);
  87. // since updateStatus is already tested, just checking if the returned status is non-null
  88. assertNotNull(TwitterObjectFactory.getRawJSON(status3));
  89. Status retweetedStatus = twitter2.retweetStatus(status3.getId());
  90. assertTrue(retweetedStatus.getText().endsWith(status3.getText()));
  91. // testing un retweet
  92. Status unRetweetedStatus = twitter2.unRetweetStatus(status3.getId());
  93. assertTrue(unRetweetedStatus.getText().endsWith(status3.getText()));
  94. // deleting the status
  95. status3 = twitter1.destroyStatus(status3.getId());
  96. assertNotNull(TwitterObjectFactory.getRawJSON(status3));
  97. }
  98. @Test
  99. void testUploadMediaByFile() throws Exception {
  100. UploadedMedia media = twitter1.uploadMedia(getRandomlyChosenFile());
  101. assertNotNull(media.getMediaId());
  102. assertNotNull(media.getSize());
  103. }
  104. @Test
  105. void testUploadMediaByStream() throws Exception {
  106. File randomFile = getRandomlyChosenFile();
  107. FileInputStream fis = new FileInputStream(randomFile);
  108. UploadedMedia media2 = twitter1.uploadMedia("fromInputStream", fis);
  109. assertNotNull(media2.getMediaId());
  110. assertNotNull(media2.getSize());
  111. }
  112. @Test
  113. void testRetweetMethods() throws Exception {
  114. List<Status> statuses;
  115. statuses = twitter1.getRetweets(1021608606934822912L);
  116. assertNotNull(TwitterObjectFactory.getRawJSON(statuses));
  117. assertEquals(statuses.get(0), TwitterObjectFactory.createStatus(TwitterObjectFactory.getRawJSON(statuses.get(0))));
  118. assertIsRetweet(statuses);
  119. assertTrue(2 < statuses.size());
  120. IDs retweeters = twitter1.getRetweeterIds(1021608606934822912L, -1);
  121. assertTrue(0 < retweeters.getIDs().length);
  122. }
  123. private void assertIsRetweet(List<Status> statuses) {
  124. for (Status status : statuses) {
  125. assertTrue(status.getText().startsWith("RT "));
  126. }
  127. }
  128. @Test
  129. void testOEmbed() throws TwitterException {
  130. OEmbed oembed = twitter1.getOEmbed(new OEmbedRequest(240192632003911681L, "http://samuraism.com/"));
  131. assertNotNull(TwitterObjectFactory.getRawJSON(oembed));
  132. assertEquals(oembed, TwitterObjectFactory.createOEmbed(TwitterObjectFactory.getRawJSON(oembed)));
  133. assertNotNull(oembed.getHtml());
  134. assertEquals("Jason Costa", oembed.getAuthorName());
  135. assertEquals("https://twitter.com/jasoncosta/status/240192632003911681", oembed.getURL());
  136. assertEquals("1.0", oembed.getVersion());
  137. assertEquals(3153600000L, oembed.getCacheAge());
  138. assertEquals("https://twitter.com/jasoncosta", oembed.getAuthorURL());
  139. assertTrue(0 < oembed.getWidth());
  140. oembed = twitter1.getOEmbed(new OEmbedRequest(273685580615913473L, "http://samuraism.com/"));
  141. }
  142. @Test
  143. void testOEmbedWithWidgetType() throws TwitterException {
  144. OEmbedRequest req = new OEmbedRequest(1011622565469548550L, "");
  145. req.setWidgetType(OEmbedRequest.WidgetType.VIDEO);
  146. // use this if want to see impact:
  147. // req.setHideTweet(true);
  148. OEmbed oembed = twitter1.getOEmbed(req);
  149. assertNotNull(TwitterObjectFactory.getRawJSON(oembed));
  150. assertEquals(oembed, TwitterObjectFactory.createOEmbed(TwitterObjectFactory.getRawJSON(oembed)));
  151. assertNotNull(oembed.getHtml());
  152. assertTrue(oembed.getHtml().contains("<blockquote class=\"twitter-video\""));
  153. // use this assert if include req.setHideTweet(true)
  154. // assertTrue(oembed.getHtml().contains("<blockquote class=\"twitter-video\" data-status=\"hidden\""));
  155. }
  156. @Test
  157. void testLookup() throws TwitterException {
  158. // from "Example Result" of https://dev.twitter.com/docs/api/1.1/get/statuses/lookup
  159. ResponseList<Status> statuses = twitter1.lookup(20L, 432656548536401920L);
  160. assertEquals(2, statuses.size());
  161. Status first = statuses.get(0);
  162. assertEquals("just setting up my twttr", first.getText());
  163. Status second = statuses.get(1);
  164. assertEquals("POST statuses/update. Great way to start. https://t.co/9S8YO69xzf (disclaimer, this was not posted via the API).", second.getText());
  165. }
  166. @Test
  167. void testEntities() throws Exception {
  168. Status status = twitter2.showStatus(332341548203261953L);
  169. SymbolEntity[] symbolEntities = status.getSymbolEntities();
  170. assertEquals(4, symbolEntities.length);
  171. assertEquals("$APPL", status.getText().substring(symbolEntities[0].getStart(), symbolEntities[0].getEnd()));
  172. assertEquals("$C", status.getText().substring(symbolEntities[1].getStart(), symbolEntities[1].getEnd()));
  173. assertEquals("$LNKD", status.getText().substring(symbolEntities[2].getStart(), symbolEntities[2].getEnd()));
  174. assertEquals("$FB", status.getText().substring(symbolEntities[3].getStart(), symbolEntities[3].getEnd()));
  175. status = twitter2.showStatus(268294645526708226L);
  176. assertNotNull(TwitterObjectFactory.getRawJSON(status));
  177. assertEquals(status, TwitterObjectFactory.createStatus(TwitterObjectFactory.getRawJSON(status)));
  178. symbolEntities = status.getSymbolEntities();
  179. assertEquals(0, symbolEntities.length);
  180. URLEntity[] urlEntities = status.getURLEntities();
  181. assertEquals(1, urlEntities.length);
  182. assertEquals("http://t.co/HwbSpYFr", urlEntities[0].getURL());
  183. assertEquals("http://twitter4j.org/en/index.html#download", urlEntities[0].getExpandedURL());
  184. assertEquals("twitter4j.org/en/index.html#…", urlEntities[0].getDisplayURL());
  185. assertTrue(0 < urlEntities[0].getStart());
  186. assertTrue(urlEntities[0].getStart() < urlEntities[0].getEnd());
  187. assertEquals(urlEntities[0].getURL(), status.getText().substring(urlEntities[0].getStart(), urlEntities[0].getEnd()));
  188. UserMentionEntity[] userMentions = status.getUserMentionEntities();
  189. assertEquals(2, userMentions.length);
  190. assertEquals(72297675, userMentions[1].getId());
  191. assertEquals("t4j_news", userMentions[1].getScreenName());
  192. assertEquals("@" + userMentions[1].getScreenName(), status.getText().substring(userMentions[1].getStart(), userMentions[1].getEnd()));
  193. HashtagEntity[] hashtags = status.getHashtagEntities();
  194. assertEquals(1, hashtags.length);
  195. assertEquals("test", hashtags[0].getText());
  196. assertEquals("#" + hashtags[0].getText(), status.getText().substring(hashtags[0].getStart(), hashtags[0].getEnd()));
  197. status = twitter1.showStatus(76360760606986241L);
  198. assertNotNull(TwitterObjectFactory.getRawJSON(status));
  199. assertEquals(status, TwitterObjectFactory.createStatus(TwitterObjectFactory.getRawJSON(status)));
  200. MediaEntity[] medias = status.getMediaEntities();
  201. assertEquals(1, medias.length);
  202. MediaEntity media = medias[0];
  203. assertEquals("pic.twitter.com/qbJx26r", media.getDisplayURL());
  204. assertEquals("https://twitter.com/twitter/status/76360760606986241/photo/1", media.getExpandedURL());
  205. assertEquals(76360760611180544L, media.getId());
  206. assertEquals("http://pbs.twimg.com/media/AQ9JtQsCEAA7dEN.jpg", media.getMediaURL());
  207. assertEquals("https://pbs.twimg.com/media/AQ9JtQsCEAA7dEN.jpg", media.getMediaURLHttps());
  208. assertEquals("http://t.co/qbJx26r", media.getURL());
  209. assertEquals(34, media.getStart());
  210. assertEquals(53, media.getEnd());
  211. assertEquals("photo", media.getType());
  212. Map<Integer, MediaEntity.Size> sizes = media.getSizes();
  213. assertEquals(4, sizes.size());
  214. MediaEntity.Size large = sizes.get(MediaEntity.Size.LARGE);
  215. assertEquals(MediaEntity.Size.FIT, sizes.get(MediaEntity.Size.LARGE).getResize());
  216. assertEquals(700, large.getWidth());
  217. assertEquals(466, large.getHeight());
  218. MediaEntity.Size medium = sizes.get(MediaEntity.Size.MEDIUM);
  219. assertEquals(MediaEntity.Size.FIT, medium.getResize());
  220. assertEquals(700, medium.getWidth());
  221. assertEquals(466, medium.getHeight());
  222. MediaEntity.Size small = sizes.get(MediaEntity.Size.SMALL);
  223. assertEquals(MediaEntity.Size.FIT, small.getResize());
  224. assertEquals(680, small.getWidth());
  225. assertEquals(453, small.getHeight());
  226. MediaEntity.Size thumb = sizes.get(MediaEntity.Size.THUMB);
  227. assertEquals(MediaEntity.Size.CROP, thumb.getResize());
  228. assertEquals(150, thumb.getWidth());
  229. assertEquals(150, thumb.getHeight());
  230. }
  231. static final String[] files = {"src/test/resources/t4j-reverse.jpeg",
  232. "src/test/resources/t4j-reverse.png",
  233. "src/test/resources/t4j-reverse.gif",
  234. "src/test/resources/t4j.jpeg",
  235. "src/test/resources/t4j.png",
  236. "src/test/resources/t4j.gif",
  237. };
  238. private static File getRandomlyChosenFile() {
  239. int rand = (int) (System.currentTimeMillis() % 6);
  240. File file = new File(files[rand]);
  241. if (!file.exists()) {
  242. file = new File("twitter4j-core/" + files[rand]);
  243. }
  244. return file;
  245. }
  246. }