Skip to content

Commit db7fce8

Browse files
test: dispose local test HttpClient/HttpResponseMessage objects
- Ensure LocalChatService tests own and dispose created HttpClient instances. - Ensure non-success response object is created in a local using variable before enqueue.
1 parent cc53b6a commit db7fce8

1 file changed

Lines changed: 17 additions & 8 deletions

File tree

EssentialCSharp.Chat.Tests/LocalChatServiceTests.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ public async Task GetChatCompletion_BuildsExpectedRequest()
2020
{"id":"resp-1","choices":[{"message":{"content":"hello back"}}]}
2121
"""));
2222

23-
var service = CreateService(new RecordingHttpMessageHandler(requests, responses));
23+
var (service, client) = CreateService(new RecordingHttpMessageHandler(requests, responses));
24+
using var clientScope = client;
25+
using var serviceScope = service;
2426

2527
var (response, responseId) = await service.GetChatCompletion("hello");
2628

@@ -51,12 +53,15 @@ public async Task GetChatCompletion_WhenBackendReturnsNonSuccess_ThrowsChatBacke
5153
{
5254
var requests = new List<HttpRequestMessage>();
5355
var responses = new Queue<HttpResponseMessage>();
54-
responses.Enqueue(new HttpResponseMessage(HttpStatusCode.BadGateway)
56+
using var response = new HttpResponseMessage(HttpStatusCode.BadGateway)
5557
{
5658
Content = new StringContent("upstream error", Encoding.UTF8, "text/plain")
57-
});
59+
};
60+
responses.Enqueue(response);
5861

59-
var service = CreateService(new RecordingHttpMessageHandler(requests, responses));
62+
var (service, client) = CreateService(new RecordingHttpMessageHandler(requests, responses));
63+
using var clientScope = client;
64+
using var serviceScope = service;
6065

6166
await Assert.ThrowsAsync<ChatBackendUnavailableException>(() => service.GetChatCompletion("hello"));
6267
}
@@ -68,7 +73,9 @@ public async Task GetChatCompletion_WhenPayloadIsInvalid_ThrowsChatBackendUnavai
6873
var responses = new Queue<HttpResponseMessage>();
6974
responses.Enqueue(CreateJsonResponse("""{"id":"resp-1","choices":[]}"""));
7075

71-
var service = CreateService(new RecordingHttpMessageHandler(requests, responses));
76+
var (service, client) = CreateService(new RecordingHttpMessageHandler(requests, responses));
77+
using var clientScope = client;
78+
using var serviceScope = service;
7279

7380
await Assert.ThrowsAsync<ChatBackendUnavailableException>(() => service.GetChatCompletion("hello"));
7481
}
@@ -85,7 +92,9 @@ public async Task GetChatCompletion_ReusesConversationHistory_WhenPreviousRespon
8592
{"id":"resp-2","choices":[{"message":{"content":"assistant two"}}]}
8693
"""));
8794

88-
var service = CreateService(new RecordingHttpMessageHandler(requests, responses));
95+
var (service, client) = CreateService(new RecordingHttpMessageHandler(requests, responses));
96+
using var clientScope = client;
97+
using var serviceScope = service;
8998

9099
var first = await service.GetChatCompletion("first");
91100
_ = await service.GetChatCompletion("second", previousResponseId: first.responseId);
@@ -109,7 +118,7 @@ public async Task GetChatCompletion_ReusesConversationHistory_WhenPreviousRespon
109118
await Assert.That(secondMessages[3].GetProperty("content").GetString()).IsEqualTo("second");
110119
}
111120

112-
private static LocalChatService CreateService(HttpMessageHandler handler)
121+
private static (LocalChatService Service, HttpClient Client) CreateService(HttpMessageHandler handler)
113122
{
114123
var options = Options.Create(new AIOptions
115124
{
@@ -128,7 +137,7 @@ private static LocalChatService CreateService(HttpMessageHandler handler)
128137
.Returns(client);
129138

130139
var logger = Mock.Of<ILogger<LocalChatService>>();
131-
return new LocalChatService(options, httpClientFactory.Object, logger);
140+
return (new LocalChatService(options, httpClientFactory.Object, logger), client);
132141
}
133142

134143
private static HttpResponseMessage CreateJsonResponse(string json) =>

0 commit comments

Comments
 (0)