-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
Copy pathRequestBodyTests.cs
120 lines (86 loc) · 4.13 KB
/
RequestBodyTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using RestSharp.Tests.Integrated.Fixtures;
using RestSharp.Tests.Shared.Fixtures;
namespace RestSharp.Tests.Integrated;
public class RequestBodyTests : IClassFixture<RequestBodyFixture> {
readonly ITestOutputHelper _output;
readonly SimpleServer _server;
const string NewLine = "\r\n";
const string TextPlainContentType = "text/plain";
const string ExpectedTextContentType = $"{TextPlainContentType}; charset=utf-8";
const string ExpectedTextContentTypeNoCharset = TextPlainContentType;
public RequestBodyTests(RequestBodyFixture fixture, ITestOutputHelper output) {
_output = output;
_server = fixture.Server;
}
async Task AssertBody(Method method, bool disableCharset = false) {
var options = new RestClientOptions(_server.Url) { DisableCharset = disableCharset };
var client = new RestClient(options);
var request = new RestRequest(RequestBodyCapturer.Resource, method) {
OnBeforeRequest = async m => {
_output.WriteLine(m.ToString());
_output.WriteLine(await m.Content!.ReadAsStringAsync());
}
};
const string bodyData = "abc123 foo bar baz BING!";
request.AddParameter(TextPlainContentType, bodyData, ParameterType.RequestBody);
await client.ExecuteAsync(request);
var expected = disableCharset ? ExpectedTextContentTypeNoCharset : ExpectedTextContentType;
AssertHasRequestBody(expected, bodyData);
}
[Fact]
public Task Can_Be_Added_To_COPY_Request() => AssertBody(Method.Copy);
[Fact]
public Task Can_Be_Added_To_DELETE_Request() => AssertBody(Method.Delete);
[Fact]
public Task Can_Be_Added_To_OPTIONS_Request() => AssertBody(Method.Options);
[Fact]
public Task Can_Be_Added_To_PATCH_Request() => AssertBody(Method.Patch);
[Fact]
public Task Can_Be_Added_To_POST_Request_NoCharset() => AssertBody(Method.Post, true);
[Fact]
public Task Can_Be_Added_To_POST_Request() => AssertBody(Method.Post);
[Fact]
public Task Can_Be_Added_To_PUT_Request_NoCharset() => AssertBody(Method.Put, true);
[Fact]
public Task Can_Be_Added_To_PUT_Request() => AssertBody(Method.Put);
[Fact]
public async Task Can_Have_No_Body_Added_To_POST_Request() {
const Method httpMethod = Method.Post;
var client = new RestClient(_server.Url);
var request = new RestRequest(RequestBodyCapturer.Resource, httpMethod);
await client.ExecuteAsync(request);
AssertHasNoRequestBody();
}
[Fact]
public Task Can_Be_Added_To_GET_Request() => AssertBody(Method.Get);
[Fact]
public Task Can_Be_Added_To_HEAD_Request() => AssertBody(Method.Head);
[Fact]
public async Task MultipartFormData_Without_File_Creates_A_Valid_RequestBody() {
var client = new RestClient(_server.Url);
var request = new RestRequest(RequestBodyCapturer.Resource, Method.Post) {
AlwaysMultipartFormData = true
};
const string bodyData = "abc123 foo bar baz BING!";
const string multipartName = "mybody";
request.AddParameter(new BodyParameter(multipartName, bodyData, TextPlainContentType));
await client.ExecuteAsync(request);
var expectedBody = new[] {
$"{KnownHeaders.ContentType}: {ExpectedTextContentType}",
$"{KnownHeaders.ContentDisposition}: form-data; name={multipartName}",
bodyData
};
var actual = RequestBodyCapturer.CapturedEntityBody.Split(NewLine);
actual.Should().Contain(expectedBody);
}
static void AssertHasNoRequestBody() {
RequestBodyCapturer.CapturedContentType.Should().BeNull();
RequestBodyCapturer.CapturedHasEntityBody.Should().BeFalse();
RequestBodyCapturer.CapturedEntityBody.Should().BeNullOrEmpty();
}
static void AssertHasRequestBody(string contentType, string bodyData) {
RequestBodyCapturer.CapturedContentType.Should().Be(contentType);
RequestBodyCapturer.CapturedHasEntityBody.Should().BeTrue();
RequestBodyCapturer.CapturedEntityBody.Should().Be(bodyData);
}
}