1 // OpenTween - Client of Twitter
2 // Copyright (c) 2016 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
3 // All rights reserved.
5 // This file is part of OpenTween.
7 // This program is free software; you can redistribute it and/or modify it
8 // under the terms of the GNU General Public License as published by the Free
9 // Software Foundation; either version 3 of the License, or (at your option)
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 // You should have received a copy of the GNU General Public License along
18 // with this program. If not, see <http://www.gnu.org/licenses/>, or write to
19 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
20 // Boston, MA 02110-1301, USA.
23 using System.Collections.Generic;
26 using System.Net.Http;
27 using System.Reflection;
28 using System.Runtime.InteropServices;
30 using System.Threading.Tasks;
32 using OpenTween.Api.DataModel;
33 using OpenTween.Connection;
36 namespace OpenTween.Api
38 public class TwitterApiTest
40 public TwitterApiTest()
45 public void MyCommonSetup()
47 var mockAssembly = new Mock<_Assembly>();
48 mockAssembly.Setup(m => m.GetName()).Returns(new AssemblyName("OpenTween"));
50 MyCommon.EntryAssembly = mockAssembly.Object;
54 public void Initialize_Test()
56 using (var twitterApi = new TwitterApi())
58 Assert.Null(twitterApi.apiConnection);
60 twitterApi.Initialize("*** AccessToken ***", "*** AccessSecret ***", userId: 100L, screenName: "hogehoge");
62 Assert.IsType<TwitterApiConnection>(twitterApi.apiConnection);
64 var apiConnection = (TwitterApiConnection)twitterApi.apiConnection;
65 Assert.Equal("*** AccessToken ***", apiConnection.AccessToken);
66 Assert.Equal("*** AccessSecret ***", apiConnection.AccessSecret);
68 Assert.Equal(100L, twitterApi.CurrentUserId);
69 Assert.Equal("hogehoge", twitterApi.CurrentScreenName);
71 // 複数回 Initialize を実行した場合は新たに TwitterApiConnection が生成される
72 twitterApi.Initialize("*** AccessToken2 ***", "*** AccessSecret2 ***", userId: 200L, screenName: "foobar");
74 var oldApiConnection = apiConnection;
75 Assert.True(oldApiConnection.IsDisposed);
77 Assert.IsType<TwitterApiConnection>(twitterApi.apiConnection);
79 apiConnection = (TwitterApiConnection)twitterApi.apiConnection;
80 Assert.Equal("*** AccessToken2 ***", apiConnection.AccessToken);
81 Assert.Equal("*** AccessSecret2 ***", apiConnection.AccessSecret);
83 Assert.Equal(200L, twitterApi.CurrentUserId);
84 Assert.Equal("foobar", twitterApi.CurrentScreenName);
89 public async Task StatusesHomeTimeline_Test()
91 using (var twitterApi = new TwitterApi())
93 var mock = new Mock<IApiConnection>();
95 x.GetAsync<TwitterStatus[]>(
96 new Uri("statuses/home_timeline.json", UriKind.Relative),
97 new Dictionary<string, string> {
98 { "include_entities", "true" },
99 { "include_ext_alt_text", "true" },
102 { "since_id", "100" },
104 "/statuses/home_timeline")
106 .ReturnsAsync(new TwitterStatus[0]);
108 twitterApi.apiConnection = mock.Object;
110 await twitterApi.StatusesHomeTimeline(200, maxId: 900L, sinceId: 100L)
111 .ConfigureAwait(false);
118 public async Task StatusesMentionsTimeline_Test()
120 using (var twitterApi = new TwitterApi())
122 var mock = new Mock<IApiConnection>();
124 x.GetAsync<TwitterStatus[]>(
125 new Uri("statuses/mentions_timeline.json", UriKind.Relative),
126 new Dictionary<string, string> {
127 { "include_entities", "true" },
128 { "include_ext_alt_text", "true" },
131 { "since_id", "100" },
133 "/statuses/mentions_timeline")
135 .ReturnsAsync(new TwitterStatus[0]);
137 twitterApi.apiConnection = mock.Object;
139 await twitterApi.StatusesMentionsTimeline(200, maxId: 900L, sinceId: 100L)
140 .ConfigureAwait(false);
147 public async Task StatusesUserTimeline_Test()
149 using (var twitterApi = new TwitterApi())
151 var mock = new Mock<IApiConnection>();
153 x.GetAsync<TwitterStatus[]>(
154 new Uri("statuses/user_timeline.json", UriKind.Relative),
155 new Dictionary<string, string> {
156 { "screen_name", "twitterapi" },
157 { "include_rts", "true" },
158 { "include_entities", "true" },
159 { "include_ext_alt_text", "true" },
162 { "since_id", "100" },
164 "/statuses/user_timeline")
166 .ReturnsAsync(new TwitterStatus[0]);
168 twitterApi.apiConnection = mock.Object;
170 await twitterApi.StatusesUserTimeline("twitterapi", count: 200, maxId: 900L, sinceId: 100L)
171 .ConfigureAwait(false);
178 public async Task StatusesShow_Test()
180 using (var twitterApi = new TwitterApi())
182 var mock = new Mock<IApiConnection>();
184 x.GetAsync<TwitterStatus>(
185 new Uri("statuses/show.json", UriKind.Relative),
186 new Dictionary<string, string> {
188 { "include_entities", "true" },
189 { "include_ext_alt_text", "true" },
191 "/statuses/show/:id")
193 .ReturnsAsync(new TwitterStatus { Id = 100L });
195 twitterApi.apiConnection = mock.Object;
197 await twitterApi.StatusesShow(statusId: 100L)
198 .ConfigureAwait(false);
205 public async Task StatusesUpdate_Test()
207 using (var twitterApi = new TwitterApi())
209 var mock = new Mock<IApiConnection>();
211 x.PostLazyAsync<TwitterStatus>(
212 new Uri("statuses/update.json", UriKind.Relative),
213 new Dictionary<string, string> {
214 { "status", "hogehoge" },
215 { "include_entities", "true" },
216 { "include_ext_alt_text", "true" },
217 { "in_reply_to_status_id", "100" },
218 { "media_ids", "10,20" },
221 .ReturnsAsync(LazyJson.Create(new TwitterStatus()));
223 twitterApi.apiConnection = mock.Object;
225 await twitterApi.StatusesUpdate("hogehoge", replyToId: 100L, mediaIds: new[] { 10L, 20L })
227 .ConfigureAwait(false);
234 public async Task StatusesDestroy_Test()
236 using (var twitterApi = new TwitterApi())
238 var mock = new Mock<IApiConnection>();
240 x.PostLazyAsync<TwitterStatus>(
241 new Uri("statuses/destroy.json", UriKind.Relative),
242 new Dictionary<string, string> { { "id", "100" } })
244 .ReturnsAsync(LazyJson.Create(new TwitterStatus { Id = 100L }));
246 twitterApi.apiConnection = mock.Object;
248 await twitterApi.StatusesDestroy(statusId: 100L)
250 .ConfigureAwait(false);
257 public async Task StatusesRetweet_Test()
259 using (var twitterApi = new TwitterApi())
261 var mock = new Mock<IApiConnection>();
263 x.PostLazyAsync<TwitterStatus>(
264 new Uri("statuses/retweet.json", UriKind.Relative),
265 new Dictionary<string, string> {
267 { "include_entities", "true" },
268 { "include_ext_alt_text", "true" },
271 .ReturnsAsync(LazyJson.Create(new TwitterStatus()));
273 twitterApi.apiConnection = mock.Object;
275 await twitterApi.StatusesRetweet(100L)
277 .ConfigureAwait(false);
284 public async Task ListsOwnerships_Test()
286 using (var twitterApi = new TwitterApi())
288 var mock = new Mock<IApiConnection>();
290 x.GetAsync<TwitterLists>(
291 new Uri("lists/ownerships.json", UriKind.Relative),
292 new Dictionary<string, string> {
293 { "screen_name", "twitterapi" },
298 .ReturnsAsync(new TwitterLists());
300 twitterApi.apiConnection = mock.Object;
302 await twitterApi.ListsOwnerships("twitterapi", cursor: -1L)
303 .ConfigureAwait(false);
310 public async Task ListsSubscriptions_Test()
312 using (var twitterApi = new TwitterApi())
314 var mock = new Mock<IApiConnection>();
316 x.GetAsync<TwitterLists>(
317 new Uri("lists/subscriptions.json", UriKind.Relative),
318 new Dictionary<string, string> {
319 { "screen_name", "twitterapi" },
322 "/lists/subscriptions")
324 .ReturnsAsync(new TwitterLists());
326 twitterApi.apiConnection = mock.Object;
328 await twitterApi.ListsSubscriptions("twitterapi", cursor: -1L)
329 .ConfigureAwait(false);
336 public async Task ListsCreate_Test()
338 using (var twitterApi = new TwitterApi())
340 var mock = new Mock<IApiConnection>();
342 x.PostLazyAsync<TwitterList>(
343 new Uri("lists/create.json", UriKind.Relative),
344 new Dictionary<string, string> {
345 { "name", "hogehoge" },
346 { "description", "aaaa" },
347 { "mode", "private" },
350 .ReturnsAsync(LazyJson.Create(new TwitterList()));
352 twitterApi.apiConnection = mock.Object;
354 await twitterApi.ListsCreate("hogehoge", description: "aaaa", @private: true)
356 .ConfigureAwait(false);
363 public async Task ListsUpdate_Test()
365 using (var twitterApi = new TwitterApi())
367 var mock = new Mock<IApiConnection>();
369 x.PostLazyAsync<TwitterList>(
370 new Uri("lists/update.json", UriKind.Relative),
371 new Dictionary<string, string> {
372 { "list_id", "12345" },
373 { "name", "hogehoge" },
374 { "description", "aaaa" },
375 { "mode", "private" },
378 .ReturnsAsync(LazyJson.Create(new TwitterList()));
380 twitterApi.apiConnection = mock.Object;
382 await twitterApi.ListsUpdate(12345L, name: "hogehoge", description: "aaaa", @private: true)
384 .ConfigureAwait(false);
391 public async Task ListsDestroy_Test()
393 using (var twitterApi = new TwitterApi())
395 var mock = new Mock<IApiConnection>();
397 x.PostLazyAsync<TwitterList>(
398 new Uri("lists/destroy.json", UriKind.Relative),
399 new Dictionary<string, string> {
400 { "list_id", "12345" },
403 .ReturnsAsync(LazyJson.Create(new TwitterList()));
405 twitterApi.apiConnection = mock.Object;
407 await twitterApi.ListsDestroy(12345L)
409 .ConfigureAwait(false);
416 public async Task ListsStatuses_Test()
418 using (var twitterApi = new TwitterApi())
420 var mock = new Mock<IApiConnection>();
422 x.GetAsync<TwitterStatus[]>(
423 new Uri("lists/statuses.json", UriKind.Relative),
424 new Dictionary<string, string> {
425 { "list_id", "12345" },
426 { "include_entities", "true" },
427 { "include_ext_alt_text", "true" },
430 { "since_id", "100" },
431 { "include_rts", "true" },
435 .ReturnsAsync(new TwitterStatus[0]);
437 twitterApi.apiConnection = mock.Object;
439 await twitterApi.ListsStatuses(12345L, count: 200, maxId: 900L, sinceId: 100L, includeRTs: true)
440 .ConfigureAwait(false);
447 public async Task ListsMembers_Test()
449 using (var twitterApi = new TwitterApi())
451 var mock = new Mock<IApiConnection>();
453 x.GetAsync<TwitterUsers>(
454 new Uri("lists/members.json", UriKind.Relative),
455 new Dictionary<string, string> {
456 { "list_id", "12345" },
457 { "include_entities", "true" },
458 { "include_ext_alt_text", "true" },
463 .ReturnsAsync(new TwitterUsers());
465 twitterApi.apiConnection = mock.Object;
467 await twitterApi.ListsMembers(12345L, cursor: -1)
468 .ConfigureAwait(false);
475 public async Task ListsMembersShow_Test()
477 using (var twitterApi = new TwitterApi())
479 var mock = new Mock<IApiConnection>();
481 x.GetAsync<TwitterUser>(
482 new Uri("lists/members/show.json", UriKind.Relative),
483 new Dictionary<string, string> {
484 { "list_id", "12345" },
485 { "screen_name", "twitterapi" },
486 { "include_entities", "true" },
487 { "include_ext_alt_text", "true" },
489 "/lists/members/show")
491 .ReturnsAsync(new TwitterUser());
493 twitterApi.apiConnection = mock.Object;
495 await twitterApi.ListsMembersShow(12345L, "twitterapi")
496 .ConfigureAwait(false);
503 public async Task DirectMessagesRecv_Test()
505 using (var twitterApi = new TwitterApi())
507 var mock = new Mock<IApiConnection>();
509 x.GetAsync<TwitterDirectMessage[]>(
510 new Uri("direct_messages.json", UriKind.Relative),
511 new Dictionary<string, string> {
512 { "full_text", "true" },
513 { "include_entities", "true" },
514 { "include_ext_alt_text", "true" },
517 { "since_id", "100" },
521 .ReturnsAsync(new TwitterDirectMessage[0]);
523 twitterApi.apiConnection = mock.Object;
525 await twitterApi.DirectMessagesRecv(count: 200, maxId: 900L, sinceId: 100L)
526 .ConfigureAwait(false);
533 public async Task DirectMessagesSent_Test()
535 using (var twitterApi = new TwitterApi())
537 var mock = new Mock<IApiConnection>();
539 x.GetAsync<TwitterDirectMessage[]>(
540 new Uri("direct_messages/sent.json", UriKind.Relative),
541 new Dictionary<string, string> {
542 { "full_text", "true" },
543 { "include_entities", "true" },
544 { "include_ext_alt_text", "true" },
547 { "since_id", "100" },
549 "/direct_messages/sent")
551 .ReturnsAsync(new TwitterDirectMessage[0]);
553 twitterApi.apiConnection = mock.Object;
555 await twitterApi.DirectMessagesSent(count: 200, maxId: 900L, sinceId: 100L)
556 .ConfigureAwait(false);
563 public async Task DirectMessagesNew_Test()
565 using (var twitterApi = new TwitterApi())
567 var mock = new Mock<IApiConnection>();
569 x.PostLazyAsync<TwitterDirectMessage>(
570 new Uri("direct_messages/new.json", UriKind.Relative),
571 new Dictionary<string, string> {
572 { "text", "hogehoge" },
573 { "screen_name", "opentween" },
576 .ReturnsAsync(LazyJson.Create(new TwitterDirectMessage()));
578 twitterApi.apiConnection = mock.Object;
580 await twitterApi.DirectMessagesNew("hogehoge", "opentween")
582 .ConfigureAwait(false);
589 public async Task DirectMessagesDestroy_Test()
591 using (var twitterApi = new TwitterApi())
593 var mock = new Mock<IApiConnection>();
595 x.PostLazyAsync<TwitterDirectMessage>(
596 new Uri("direct_messages/destroy.json", UriKind.Relative),
597 new Dictionary<string, string> { { "id", "100" } })
599 .ReturnsAsync(LazyJson.Create(new TwitterDirectMessage { Id = 100L }));
601 twitterApi.apiConnection = mock.Object;
603 await twitterApi.DirectMessagesDestroy(statusId: 100L)
605 .ConfigureAwait(false);
612 public async Task UsersShow_Test()
614 using (var twitterApi = new TwitterApi())
616 var mock = new Mock<IApiConnection>();
618 x.GetAsync<TwitterUser>(
619 new Uri("users/show.json", UriKind.Relative),
620 new Dictionary<string, string> {
621 { "screen_name", "twitterapi" },
622 { "include_entities", "true" },
623 { "include_ext_alt_text", "true" },
627 .ReturnsAsync(new TwitterUser { ScreenName = "twitterapi" });
629 twitterApi.apiConnection = mock.Object;
631 await twitterApi.UsersShow(screenName: "twitterapi")
632 .ConfigureAwait(false);
639 public async Task UsersReportSpam_Test()
641 using (var twitterApi = new TwitterApi())
643 var mock = new Mock<IApiConnection>();
645 x.PostLazyAsync<TwitterUser>(
646 new Uri("users/report_spam.json", UriKind.Relative),
647 new Dictionary<string, string> { { "screen_name", "twitterapi" } })
649 .ReturnsAsync(LazyJson.Create(new TwitterUser { ScreenName = "twitterapi" }));
651 twitterApi.apiConnection = mock.Object;
653 await twitterApi.UsersReportSpam(screenName: "twitterapi")
655 .ConfigureAwait(false);
662 public async Task FavoritesCreate_Test()
664 using (var twitterApi = new TwitterApi())
666 var mock = new Mock<IApiConnection>();
668 x.PostLazyAsync<TwitterStatus>(
669 new Uri("favorites/create.json", UriKind.Relative),
670 new Dictionary<string, string> { { "id", "100" } })
672 .ReturnsAsync(LazyJson.Create(new TwitterStatus { Id = 100L }));
674 twitterApi.apiConnection = mock.Object;
676 await twitterApi.FavoritesCreate(statusId: 100L)
678 .ConfigureAwait(false);
685 public async Task FavoritesDestroy_Test()
687 using (var twitterApi = new TwitterApi())
689 var mock = new Mock<IApiConnection>();
691 x.PostLazyAsync<TwitterStatus>(
692 new Uri("favorites/destroy.json", UriKind.Relative),
693 new Dictionary<string, string> { { "id", "100" } })
695 .ReturnsAsync(LazyJson.Create(new TwitterStatus { Id = 100L }));
697 twitterApi.apiConnection = mock.Object;
699 await twitterApi.FavoritesDestroy(statusId: 100L)
701 .ConfigureAwait(false);
708 public async Task FriendshipsShow_Test()
710 using (var twitterApi = new TwitterApi())
712 var mock = new Mock<IApiConnection>();
714 x.GetAsync<TwitterFriendship>(
715 new Uri("friendships/show.json", UriKind.Relative),
716 new Dictionary<string, string> { { "source_screen_name", "twitter" }, { "target_screen_name", "twitterapi" } },
719 .ReturnsAsync(new TwitterFriendship());
721 twitterApi.apiConnection = mock.Object;
723 await twitterApi.FriendshipsShow(sourceScreenName: "twitter", targetScreenName: "twitterapi")
724 .ConfigureAwait(false);
731 public async Task FriendshipsCreate_Test()
733 using (var twitterApi = new TwitterApi())
735 var mock = new Mock<IApiConnection>();
737 x.PostLazyAsync<TwitterFriendship>(
738 new Uri("friendships/create.json", UriKind.Relative),
739 new Dictionary<string, string> { { "screen_name", "twitterapi" } })
741 .ReturnsAsync(LazyJson.Create(new TwitterFriendship()));
743 twitterApi.apiConnection = mock.Object;
745 await twitterApi.FriendshipsCreate(screenName: "twitterapi")
747 .ConfigureAwait(false);
754 public async Task FriendshipsDestroy_Test()
756 using (var twitterApi = new TwitterApi())
758 var mock = new Mock<IApiConnection>();
760 x.PostLazyAsync<TwitterFriendship>(
761 new Uri("friendships/destroy.json", UriKind.Relative),
762 new Dictionary<string, string> { { "screen_name", "twitterapi" } })
764 .ReturnsAsync(LazyJson.Create(new TwitterFriendship()));
766 twitterApi.apiConnection = mock.Object;
768 await twitterApi.FriendshipsDestroy(screenName: "twitterapi")
770 .ConfigureAwait(false);
777 public async Task NoRetweetIds_Test()
779 using (var twitterApi = new TwitterApi())
781 var mock = new Mock<IApiConnection>();
784 new Uri("friendships/no_retweets/ids.json", UriKind.Relative),
786 "/friendships/no_retweets/ids")
788 .ReturnsAsync(new long[0]);
790 twitterApi.apiConnection = mock.Object;
792 await twitterApi.NoRetweetIds()
793 .ConfigureAwait(false);
800 public async Task FollowersIds_Test()
802 using (var twitterApi = new TwitterApi())
804 var mock = new Mock<IApiConnection>();
806 x.GetAsync<TwitterIds>(
807 new Uri("followers/ids.json", UriKind.Relative),
808 new Dictionary<string, string> { { "cursor", "-1" } },
811 .ReturnsAsync(new TwitterIds());
813 twitterApi.apiConnection = mock.Object;
815 await twitterApi.FollowersIds(cursor: -1L)
816 .ConfigureAwait(false);
823 public async Task MutesUsersIds_Test()
825 using (var twitterApi = new TwitterApi())
827 var mock = new Mock<IApiConnection>();
829 x.GetAsync<TwitterIds>(
830 new Uri("mutes/users/ids.json", UriKind.Relative),
831 new Dictionary<string, string> { { "cursor", "-1" } },
834 .ReturnsAsync(new TwitterIds());
836 twitterApi.apiConnection = mock.Object;
838 await twitterApi.MutesUsersIds(cursor: -1L)
839 .ConfigureAwait(false);
846 public async Task BlocksIds_Test()
848 using (var twitterApi = new TwitterApi())
850 var mock = new Mock<IApiConnection>();
852 x.GetAsync<TwitterIds>(
853 new Uri("blocks/ids.json", UriKind.Relative),
854 new Dictionary<string, string> { { "cursor", "-1" } },
857 .ReturnsAsync(new TwitterIds());
859 twitterApi.apiConnection = mock.Object;
861 await twitterApi.BlocksIds(cursor: -1L)
862 .ConfigureAwait(false);
869 public async Task BlocksCreate_Test()
871 using (var twitterApi = new TwitterApi())
873 var mock = new Mock<IApiConnection>();
875 x.PostLazyAsync<TwitterUser>(
876 new Uri("blocks/create.json", UriKind.Relative),
877 new Dictionary<string, string> { { "screen_name", "twitterapi" } })
879 .ReturnsAsync(LazyJson.Create(new TwitterUser()));
881 twitterApi.apiConnection = mock.Object;
883 await twitterApi.BlocksCreate(screenName: "twitterapi")
885 .ConfigureAwait(false);
892 public async Task BlocksDestroy_Test()
894 using (var twitterApi = new TwitterApi())
896 var mock = new Mock<IApiConnection>();
898 x.PostLazyAsync<TwitterUser>(
899 new Uri("blocks/destroy.json", UriKind.Relative),
900 new Dictionary<string, string> { { "screen_name", "twitterapi" } })
902 .ReturnsAsync(LazyJson.Create(new TwitterUser()));
904 twitterApi.apiConnection = mock.Object;
906 await twitterApi.BlocksDestroy(screenName: "twitterapi")
908 .ConfigureAwait(false);
915 public async Task AccountUpdateProfile_Test()
917 using (var twitterApi = new TwitterApi())
919 var mock = new Mock<IApiConnection>();
921 x.PostLazyAsync<TwitterUser>(
922 new Uri("account/update_profile.json", UriKind.Relative),
923 new Dictionary<string, string> {
924 { "include_entities", "true" },
925 { "include_ext_alt_text", "true" },
927 { "url", "http://example.com/" },
928 { "location", "Location" },
929 { "description", "<script>alert(1)</script>" },
932 .ReturnsAsync(LazyJson.Create(new TwitterUser()));
934 twitterApi.apiConnection = mock.Object;
936 await twitterApi.AccountUpdateProfile(name: "Name", url: "http://example.com/", location: "Location", description: "<script>alert(1)</script>")
938 .ConfigureAwait(false);
945 public async Task AccountUpdateProfileImage_Test()
947 using (var twitterApi = new TwitterApi())
948 using (var image = TestUtils.CreateDummyImage())
949 using (var media = new MemoryImageMediaItem(image))
951 var mock = new Mock<IApiConnection>();
953 x.PostLazyAsync<TwitterUser>(
954 new Uri("account/update_profile_image.json", UriKind.Relative),
955 new Dictionary<string, string> {
956 { "include_entities", "true" },
957 { "include_ext_alt_text", "true" },
959 new Dictionary<string, IMediaItem> { { "image", media } })
961 .ReturnsAsync(LazyJson.Create(new TwitterUser()));
963 twitterApi.apiConnection = mock.Object;
965 await twitterApi.AccountUpdateProfileImage(media)
967 .ConfigureAwait(false);
974 public async Task ApplicationRateLimitStatus_Test()
976 using (var twitterApi = new TwitterApi())
978 var mock = new Mock<IApiConnection>();
980 x.GetAsync<TwitterRateLimits>(
981 new Uri("application/rate_limit_status.json", UriKind.Relative),
983 "/application/rate_limit_status")
985 .ReturnsAsync(new TwitterRateLimits());
987 twitterApi.apiConnection = mock.Object;
989 await twitterApi.ApplicationRateLimitStatus()
990 .ConfigureAwait(false);
997 public async Task Configuration_Test()
999 using (var twitterApi = new TwitterApi())
1001 var mock = new Mock<IApiConnection>();
1003 x.GetAsync<TwitterConfiguration>(
1004 new Uri("help/configuration.json", UriKind.Relative),
1006 "/help/configuration")
1008 .ReturnsAsync(new TwitterConfiguration());
1010 twitterApi.apiConnection = mock.Object;
1012 await twitterApi.Configuration()
1013 .ConfigureAwait(false);
1020 public async Task MediaUpload_Test()
1022 using (var twitterApi = new TwitterApi())
1023 using (var image = TestUtils.CreateDummyImage())
1024 using (var media = new MemoryImageMediaItem(image))
1026 var mock = new Mock<IApiConnection>();
1028 x.PostLazyAsync<TwitterUploadMediaResult>(
1029 new Uri("https://upload.twitter.com/1.1/media/upload.json", UriKind.Absolute),
1031 new Dictionary<string, IMediaItem> { { "media", media } })
1033 .ReturnsAsync(LazyJson.Create(new TwitterUploadMediaResult()));
1035 twitterApi.apiConnection = mock.Object;
1037 await twitterApi.MediaUpload(media)
1039 .ConfigureAwait(false);
1046 public async Task UserStreams_Test()
1048 using (var twitterApi = new TwitterApi())
1050 var mock = new Mock<IApiConnection>();
1053 new Uri("https://userstream.twitter.com/1.1/user.json", UriKind.Absolute),
1054 new Dictionary<string, string> {
1055 { "replies", "all" },
1056 { "track", "OpenTween" },
1059 .ReturnsAsync(new MemoryStream());
1061 twitterApi.apiConnection = mock.Object;
1063 var stream = await twitterApi.UserStreams(replies: "all", track: "OpenTween")
1064 .ConfigureAwait(false);