OSDN Git Service

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

index 44aebf5..e88f823 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.Api.TwitterV2;
 using OpenTween.Connection;
 using Xunit;
 
@@ -37,19 +32,21 @@ namespace OpenTween.Api.GraphQL
         [Fact]
         public async Task Send_Test()
         {
-            using var responseStream = File.OpenRead("Resources/Responses/TweetDetail.json");
+            using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/TweetDetail.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/-Ls3CrSQNo2fRKH6i6Na1A/TweetDetail"), url);
-                    Assert.Contains(@"""focalTweetId"":""1619433164757413894""", param["variables"]);
-                    Assert.Equal("TweetDetail", endpointName);
+                    var request = Assert.IsType<GetRequest>(x);
+                    Assert.Equal(new("https://twitter.com/i/api/graphql/-Ls3CrSQNo2fRKH6i6Na1A/TweetDetail"), request.RequestUri);
+                    var query = request.Query!;
+                    Assert.Contains(@"""focalTweetId"":""1619433164757413894""", query["variables"]);
+                    Assert.Equal("TweetDetail", request.EndpointName);
                 })
-                .ReturnsAsync(responseStream);
+                .ReturnsAsync(apiResponse);
 
             var request = new TweetDetailRequest
             {
index 0bf750c..b8c4151 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;
 using OpenTween.Models;
 
@@ -60,26 +53,20 @@ namespace OpenTween.Api.GraphQL
             };
         }
 
-        public async Task<TimelineTweet[]> Send(IApiConnectionLegacy apiConnection)
+        public async Task<TimelineTweet[]> 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);