예제 #1
0
        public async Task PostLazyAsync_Multipart_NullTest()
        {
            using (var mockHandler = new HttpMessageHandlerMock())
                using (var http = new HttpClient(mockHandler))
                    using (var apiConnection = new TwitterApiConnection("", ""))
                    {
                        apiConnection.httpUpload = http;

                        mockHandler.Enqueue(async x =>
                        {
                            Assert.Equal(HttpMethod.Post, x.Method);
                            Assert.Equal("https://api.twitter.com/1.1/hoge/tetete.json",
                                         x.RequestUri.AbsoluteUri);

                            Assert.IsType <MultipartFormDataContent>(x.Content);

                            var boundary = x.Content.Headers.ContentType.Parameters.Cast <NameValueHeaderValue>()
                                           .First(y => y.Name == "boundary").Value;

                            // 前後のダブルクオーテーションを除去
                            boundary = boundary.Substring(1, boundary.Length - 2);

                            var expectedText =
                                $"--{boundary}\r\n" +
                                $"\r\n--{boundary}--\r\n";

                            var expected = Encoding.UTF8.GetBytes(expectedText);

                            Assert.Equal(expected, await x.Content.ReadAsByteArrayAsync().ConfigureAwait(false));

                            return(new HttpResponseMessage(HttpStatusCode.OK)
                            {
                                Content = new StringContent("\"hogehoge\""),
                            });
                        });

                        var endpoint = new Uri("hoge/tetete.json", UriKind.Relative);

                        var result = await apiConnection.PostLazyAsync <string>(endpoint, param : null, media : null)
                                     .ConfigureAwait(false);

                        Assert.Equal("hogehoge", await result.LoadJsonAsync()
                                     .ConfigureAwait(false));

                        Assert.Equal(0, mockHandler.QueueCount);
                    }
        }
예제 #2
0
        public async Task PostLazyAsync_Test()
        {
            using (var mockHandler = new HttpMessageHandlerMock())
                using (var http = new HttpClient(mockHandler))
                    using (var apiConnection = new TwitterApiConnection("", ""))
                    {
                        apiConnection.http = http;

                        mockHandler.Enqueue(async x =>
                        {
                            Assert.Equal(HttpMethod.Post, x.Method);
                            Assert.Equal("https://api.twitter.com/1.1/hoge/tetete.json",
                                         x.RequestUri.AbsoluteUri);

                            var body = await x.Content.ReadAsStringAsync()
                                       .ConfigureAwait(false);
                            var query = HttpUtility.ParseQueryString(body);

                            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.PostLazyAsync <string>(endpoint, param)
                                     .ConfigureAwait(false);

                        Assert.Equal("hogehoge", await result.LoadJsonAsync()
                                     .ConfigureAwait(false));

                        Assert.Equal(0, mockHandler.QueueCount);
                    }
        }
예제 #3
0
        public async Task PostLazyAsync_MultipartTest()
        {
            using (var mockHandler = new HttpMessageHandlerMock())
                using (var http = new HttpClient(mockHandler))
                    using (var apiConnection = new TwitterApiConnection("", ""))
                    {
                        apiConnection.httpUpload = http;

                        using (var image = TestUtils.CreateDummyImage())
                            using (var media = new MemoryImageMediaItem(image))
                            {
                                mockHandler.Enqueue(async x =>
                                {
                                    Assert.Equal(HttpMethod.Post, x.Method);
                                    Assert.Equal("https://api.twitter.com/1.1/hoge/tetete.json",
                                                 x.RequestUri.AbsoluteUri);

                                    Assert.IsType <MultipartFormDataContent>(x.Content);

                                    var boundary = x.Content.Headers.ContentType.Parameters.Cast <NameValueHeaderValue>()
                                                   .First(y => y.Name == "boundary").Value;

                                    // 前後のダブルクオーテーションを除去
                                    boundary = boundary.Substring(1, boundary.Length - 2);

                                    var expectedText =
                                        $"--{boundary}\r\n" +
                                        "Content-Type: text/plain; charset=utf-8\r\n" +
                                        "Content-Disposition: form-data; name=aaaa\r\n" +
                                        "\r\n" +
                                        "1111\r\n" +
                                        $"--{boundary}\r\n" +
                                        "Content-Type: text/plain; charset=utf-8\r\n" +
                                        "Content-Disposition: form-data; name=bbbb\r\n" +
                                        "\r\n" +
                                        "2222\r\n" +
                                        $"--{boundary}\r\n" +
                                        $"Content-Disposition: form-data; name=media1; filename={media.Name}; filename*=utf-8''{media.Name}\r\n" +
                                        "\r\n";

                                    var expected = Encoding.UTF8.GetBytes(expectedText)
                                                   .Concat(image.Stream.ToArray())
                                                   .Concat(Encoding.UTF8.GetBytes($"\r\n--{boundary}--\r\n"));

                                    Assert.Equal(expected, await x.Content.ReadAsByteArrayAsync().ConfigureAwait(false));

                                    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 mediaParam = new Dictionary <string, IMediaItem>
                                {
                                    ["media1"] = media,
                                };

                                var result = await apiConnection.PostLazyAsync <string>(endpoint, param, mediaParam)
                                             .ConfigureAwait(false);

                                Assert.Equal("hogehoge", await result.LoadJsonAsync()
                                             .ConfigureAwait(false));

                                Assert.Equal(0, mockHandler.QueueCount);
                            }
                    }
        }