// 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/SearchTimeline_SimpleTweet.json");
+ using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/SearchTimeline_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/lZ0GCEojmtQfiUQa5oJSEw/SearchTimeline"), url);
- Assert.Equal(2, param.Count);
- Assert.Equal("""{"rawQuery":"#OpenTween","count":20,"product":"Latest"}""", param["variables"]);
- Assert.True(param.ContainsKey("features"));
- Assert.Equal("SearchTimeline", endpointName);
+ var request = Assert.IsType<GetRequest>(x);
+ Assert.Equal(new("https://twitter.com/i/api/graphql/lZ0GCEojmtQfiUQa5oJSEw/SearchTimeline"), request.RequestUri);
+ var query = request.Query!;
+ Assert.Equal(2, query.Count);
+ Assert.Equal("""{"rawQuery":"#OpenTween","count":20,"product":"Latest"}""", query["variables"]);
+ Assert.True(query.ContainsKey("features"));
+ Assert.Equal("SearchTimeline", request.EndpointName);
})
- .ReturnsAsync(responseStream);
+ .ReturnsAsync(apiResponse);
var request = new SearchTimelineRequest(rawQuery: "#OpenTween")
{
[Fact]
public async Task Send_RequestCursor_Test()
{
- using var responseStream = File.OpenRead("Resources/Responses/SearchTimeline_SimpleTweet.json");
+ using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/SearchTimeline_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/lZ0GCEojmtQfiUQa5oJSEw/SearchTimeline"), url);
- Assert.Equal(2, param.Count);
- Assert.Equal("""{"rawQuery":"#OpenTween","count":20,"product":"Latest","cursor":"aaa"}""", param["variables"]);
- Assert.True(param.ContainsKey("features"));
- Assert.Equal("SearchTimeline", endpointName);
+ var request = Assert.IsType<GetRequest>(x);
+ Assert.Equal(new("https://twitter.com/i/api/graphql/lZ0GCEojmtQfiUQa5oJSEw/SearchTimeline"), request.RequestUri);
+ var query = request.Query!;
+ Assert.Equal(2, query.Count);
+ Assert.Equal("""{"rawQuery":"#OpenTween","count":20,"product":"Latest","cursor":"aaa"}""", query["variables"]);
+ Assert.True(query.ContainsKey("features"));
+ Assert.Equal("SearchTimeline", request.EndpointName);
})
- .ReturnsAsync(responseStream);
+ .ReturnsAsync(apiResponse);
var request = new SearchTimelineRequest(rawQuery: "#OpenTween")
{
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);