-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Expand file tree
/
Copy pathRestClientTests.cs
More file actions
151 lines (117 loc) · 5.11 KB
/
RestClientTests.cs
File metadata and controls
151 lines (117 loc) · 5.11 KB
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
using RestSharp.Serializers;
using RestSharp.Serializers.Json;
namespace RestSharp.Tests;
public class RestClientTests {
const string BaseUrl = "http://localhost:8888/";
[Theory]
[InlineData(Method.Get, Method.Post)]
[InlineData(Method.Post, Method.Get)]
[InlineData(Method.Delete, Method.Get)]
[InlineData(Method.Head, Method.Post)]
[InlineData(Method.Put, Method.Patch)]
[InlineData(Method.Patch, Method.Put)]
[InlineData(Method.Post, Method.Put)]
[InlineData(Method.Get, Method.Delete)]
public async Task Execute_with_RestRequest_and_Method_overrides_previous_request_method(Method reqMethod, Method overrideMethod) {
var req = new RestRequest("", reqMethod);
using var client = new RestClient(BaseUrl);
await client.ExecuteAsync(req, overrideMethod);
req.Method.Should().Be(overrideMethod);
}
[Fact]
public async Task ConfigureHttp_will_set_proxy_to_null_with_no_exceptions_When_no_proxy_can_be_found() {
var req = new RestRequest();
using var client = new RestClient(new RestClientOptions(BaseUrl) { Proxy = null });
await client.ExecuteAsync(req);
}
[Fact]
public void UseJson_leaves_only_json_serializer() {
// arrange
var baseUrl = new Uri(BaseUrl);
// act
using var client = new RestClient(baseUrl, configureSerialization: cfg => cfg.UseJson());
// assert
client.Serializers.Serializers.Should().HaveCount(1);
client.Serializers.GetSerializer(DataFormat.Json).Should().NotBeNull();
}
[Fact]
public void UseXml_leaves_only_json_serializer() {
// arrange
var baseUrl = new Uri(BaseUrl);
// act
using var client = new RestClient(baseUrl, configureSerialization: cfg => cfg.UseXml());
// assert
client.Serializers.Serializers.Should().HaveCount(1);
client.Serializers.GetSerializer(DataFormat.Xml).Should().NotBeNull();
}
[Fact]
public void UseOnlySerializer_leaves_only_custom_serializer() {
// arrange
var baseUrl = new Uri(BaseUrl);
// act
using var client = new RestClient(baseUrl, configureSerialization: cfg => cfg.UseOnlySerializer(() => new SystemTextJsonSerializer()));
// assert
client.Serializers.Serializers.Should().HaveCount(1);
client.Serializers.GetSerializer(DataFormat.Json).Should().NotBeNull();
}
[Fact]
public void Should_reuse_httpClient_instance() {
using var client1 = new RestClient(new Uri("https://fake.api"), useClientFactory: true);
using var client2 = new RestClient(new Uri("https://fake.api"), useClientFactory: true);
client1.HttpClient.Should().BeSameAs(client2.HttpClient);
}
[Fact]
public void Should_use_new_httpClient_instance() {
using var client1 = new RestClient(new Uri("https://fake.api"));
using var client2 = new RestClient(new Uri("https://fake.api"));
client1.HttpClient.Should().NotBeSameAs(client2.HttpClient);
}
[Fact]
public void ConfigureDefaultParameters_sets_user_agent_new_httpClient_instance() {
// arrange
var clientOptions = new RestClientOptions();
// act
using var restClient = new RestClient(clientOptions);
//assert
Assert.Single(
restClient.DefaultParameters,
parameter => parameter is { Type: ParameterType.HttpHeader, Name: KnownHeaders.UserAgent, Value: string valueAsString } &&
valueAsString == clientOptions.UserAgent
);
Assert.Empty(restClient.HttpClient.DefaultRequestHeaders.UserAgent);
}
[Fact]
public void ConfigureDefaultParameters_sets_user_agent_given_httpClient_instance() {
// arrange
var httpClient = new HttpClient();
var clientOptions = new RestClientOptions();
// act
using var restClient = new RestClient(httpClient, clientOptions);
//assert
Assert.Single(
restClient.DefaultParameters,
parameter => parameter is { Type: ParameterType.HttpHeader, Name: KnownHeaders.UserAgent, Value: string valueAsString } &&
valueAsString == clientOptions.UserAgent
);
Assert.Empty(httpClient.DefaultRequestHeaders.UserAgent);
}
[Fact]
public void Should_not_set_expect_continue_on_shared_http_client_default_headers() {
// arrange
var httpClient = new HttpClient();
var options = new RestClientOptions { Expect100Continue = true };
// act
using var restClient = new RestClient(httpClient, options);
// assert — the shared HttpClient's DefaultRequestHeaders must not be modified
httpClient.DefaultRequestHeaders.ExpectContinue.Should().BeNull();
}
[Fact]
public void Should_not_set_expect_continue_on_new_http_client_default_headers() {
// arrange
var options = new RestClientOptions { Expect100Continue = false };
// act
using var restClient = new RestClient(options);
// assert
restClient.HttpClient.DefaultRequestHeaders.ExpectContinue.Should().BeNull();
}
}