// 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;
[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
{
[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
{
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;
};
}
- 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);