Skip to content

Commit da64f1f

Browse files
derekmChrisPulman
andauthored
feat: test Named HttpClient reuse by AddRefitClient (#1910)
Signed-off-by: Derek Moore <derek.p.moore@gmail.com> Co-authored-by: Chris Pulman <chris.pulman@yahoo.com>
1 parent a56e9d8 commit da64f1f

File tree

1 file changed

+41
-4
lines changed

1 file changed

+41
-4
lines changed

Refit.Tests/HttpClientFactoryExtensionsTests.cs

+41-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1-
using Microsoft.Extensions.Options;
2-
3-
namespace Refit.Tests;
4-
1+
using System.Globalization;
2+
using System.Net.Http;
3+
using System.Reflection;
54
using System.Text.Json;
5+
66
using Microsoft.Extensions.DependencyInjection;
7+
using Microsoft.Extensions.Options;
8+
9+
using Refit.Implementation;
10+
711
using Xunit;
812

13+
namespace Refit.Tests;
14+
915
public class HttpClientFactoryExtensionsTests
1016
{
1117
class User { }
@@ -154,6 +160,37 @@ public void HttpClientSettingsCanBeProvidedStaticallyGivenTypeArgument()
154160
);
155161
}
156162

163+
[Fact]
164+
public void ProvidedHttpClientIsUsedAsNamedClient()
165+
{
166+
var baseUri = new Uri("https://0:1337");
167+
var services = new ServiceCollection();
168+
169+
services.AddHttpClient("MyHttpClient", client => {
170+
client.BaseAddress = baseUri;
171+
client.DefaultRequestHeaders.Add("X-Powered-By", Environment.OSVersion.VersionString);
172+
});
173+
services.AddRefitClient<IGitHubApi>(null, "MyHttpClient");
174+
175+
var sp = services.BuildServiceProvider();
176+
var httpClientFactory = sp.GetRequiredService<IHttpClientFactory>();
177+
var httpClient = httpClientFactory.CreateClient("MyHttpClient");
178+
179+
var gitHubApi = sp.GetRequiredService<IGitHubApi>();
180+
181+
var memberInfos = typeof(Generated).GetMember("RefitTestsIGitHubApi", BindingFlags.NonPublic);
182+
var genApi = Convert.ChangeType(gitHubApi, (Type)memberInfos[0], CultureInfo.InvariantCulture);
183+
var genApiProperty = genApi.GetType().GetProperty("Client")!;
184+
var genApiClient = (HttpClient)genApiProperty.GetValue(genApi)!;
185+
186+
Assert.NotSame(httpClient, genApiClient);
187+
Assert.Equal(httpClient.BaseAddress, genApiClient.BaseAddress);
188+
Assert.Equal(baseUri, genApiClient.BaseAddress);
189+
Assert.Contains(
190+
new KeyValuePair<string, IEnumerable<string>>("X-Powered-By",
191+
new[] { Environment.OSVersion.VersionString }), genApiClient.DefaultRequestHeaders);
192+
}
193+
157194
class ClientOptions
158195
{
159196
public SystemTextJsonContentSerializer Serializer { get; set; }

0 commit comments

Comments
 (0)