Skip to content

Commit 5b9b87a

Browse files
committed
Add configuration support
1 parent a0eb5dd commit 5b9b87a

File tree

7 files changed

+58
-5
lines changed

7 files changed

+58
-5
lines changed

src/Devlead.Testing.MockHttp.Tests/Devlead.Testing.MockHttp.Tests.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@
3737
</ItemGroup>
3838

3939
<ItemGroup>
40-
<Compile Include="../Devlead.Testing.MockHttp/**/*.cs" Exclude="../Devlead.Testing.MockHttp/obj/**;../Devlead.Testing.MockHttp/bin/**" />
40+
<Compile Include="../Devlead.Testing.MockHttp/**/*.cs" Exclude="../Devlead.Testing.MockHttp/obj/**;../Devlead.Testing.MockHttp/bin/**">
41+
<Link>Devlead/%(RecursiveDir)%(Filename)%(Extension)</Link>
42+
</Compile>
4143
</ItemGroup>
4244

4345
</Project>

src/Devlead.Testing.MockHttp.Tests/Fixture/ServiceProviderFixture.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Devlead.Testing.MockHttp;
22
using Devlead.Testing.MockHttp.Tests;
3+
using Devlead.Testing.MockHttp.Tests.Model;
34
using Devlead.Testing.MockHttp.Tests.Services;
45
using Microsoft.Extensions.DependencyInjection;
56
public static partial class ServiceProviderFixture
@@ -8,5 +9,16 @@ static partial void InitServiceProvider(IServiceCollection services)
89
{
910
services.AddSingleton<MyService>()
1011
.AddMockHttpClient<Constants>();
12+
13+
services
14+
.AddOptions<MyServiceSettings>()
15+
.BindConfiguration(
16+
nameof(MyService)
17+
);
18+
}
19+
20+
static partial void ConfigureInMemory(IDictionary<string, string?> configData)
21+
{
22+
configData.Add($"{nameof(MyService)}:ServiceName", nameof(MyService));
1123
}
1224
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Devlead.Testing.MockHttp.Tests.Model
2+
{
3+
public record MyServiceSettings
4+
{
5+
public required string ServiceName { get; init; }
6+
}
7+
}

src/Devlead.Testing.MockHttp.Tests/Services/MyService.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
using Devlead.Testing.MockHttp.Tests.Model;
2+
using Microsoft.Extensions.Options;
23
using System.Net.Http.Json;
34

45
namespace Devlead.Testing.MockHttp.Tests.Services;
56

6-
public class MyService(HttpClient httpClient)
7+
public class MyService(HttpClient httpClient, IOptions<MyServiceSettings> settings)
78
{
9+
public string GetServiceName() => settings.Value.ServiceName;
10+
811
public async Task<string> GetData()
912
{
1013
var response = await httpClient.GetAsync("https://example.com/index.txt");
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
MyService

src/Devlead.Testing.MockHttp.Tests/Unit/MyServiceTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,18 @@ public async Task GetSecret()
4747
// When
4848
var result = await myService.GetSecret();
4949

50+
// Then
51+
await Verify(result);
52+
}
53+
[Test]
54+
public async Task GetServiceName()
55+
{
56+
// Given
57+
var myService = ServiceProviderFixture.GetRequiredService<MyService>();
58+
59+
// When
60+
var result = myService.GetServiceName();
61+
5062
// Then
5163
await Verify(result);
5264
}

src/Devlead.Testing.MockHttp/ServiceProviderFixture.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.Extensions.DependencyInjection;
1+
using Microsoft.Extensions.Configuration;
2+
using Microsoft.Extensions.DependencyInjection;
23
using Microsoft.Extensions.Time.Testing;
34

45
public static partial class ServiceProviderFixture
@@ -62,8 +63,6 @@ public static (T1, T2, T3, T4, T5) GetRequiredService<T1, T2, T3, T4, T5>(
6263
);
6364
}
6465

65-
66-
6766
public static (T1, T2, T3, T4) GetRequiredService<T1, T2, T3, T4>(
6867
Func<IServiceCollection, IServiceCollection>? configure = null
6968
) where T1 : notnull
@@ -114,15 +113,32 @@ public static T GetRequiredService<T>(
114113

115114
public static ServiceProvider GetServiceProvider(Func<IServiceCollection, IServiceCollection>? configure)
116115
{
116+
var inMemoryConfigurationData = new Dictionary<string, string?>();
117+
ConfigureInMemory(inMemoryConfigurationData);
118+
119+
120+
var configurationBuilder = new ConfigurationBuilder()
121+
.AddInMemoryCollection(inMemoryConfigurationData);
122+
123+
Configure(configurationBuilder);
124+
125+
var configuration = configurationBuilder
126+
.Build();
127+
117128
var serviceCollection = new ServiceCollection();
118129

119130
serviceCollection
131+
.AddSingleton((IConfiguration)configuration)
120132
.AddSingleton<FakeTimeProvider>()
121133
.AddSingleton<TimeProvider>(provider => provider.GetRequiredService<FakeTimeProvider>());
122134

123135
InitServiceProvider(serviceCollection);
124136
return (configure?.Invoke(serviceCollection) ?? serviceCollection).BuildServiceProvider();
125137
}
126138

139+
static partial void ConfigureInMemory(IDictionary<string, string?> configData);
140+
141+
static partial void Configure(IConfigurationBuilder configuration);
142+
127143
static partial void InitServiceProvider(IServiceCollection services);
128144
}

0 commit comments

Comments
 (0)