OSDN Git Service

UserByScreenNameの取得に新しいIApiConnectionを使用する
authorKimura Youichi <kim.upsilon@bucyou.net>
Fri, 8 Dec 2023 18:43:37 +0000 (03:43 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Fri, 8 Dec 2023 18:48:44 +0000 (03:48 +0900)
OpenTween.Tests/Api/GraphQL/UserByScreenNameRequestTest.cs
OpenTween/Api/GraphQL/UserByScreenNameRequest.cs

index 9f8ee7d..9c4e287 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,19 +31,21 @@ namespace OpenTween.Api.GraphQL
         [Fact]
         public async Task Send_Test()
         {
-            using var responseStream = File.OpenRead("Resources/Responses/UserByScreenName.json");
+            using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/UserByScreenName.json");
 
-            var mock = new Mock<IApiConnectionLegacy>();
+            var mock = new Mock<IApiConnection>();
             mock.Setup(x =>
-                    x.GetStreamAsync(It.IsAny<Uri>(), It.IsAny<IDictionary<string, string>>(), It.IsAny<string>())
+                    x.SendAsync(It.IsAny<IHttpRequest>())
                 )
-                .Callback<Uri, IDictionary<string, string>, string>((url, param, endpointName) =>
+                .Callback<IHttpRequest>(x =>
                 {
-                    Assert.Equal(new("https://twitter.com/i/api/graphql/xc8f1g7BYqr6VTzTbvNlGw/UserByScreenName"), url);
-                    Assert.Contains(@"""screen_name"":""opentween""", param["variables"]);
-                    Assert.Equal("UserByScreenName", endpointName);
+                    var request = Assert.IsType<GetRequest>(x);
+                    Assert.Equal(new("https://twitter.com/i/api/graphql/xc8f1g7BYqr6VTzTbvNlGw/UserByScreenName"), request.RequestUri);
+                    var query = request.Query!;
+                    Assert.Contains(@"""screen_name"":""opentween""", query["variables"]);
+                    Assert.Equal("UserByScreenName", request.EndpointName);
                 })
-                .ReturnsAsync(responseStream);
+                .ReturnsAsync(apiResponse);
 
             var request = new UserByScreenNameRequest
             {
@@ -64,13 +61,13 @@ namespace OpenTween.Api.GraphQL
         [Fact]
         public async Task Send_UserUnavailableTest()
         {
-            using var responseStream = File.OpenRead("Resources/Responses/UserByScreenName_Suspended.json");
+            using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/UserByScreenName_Suspended.json");
 
-            var mock = new Mock<IApiConnectionLegacy>();
+            var mock = new Mock<IApiConnection>();
             mock.Setup(x =>
-                    x.GetStreamAsync(It.IsAny<Uri>(), It.IsAny<IDictionary<string, string>>(), It.IsAny<string>())
+                    x.SendAsync(It.IsAny<IHttpRequest>())
                 )
-                .ReturnsAsync(responseStream);
+                .ReturnsAsync(apiResponse);
 
             var request = new UserByScreenNameRequest
             {
index b4c04fa..4b3c8cc 100644 (file)
 
 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;
@@ -59,26 +54,20 @@ namespace OpenTween.Api.GraphQL
             };
         }
 
-        public async Task<TwitterGraphqlUser> Send(IApiConnectionLegacy apiConnection)
+        public async Task<TwitterGraphqlUser> Send(IApiConnection apiConnection)
         {
-            var param = this.CreateParameters();
-
-            XElement rootElm;
-            try
-            {
-                using var stream = await apiConnection.GetStreamAsync(EndpointUri, param, EndpointName);
-                using var jsonReader = JsonReaderWriterFactory.CreateJsonReader(stream, XmlDictionaryReaderQuotas.Max);
-                rootElm = XElement.Load(jsonReader);
-            }
-            catch (IOException ex)
-            {
-                throw new WebApiException("IO Error", ex);
-            }
-            catch (NotSupportedException ex)
+            var request = new GetRequest
             {
-                // NotSupportedException: Stream does not support reading. のエラーが時々報告される
-                throw new WebApiException("Stream Error", ex);
-            }
+                RequestUri = EndpointUri,
+                Query = this.CreateParameters(),
+                EndpointName = EndpointName,
+            };
+
+            using var response = await apiConnection.SendAsync(request)
+                .ConfigureAwait(false);
+
+            var rootElm = await response.ReadAsJsonXml()
+                .ConfigureAwait(false);
 
             ErrorResponse.ThrowIfError(rootElm);