[Fact]
public async Task AccountUpdateProfileImage_Test()
{
+ using var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);
using var image = TestUtils.CreateDummyImage();
using var media = new MemoryImageMediaItem(image);
+
+ Func<PostMultipartRequest, bool> verifyRequest = r =>
+ {
+ Assert.Equal(new("account/update_profile_image.json", UriKind.Relative), r.RequestUri);
+ var expectedQuery = new Dictionary<string, string>
+ {
+ ["include_entities"] = "true",
+ ["include_ext_alt_text"] = "true",
+ ["tweet_mode"] = "extended",
+ };
+ Assert.Equal(expectedQuery, r.Query);
+ var expectedMedia = new Dictionary<string, IMediaItem>
+ {
+ ["image"] = media,
+ };
+ Assert.Equal(expectedMedia, r.Media);
+ return true;
+ };
+
var mock = new Mock<IApiConnectionLegacy>();
mock.Setup(x =>
- x.PostLazyAsync<TwitterUser>(
- new Uri("account/update_profile_image.json", UriKind.Relative),
- new Dictionary<string, string>
- {
- { "include_entities", "true" },
- { "include_ext_alt_text", "true" },
- { "tweet_mode", "extended" },
- },
- new Dictionary<string, IMediaItem> { { "image", media } })
+ x.SendAsync(
+ It.Is<PostMultipartRequest>(r => verifyRequest(r))
+ )
)
- .ReturnsAsync(LazyJson.Create(new TwitterUser()));
+ .ReturnsAsync(new ApiResponse(responseMessage));
using var twitterApi = new TwitterApi();
twitterApi.ApiConnection = mock.Object;
[Fact]
public async Task MediaUploadAppend_Test()
{
+ using var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);
using var image = TestUtils.CreateDummyImage();
using var media = new MemoryImageMediaItem(image);
+
+ Func<PostMultipartRequest, bool> verifyRequest = r =>
+ {
+ Assert.Equal(new("https://upload.twitter.com/1.1/media/upload.json"), r.RequestUri);
+ var expectedQuery = new Dictionary<string, string>
+ {
+ ["command"] = "APPEND",
+ ["media_id"] = "11111",
+ ["segment_index"] = "1",
+ };
+ Assert.Equal(expectedQuery, r.Query);
+ var expectedMedia = new Dictionary<string, IMediaItem>
+ {
+ ["media"] = media,
+ };
+ Assert.Equal(expectedMedia, r.Media);
+ return true;
+ };
+
var mock = new Mock<IApiConnectionLegacy>();
mock.Setup(x =>
- x.PostAsync(
- new Uri("https://upload.twitter.com/1.1/media/upload.json", UriKind.Absolute),
- new Dictionary<string, string>
- {
- { "command", "APPEND" },
- { "media_id", "11111" },
- { "segment_index", "1" },
- },
- new Dictionary<string, IMediaItem> { { "media", media } })
+ x.SendAsync(
+ It.Is<PostMultipartRequest>(r => verifyRequest(r))
+ )
)
- .Returns(Task.CompletedTask);
+ .ReturnsAsync(new ApiResponse(responseMessage));
using var twitterApi = new TwitterApi();
twitterApi.ApiConnection = mock.Object;
return this.Connection.PostLazyAsync<TwitterUser>(endpoint, param);
}
- public Task<LazyJson<TwitterUser>> AccountUpdateProfileImage(IMediaItem image)
+ public async Task<LazyJson<TwitterUser>> AccountUpdateProfileImage(IMediaItem image)
{
- var endpoint = new Uri("account/update_profile_image.json", UriKind.Relative);
- var param = new Dictionary<string, string>
+ var request = new PostMultipartRequest
{
- ["include_entities"] = "true",
- ["include_ext_alt_text"] = "true",
- ["tweet_mode"] = "extended",
- };
- var paramMedia = new Dictionary<string, IMediaItem>
- {
- ["image"] = image,
+ RequestUri = new("account/update_profile_image.json", UriKind.Relative),
+ Query = new Dictionary<string, string>
+ {
+ ["include_entities"] = "true",
+ ["include_ext_alt_text"] = "true",
+ ["tweet_mode"] = "extended",
+ },
+ Media = new Dictionary<string, IMediaItem>
+ {
+ ["image"] = image,
+ },
};
- return this.Connection.PostLazyAsync<TwitterUser>(endpoint, param, paramMedia);
+ using var response = await this.Connection.SendAsync(request)
+ .ConfigureAwait(false);
+
+ return response.ReadAsLazyJson<TwitterUser>();
}
public Task<TwitterRateLimits> ApplicationRateLimitStatus()
return this.Connection.PostLazyAsync<TwitterUploadMediaInit>(endpoint, param);
}
- public Task MediaUploadAppend(long mediaId, int segmentIndex, IMediaItem media)
+ public async Task MediaUploadAppend(long mediaId, int segmentIndex, IMediaItem media)
{
- var endpoint = new Uri("https://upload.twitter.com/1.1/media/upload.json");
- var param = new Dictionary<string, string>
+ var request = new PostMultipartRequest
{
- ["command"] = "APPEND",
- ["media_id"] = mediaId.ToString(),
- ["segment_index"] = segmentIndex.ToString(),
- };
- var paramMedia = new Dictionary<string, IMediaItem>
- {
- ["media"] = media,
+ RequestUri = new("https://upload.twitter.com/1.1/media/upload.json"),
+ Query = new Dictionary<string, string>
+ {
+ ["command"] = "APPEND",
+ ["media_id"] = mediaId.ToString(),
+ ["segment_index"] = segmentIndex.ToString(),
+ },
+ Media = new Dictionary<string, IMediaItem>
+ {
+ ["media"] = media,
+ },
};
- return this.Connection.PostAsync(endpoint, param, paramMedia);
+ await this.Connection.SendAsync(request)
+ .IgnoreResponse()
+ .ConfigureAwait(false);
}
public Task<LazyJson<TwitterUploadMediaResult>> MediaUploadFinalize(long mediaId)