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);
        }
Exemple #3
0
        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);
                    }
        }
Exemple #4
0
        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);
                    }
        }