@@ -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