// 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;
[Fact]
public async Task Send_Test()
{
- using var responseStream = File.OpenRead("Resources/Responses/ListLatestTweetsTimeline_SimpleTweet.json");
+ using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/ListLatestTweetsTimeline_SimpleTweet.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/6ClPnsuzQJ1p7-g32GQw9Q/ListLatestTweetsTimeline"), url);
- Assert.Equal(2, param.Count);
- Assert.Equal("""{"listId":"1675863884757110790","count":20}""", param["variables"]);
- Assert.True(param.ContainsKey("features"));
- Assert.Equal("ListLatestTweetsTimeline", endpointName);
+ var request = Assert.IsType<GetRequest>(x);
+ Assert.Equal(new("https://twitter.com/i/api/graphql/6ClPnsuzQJ1p7-g32GQw9Q/ListLatestTweetsTimeline"), request.RequestUri);
+ var query = request.Query!;
+ Assert.Equal(2, query.Count);
+ Assert.Equal("""{"listId":"1675863884757110790","count":20}""", query["variables"]);
+ Assert.True(query.ContainsKey("features"));
+ Assert.Equal("ListLatestTweetsTimeline", request.EndpointName);
})
- .ReturnsAsync(responseStream);
+ .ReturnsAsync(apiResponse);
var request = new ListLatestTweetsTimelineRequest(listId: "1675863884757110790")
{
[Fact]
public async Task Send_RequestCursor_Test()
{
- using var responseStream = File.OpenRead("Resources/Responses/ListLatestTweetsTimeline_SimpleTweet.json");
+ using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/ListLatestTweetsTimeline_SimpleTweet.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/6ClPnsuzQJ1p7-g32GQw9Q/ListLatestTweetsTimeline"), url);
- Assert.Equal(2, param.Count);
- Assert.Equal("""{"listId":"1675863884757110790","count":20,"cursor":"aaa"}""", param["variables"]);
- Assert.True(param.ContainsKey("features"));
- Assert.Equal("ListLatestTweetsTimeline", endpointName);
+ var request = Assert.IsType<GetRequest>(x);
+ Assert.Equal(new("https://twitter.com/i/api/graphql/6ClPnsuzQJ1p7-g32GQw9Q/ListLatestTweetsTimeline"), request.RequestUri);
+ var query = request.Query!;
+ Assert.Equal(2, query.Count);
+ Assert.Equal("""{"listId":"1675863884757110790","count":20,"cursor":"aaa"}""", query["variables"]);
+ Assert.True(query.ContainsKey("features"));
+ Assert.Equal("ListLatestTweetsTimeline", request.EndpointName);
})
- .ReturnsAsync(responseStream);
+ .ReturnsAsync(apiResponse);
var request = new ListLatestTweetsTimelineRequest(listId: "1675863884757110790")
{
// Boston, MA 02110-1301, USA.
using System;
-using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
-using System.Linq;
+using System.Net;
+using System.Net.Http;
using System.Reflection;
-using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
+using OpenTween.Connection;
using Xunit;
namespace OpenTween
public static DateTimeUtc LocalTime(int year, int month, int day, int hour, int minute, int second)
=> new(new DateTimeOffset(year, month, day, hour, minute, second, TimeZoneInfo.Local.BaseUtcOffset));
+
+ public static async Task<ApiResponse> CreateApiResponse(string path)
+ {
+ byte[] buffer;
+ using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
+ {
+ buffer = new byte[stream.Length];
+ await stream.ReadAsync(buffer, 0, buffer.Length);
+ }
+ var responseMessage = new HttpResponseMessage
+ {
+ StatusCode = HttpStatusCode.OK,
+ Content = new ByteArrayContent(buffer),
+ };
+ return new ApiResponse(responseMessage);
+ }
}
}
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<TimelineResponse> Send(IApiConnectionLegacy apiConnection)
+ public async Task<TimelineResponse> 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);