OSDN Git Service

GraphQL関連のリクエストにPostJsonRequestクラスを使用する
authorKimura Youichi <kim.upsilon@bucyou.net>
Sun, 10 Dec 2023 09:28:28 +0000 (18:28 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sun, 10 Dec 2023 10:19:34 +0000 (19:19 +0900)
OpenTween.Tests/Api/GraphQL/CreateRetweetRequestTest.cs
OpenTween.Tests/Api/GraphQL/CreateTweetRequestTest.cs
OpenTween.Tests/Api/GraphQL/DeleteRetweetRequestTest.cs
OpenTween.Tests/Api/GraphQL/DeleteTweetRequestTest.cs
OpenTween.Tests/OpenTween.Tests.csproj
OpenTween.Tests/Resources/Responses/DeleteRetweet.json [new file with mode: 0644]
OpenTween.Tests/Resources/Responses/DeleteTweet.json [new file with mode: 0644]
OpenTween/Api/GraphQL/CreateRetweetRequest.cs
OpenTween/Api/GraphQL/CreateTweetRequest.cs
OpenTween/Api/GraphQL/DeleteRetweetRequest.cs
OpenTween/Api/GraphQL/DeleteTweetRequest.cs

index 5fee385..233fd01 100644 (file)
 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
 // Boston, MA 02110-1301, USA.
 
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
 using Moq;
 using OpenTween.Connection;
@@ -36,18 +31,19 @@ namespace OpenTween.Api.GraphQL
         [Fact]
         public async Task Send_Test()
         {
-            var responseText = File.ReadAllText("Resources/Responses/CreateRetweet.json");
+            using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/CreateRetweet.json");
 
-            var mock = new Mock<IApiConnectionLegacy>();
+            var mock = new Mock<IApiConnection>();
             mock.Setup(x =>
-                    x.PostJsonAsync(It.IsAny<Uri>(), It.IsAny<string>())
+                    x.SendAsync(It.IsAny<IHttpRequest>())
                 )
-                .Callback<Uri, string>((url, json) =>
+                .Callback<IHttpRequest>(x =>
                 {
-                    Assert.Equal(new("https://twitter.com/i/api/graphql/ojPdsZsimiJrUGLR1sjUtA/CreateRetweet"), url);
-                    Assert.Contains(@"""tweet_id"":""12345""", json);
+                    var request = Assert.IsType<PostJsonRequest>(x);
+                    Assert.Equal(new("https://twitter.com/i/api/graphql/ojPdsZsimiJrUGLR1sjUtA/CreateRetweet"), request.RequestUri);
+                    Assert.Contains(@"""tweet_id"":""12345""", request.JsonString);
                 })
-                .ReturnsAsync(responseText);
+                .ReturnsAsync(apiResponse);
 
             var request = new CreateRetweetRequest
             {
index ad08aec..b01e95a 100644 (file)
 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
 // Boston, MA 02110-1301, USA.
 
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
 using Moq;
 using OpenTween.Connection;
@@ -36,20 +31,21 @@ namespace OpenTween.Api.GraphQL
         [Fact]
         public async Task Send_Test()
         {
-            var responseText = File.ReadAllText("Resources/Responses/CreateTweet_CircleTweet.json");
+            using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/CreateTweet_CircleTweet.json");
 
-            var mock = new Mock<IApiConnectionLegacy>();
+            var mock = new Mock<IApiConnection>();
             mock.Setup(x =>
-                    x.PostJsonAsync(It.IsAny<Uri>(), It.IsAny<string>())
+                    x.SendAsync(It.IsAny<IHttpRequest>())
                 )
-                .Callback<Uri, string>((url, json) =>
+                .Callback<IHttpRequest>(x =>
                 {
-                    Assert.Equal(new("https://twitter.com/i/api/graphql/tTsjMKyhajZvK4q76mpIBg/CreateTweet"), url);
-                    Assert.Contains(@"""tweet_text"":""tetete""", json);
-                    Assert.DoesNotContain(@"""reply"":", json);
-                    Assert.DoesNotContain(@"""media"":", json);
+                    var request = Assert.IsType<PostJsonRequest>(x);
+                    Assert.Equal(new("https://twitter.com/i/api/graphql/tTsjMKyhajZvK4q76mpIBg/CreateTweet"), request.RequestUri);
+                    Assert.Contains(@"""tweet_text"":""tetete""", request.JsonString);
+                    Assert.DoesNotContain(@"""reply"":", request.JsonString);
+                    Assert.DoesNotContain(@"""media"":", request.JsonString);
                 })
-                .ReturnsAsync(responseText);
+                .ReturnsAsync(apiResponse);
 
             var request = new CreateTweetRequest
             {
@@ -65,17 +61,18 @@ namespace OpenTween.Api.GraphQL
         [Fact]
         public async Task Send_ReplyTest()
         {
-            var responseText = File.ReadAllText("Resources/Responses/CreateTweet_CircleTweet.json");
+            using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/CreateTweet_CircleTweet.json");
 
-            var mock = new Mock<IApiConnectionLegacy>();
+            var mock = new Mock<IApiConnection>();
             mock.Setup(x =>
-                    x.PostJsonAsync(It.IsAny<Uri>(), It.IsAny<string>())
+                    x.SendAsync(It.IsAny<IHttpRequest>())
                 )
-                .Callback<Uri, string>((url, json) =>
+                .Callback<IHttpRequest>(x =>
                 {
-                    Assert.Contains(@"""reply"":{""exclude_reply_user_ids"":[""11111"",""22222""],""in_reply_to_tweet_id"":""12345""}", json);
+                    var request = Assert.IsType<PostJsonRequest>(x);
+                    Assert.Contains(@"""reply"":{""exclude_reply_user_ids"":[""11111"",""22222""],""in_reply_to_tweet_id"":""12345""}", request.JsonString);
                 })
-                .ReturnsAsync(responseText);
+                .ReturnsAsync(apiResponse);
 
             var request = new CreateTweetRequest
             {
@@ -90,17 +87,18 @@ namespace OpenTween.Api.GraphQL
         [Fact]
         public async Task Send_MediaTest()
         {
-            var responseText = File.ReadAllText("Resources/Responses/CreateTweet_CircleTweet.json");
+            using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/CreateTweet_CircleTweet.json");
 
-            var mock = new Mock<IApiConnectionLegacy>();
+            var mock = new Mock<IApiConnection>();
             mock.Setup(x =>
-                    x.PostJsonAsync(It.IsAny<Uri>(), It.IsAny<string>())
+                    x.SendAsync(It.IsAny<IHttpRequest>())
                 )
-                .Callback<Uri, string>((url, json) =>
+                .Callback<IHttpRequest>(x =>
                 {
-                    Assert.Contains(@"""media"":{""media_entities"":[{""media_id"":""11111"",""tagged_users"":[]},{""media_id"":""22222"",""tagged_users"":[]}],""possibly_sensitive"":false}", json);
+                    var request = Assert.IsType<PostJsonRequest>(x);
+                    Assert.Contains(@"""media"":{""media_entities"":[{""media_id"":""11111"",""tagged_users"":[]},{""media_id"":""22222"",""tagged_users"":[]}],""possibly_sensitive"":false}", request.JsonString);
                 })
-                .ReturnsAsync(responseText);
+                .ReturnsAsync(apiResponse);
 
             var request = new CreateTweetRequest
             {
index 9a52489..eceafb8 100644 (file)
 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
 // Boston, MA 02110-1301, USA.
 
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
 using Moq;
 using OpenTween.Connection;
@@ -36,15 +31,19 @@ namespace OpenTween.Api.GraphQL
         [Fact]
         public async Task Send_Test()
         {
-            var mock = new Mock<IApiConnectionLegacy>();
+            using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/DeleteRetweet.json");
+
+            var mock = new Mock<IApiConnection>();
             mock.Setup(x =>
-                    x.PostJsonAsync(It.IsAny<Uri>(), It.IsAny<string>())
+                    x.SendAsync(It.IsAny<IHttpRequest>())
                 )
-                .Callback<Uri, string>((url, json) =>
+                .Callback<IHttpRequest>(x =>
                 {
-                    Assert.Equal(new("https://twitter.com/i/api/graphql/iQtK4dl5hBmXewYZuEOKVw/DeleteRetweet"), url);
-                    Assert.Contains(@"""source_tweet_id"":""12345""", json);
-                });
+                    var request = Assert.IsType<PostJsonRequest>(x);
+                    Assert.Equal(new("https://twitter.com/i/api/graphql/iQtK4dl5hBmXewYZuEOKVw/DeleteRetweet"), request.RequestUri);
+                    Assert.Contains(@"""source_tweet_id"":""12345""", request.JsonString);
+                })
+                .ReturnsAsync(apiResponse);
 
             var request = new DeleteRetweetRequest
             {
index 3db62cc..6cd2580 100644 (file)
 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
 // Boston, MA 02110-1301, USA.
 
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
 using Moq;
 using OpenTween.Connection;
@@ -36,15 +31,19 @@ namespace OpenTween.Api.GraphQL
         [Fact]
         public async Task Send_Test()
         {
-            var mock = new Mock<IApiConnectionLegacy>();
+            using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/DeleteTweet.json");
+
+            var mock = new Mock<IApiConnection>();
             mock.Setup(x =>
-                    x.PostJsonAsync(It.IsAny<Uri>(), It.IsAny<string>())
+                    x.SendAsync(It.IsAny<IHttpRequest>())
                 )
-                .Callback<Uri, string>((url, json) =>
+                .Callback<IHttpRequest>(x =>
                 {
-                    Assert.Equal(new("https://twitter.com/i/api/graphql/VaenaVgh5q5ih7kvyVjgtg/DeleteTweet"), url);
-                    Assert.Contains(@"""tweet_id"":""12345""", json);
-                });
+                    var request = Assert.IsType<PostJsonRequest>(x);
+                    Assert.Equal(new("https://twitter.com/i/api/graphql/VaenaVgh5q5ih7kvyVjgtg/DeleteTweet"), request.RequestUri);
+                    Assert.Contains(@"""tweet_id"":""12345""", request.JsonString);
+                })
+                .ReturnsAsync(apiResponse);
 
             var request = new DeleteTweetRequest
             {
index 70754bd..dbaad23 100644 (file)
     <None Update="Resources\Responses\CreateTweet_CircleTweet.json">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Update="Resources\Responses\DeleteRetweet.json">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Update="Resources\Responses\DeleteTweet.json">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Update="Resources\Responses\Error_NotFound.json">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
diff --git a/OpenTween.Tests/Resources/Responses/DeleteRetweet.json b/OpenTween.Tests/Resources/Responses/DeleteRetweet.json
new file mode 100644 (file)
index 0000000..f125b04
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "data": {
+    "unretweet": {
+      "source_tweet_results": {
+        "result": {
+          "rest_id": "1234567890123456789",
+          "legacy": {
+            "full_text": "foo"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/OpenTween.Tests/Resources/Responses/DeleteTweet.json b/OpenTween.Tests/Resources/Responses/DeleteTweet.json
new file mode 100644 (file)
index 0000000..919d638
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "data": {
+    "delete_tweet": {
+      "tweet_results": {}
+    }
+  }
+}
index 35b5060..16df55b 100644 (file)
 #nullable enable
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Runtime.Serialization.Json;
-using System.Text;
 using System.Threading.Tasks;
-using System.Xml;
-using System.Xml.Linq;
 using System.Xml.XPath;
 using OpenTween.Connection;
 using OpenTween.Models;
@@ -49,14 +42,20 @@ namespace OpenTween.Api.GraphQL
             """;
         }
 
-        public async Task<TwitterStatusId> Send(IApiConnectionLegacy apiConnection)
+        public async Task<TwitterStatusId> Send(IApiConnection apiConnection)
         {
-            var json = this.CreateRequestBody();
-            var response = await apiConnection.PostJsonAsync(EndpointUri, json);
-            var responseBytes = Encoding.UTF8.GetBytes(response);
-            using var jsonReader = JsonReaderWriterFactory.CreateJsonReader(responseBytes, XmlDictionaryReaderQuotas.Max);
+            var request = new PostJsonRequest
+            {
+                RequestUri = EndpointUri,
+                JsonString = this.CreateRequestBody(),
+            };
+
+            using var response = await apiConnection.SendAsync(request)
+                .ConfigureAwait(false);
+
+            var rootElm = await response.ReadAsJsonXml()
+                .ConfigureAwait(false);
 
-            var rootElm = XElement.Load(jsonReader);
             ErrorResponse.ThrowIfError(rootElm);
 
             var tweetIdStr = rootElm.XPathSelectElement("/data/create_retweet/retweet_results/result/rest_id")?.Value ?? throw CreateParseError();
index 46e1075..5caf3ac 100644 (file)
 
 using System;
 using System.Collections.Generic;
-using System.IO;
 using System.Linq;
 using System.Runtime.Serialization;
-using System.Runtime.Serialization.Json;
-using System.Text;
 using System.Threading.Tasks;
-using System.Xml;
-using System.Xml.Linq;
 using System.Xml.XPath;
 using OpenTween.Api.DataModel;
 using OpenTween.Connection;
@@ -153,14 +148,20 @@ namespace OpenTween.Api.GraphQL
             return JsonUtils.SerializeJsonByDataContract(body);
         }
 
-        public async Task<TwitterStatus> Send(IApiConnectionLegacy apiConnection)
+        public async Task<TwitterStatus> Send(IApiConnection apiConnection)
         {
-            var json = this.CreateRequestBody();
-            var response = await apiConnection.PostJsonAsync(EndpointUri, json);
-            var responseBytes = Encoding.UTF8.GetBytes(response);
-            using var jsonReader = JsonReaderWriterFactory.CreateJsonReader(responseBytes, XmlDictionaryReaderQuotas.Max);
+            var request = new PostJsonRequest
+            {
+                RequestUri = EndpointUri,
+                JsonString = this.CreateRequestBody(),
+            };
+
+            using var response = await apiConnection.SendAsync(request)
+                .ConfigureAwait(false);
+
+            var rootElm = await response.ReadAsJsonXml()
+                .ConfigureAwait(false);
 
-            var rootElm = XElement.Load(jsonReader);
             ErrorResponse.ThrowIfError(rootElm);
 
             var tweetElm = rootElm.XPathSelectElement("/data/create_tweet/tweet_results/result") ?? throw CreateParseError();
index 00a0b83..500ed37 100644 (file)
 #nullable enable
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
 using OpenTween.Connection;
 using OpenTween.Models;
@@ -45,11 +41,21 @@ namespace OpenTween.Api.GraphQL
             """;
         }
 
-        public async Task Send(IApiConnectionLegacy apiConnection)
+        public async Task Send(IApiConnection apiConnection)
         {
-            var json = this.CreateRequestBody();
-            var responseText = await apiConnection.PostJsonAsync(EndpointUri, json);
-            ErrorResponse.ThrowIfError(responseText);
+            var request = new PostJsonRequest
+            {
+                RequestUri = EndpointUri,
+                JsonString = this.CreateRequestBody(),
+            };
+
+            using var response = await apiConnection.SendAsync(request)
+                .ConfigureAwait(false);
+
+            var rootElm = await response.ReadAsJsonXml()
+                .ConfigureAwait(false);
+
+            ErrorResponse.ThrowIfError(rootElm);
         }
     }
 }
index adccace..db3b28c 100644 (file)
 #nullable enable
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
 using OpenTween.Connection;
 using OpenTween.Models;
@@ -45,11 +41,21 @@ namespace OpenTween.Api.GraphQL
             """;
         }
 
-        public async Task Send(IApiConnectionLegacy apiConnection)
+        public async Task Send(IApiConnection apiConnection)
         {
-            var json = this.CreateRequestBody();
-            var responseText = await apiConnection.PostJsonAsync(EndpointUri, json);
-            ErrorResponse.ThrowIfError(responseText);
+            var request = new PostJsonRequest
+            {
+                RequestUri = EndpointUri,
+                JsonString = this.CreateRequestBody(),
+            };
+
+            using var response = await apiConnection.SendAsync(request)
+                .ConfigureAwait(false);
+
+            var rootElm = await response.ReadAsJsonXml()
+                .ConfigureAwait(false);
+
+            ErrorResponse.ThrowIfError(rootElm);
         }
     }
 }