OSDN Git Service

IApiConnectionLegacy.PostJsonAsyncを使用している箇所をPostJsonRequestに移行
authorKimura Youichi <kim.upsilon@bucyou.net>
Mon, 11 Dec 2023 16:24:24 +0000 (01:24 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Mon, 11 Dec 2023 17:09:50 +0000 (02:09 +0900)
OpenTween.Tests/Api/TwitterApiTest.cs
OpenTween/Api/TwitterApi.cs
OpenTween/Connection/ApiResponse.cs

index 1fde2e5..87df711 100644 (file)
@@ -23,6 +23,7 @@ using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
+using System.Net;
 using System.Net.Http;
 using System.Reflection;
 using System.Runtime.InteropServices;
@@ -674,8 +675,9 @@ namespace OpenTween.Api
         [Fact]
         public async Task DirectMessagesEventsNew_Test()
         {
+            using var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);
             var mock = new Mock<IApiConnectionLegacy>();
-            var responseText = """
+            var requestJson = """
                 {
                   "event": {
                     "type": "message_create",
@@ -697,11 +699,14 @@ namespace OpenTween.Api
                 }
                 """;
             mock.Setup(x =>
-                x.PostJsonAsync<TwitterMessageEventSingle>(
-                    new Uri("direct_messages/events/new.json", UriKind.Relative),
-                    responseText)
+                x.SendAsync(
+                    It.Is<PostJsonRequest>(r =>
+                        r.RequestUri == new Uri("direct_messages/events/new.json", UriKind.Relative) &&
+                        r.JsonString == requestJson
+                    )
+                )
             )
-            .ReturnsAsync(LazyJson.Create(new TwitterMessageEventSingle()));
+            .ReturnsAsync(new ApiResponse(responseMessage));
 
             using var twitterApi = new TwitterApi();
             twitterApi.ApiConnection = mock.Object;
@@ -1304,11 +1309,13 @@ namespace OpenTween.Api
         {
             var mock = new Mock<IApiConnectionLegacy>();
             mock.Setup(x =>
-                x.PostJsonAsync(
-                    new Uri("https://upload.twitter.com/1.1/media/metadata/create.json", UriKind.Absolute),
-                    """{"media_id": "12345", "alt_text": {"text": "hogehoge"}}""")
-            )
-            .ReturnsAsync("");
+                x.SendAsync(
+                    It.Is<PostJsonRequest>(r =>
+                        r.RequestUri == new Uri("https://upload.twitter.com/1.1/media/metadata/create.json") &&
+                        r.JsonString == """{"media_id": "12345", "alt_text": {"text": "hogehoge"}}"""
+                    )
+                )
+            );
 
             using var twitterApi = new TwitterApi();
             twitterApi.ApiConnection = mock.Object;
index 6614555..e3d3be4 100644 (file)
@@ -425,10 +425,8 @@ namespace OpenTween.Api
             return this.Connection.GetAsync<TwitterMessageEventList>(endpoint, param, "/direct_messages/events/list");
         }
 
-        public Task<LazyJson<TwitterMessageEventSingle>> DirectMessagesEventsNew(long recipientId, string text, long? mediaId = null)
+        public async Task<LazyJson<TwitterMessageEventSingle>> DirectMessagesEventsNew(long recipientId, string text, long? mediaId = null)
         {
-            var endpoint = new Uri("direct_messages/events/new.json", UriKind.Relative);
-
             var attachment = "";
             if (mediaId != null)
             {
@@ -458,7 +456,16 @@ namespace OpenTween.Api
                 }
                 """;
 
-            return this.Connection.PostJsonAsync<TwitterMessageEventSingle>(endpoint, json);
+            var request = new PostJsonRequest
+            {
+                RequestUri = new("direct_messages/events/new.json", UriKind.Relative),
+                JsonString = json,
+            };
+
+            var response = await this.Connection.SendAsync(request)
+                .ConfigureAwait(false);
+
+            return response.ReadAsLazyJson<TwitterMessageEventSingle>();
         }
 
         public Task DirectMessagesEventsDestroy(TwitterDirectMessageId eventId)
@@ -792,14 +799,18 @@ namespace OpenTween.Api
             return this.Connection.GetAsync<TwitterUploadMediaResult>(endpoint, param, endpointName: null);
         }
 
-        public Task MediaMetadataCreate(long mediaId, string altText)
+        public async Task MediaMetadataCreate(long mediaId, string altText)
         {
-            var endpoint = new Uri("https://upload.twitter.com/1.1/media/metadata/create.json");
-
             var escapedAltText = JsonUtils.EscapeJsonString(altText);
-            var json = $$$"""{"media_id": "{{{mediaId}}}", "alt_text": {"text": "{{{escapedAltText}}}"}}""";
+            var request = new PostJsonRequest
+            {
+                RequestUri = new("https://upload.twitter.com/1.1/media/metadata/create.json"),
+                JsonString = $$$"""{"media_id": "{{{mediaId}}}", "alt_text": {"text": "{{{escapedAltText}}}"}}""",
+            };
 
-            return this.Connection.PostJsonAsync(endpoint, json);
+            await this.Connection.SendAsync(request)
+                .IgnoreResponse()
+                .ConfigureAwait(false);
         }
 
         public OAuthEchoHandler CreateOAuthEchoHandler(HttpMessageHandler innerHandler, Uri authServiceProvider, Uri? realm = null)
index ee15600..da03230 100644 (file)
@@ -114,4 +114,13 @@ namespace OpenTween.Connection
                 .ConfigureAwait(false);
         }
     }
+
+    public static class ApiResponseTaskExtension
+    {
+        public static async Task IgnoreResponse(this Task<ApiResponse> task)
+        {
+            using var response = await task.ConfigureAwait(false);
+            // レスポンスボディを読み込まず破棄する
+        }
+    }
 }