public async Task GetAsync_ErrorJsonTest() { using var mockHandler = new HttpMessageHandlerMock(); using var http = new HttpClient(mockHandler); using var apiConnection = new TwitterApiConnection("", ""); apiConnection.http = http; mockHandler.Enqueue(x => { return(new HttpResponseMessage(HttpStatusCode.Forbidden) { Content = new StringContent("{\"errors\":[{\"code\":187,\"message\":\"Status is a duplicate.\"}]}"), }); }); var endpoint = new Uri("hoge/tetete.json", UriKind.Relative); var exception = await Assert.ThrowsAsync <TwitterApiException>(() => apiConnection.GetAsync <string>(endpoint, null, endpointName: "/hoge/tetete")) .ConfigureAwait(false); // エラーレスポンスの JSON に含まれるエラーコードに基づいてメッセージを出力する Assert.Equal("DuplicateStatus", exception.Message); Assert.Equal(TwitterErrorCode.DuplicateStatus, exception.Errors[0].Code); Assert.Equal("Status is a duplicate.", exception.Errors[0].Message); Assert.Equal(0, mockHandler.QueueCount); }
public async Task GetAsync_ErrorStatusTest() { using var mockHandler = new HttpMessageHandlerMock(); using var http = new HttpClient(mockHandler); using var apiConnection = new TwitterApiConnection("", ""); apiConnection.http = http; mockHandler.Enqueue(x => { return(new HttpResponseMessage(HttpStatusCode.BadGateway) { Content = new StringContent("### Invalid JSON Response ###"), }); }); var endpoint = new Uri("hoge/tetete.json", UriKind.Relative); var exception = await Assert.ThrowsAsync <TwitterApiException>(() => apiConnection.GetAsync <string>(endpoint, null, endpointName: "/hoge/tetete")) .ConfigureAwait(false); // エラーレスポンスの読み込みに失敗した場合はステータスコードをそのままメッセージに使用する Assert.Equal("BadGateway", exception.Message); Assert.Null(exception.ErrorResponse); Assert.Equal(0, mockHandler.QueueCount); }
public async Task GetAsync_UpdateRateLimitTest() { using (var mockHandler = new HttpMessageHandlerMock()) using (var http = new HttpClient(mockHandler)) using (var apiConnection = new TwitterApiConnection("", "")) { apiConnection.http = http; mockHandler.Enqueue(x => { Assert.Equal(HttpMethod.Get, x.Method); Assert.Equal("https://api.twitter.com/1.1/hoge/tetete.json", x.RequestUri.GetLeftPart(UriPartial.Path)); return(new HttpResponseMessage(HttpStatusCode.OK) { Headers = { { "X-Rate-Limit-Limit", "150" }, { "X-Rate-Limit-Remaining", "100" }, { "X-Rate-Limit-Reset", "1356998400" }, { "X-Access-Level", "read-write-directmessages" }, }, Content = new StringContent("\"hogehoge\""), }); }); var apiStatus = new TwitterApiStatus(); MyCommon.TwitterApiInfo = apiStatus; var endpoint = new Uri("hoge/tetete.json", UriKind.Relative); await apiConnection.GetAsync <string>(endpoint, null, endpointName : "/hoge/tetete") .ConfigureAwait(false); Assert.Equal(apiStatus.AccessLevel, TwitterApiAccessLevel.ReadWriteAndDirectMessage); Assert.Equal(apiStatus.AccessLimit["/hoge/tetete"], new ApiLimit(150, 100, new DateTime(2013, 1, 1, 0, 0, 0, DateTimeKind.Utc).ToLocalTime())); Assert.Equal(0, mockHandler.QueueCount); } }
public async Task GetAsync_Test() { using (var mockHandler = new HttpMessageHandlerMock()) using (var http = new HttpClient(mockHandler)) using (var apiConnection = new TwitterApiConnection("", "")) { apiConnection.http = http; mockHandler.Enqueue(x => { Assert.Equal(HttpMethod.Get, x.Method); Assert.Equal("https://api.twitter.com/1.1/hoge/tetete.json", x.RequestUri.GetLeftPart(UriPartial.Path)); var query = HttpUtility.ParseQueryString(x.RequestUri.Query); Assert.Equal("1111", query["aaaa"]); Assert.Equal("2222", query["bbbb"]); return(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("\"hogehoge\""), }); }); var endpoint = new Uri("hoge/tetete.json", UriKind.Relative); var param = new Dictionary <string, string> { ["aaaa"] = "1111", ["bbbb"] = "2222", }; var result = await apiConnection.GetAsync <string>(endpoint, param, endpointName : "/hoge/tetete") .ConfigureAwait(false); Assert.Equal("hogehoge", result); Assert.Equal(0, mockHandler.QueueCount); } }