tests: add additional streaming tests

This commit is contained in:
Stevan Freeborn
2024-07-03 13:58:58 -05:00
parent fec7de2f66
commit bd8e4c70ab
2 changed files with 350 additions and 1 deletions
@@ -236,7 +236,7 @@ public class AnthropicApiClientTests : IntegrationTest
[Theory]
[ClassData(typeof(EventTestData))]
public async Task CreateChatMessageAsync_WhenCalledAndMessageIsStreamed_ItShouldReturnAllEvents(string eventString, AnthropicEvent anthropicEvent)
public async Task CreateChatMessageAsync_WhenCalledAndMessageIsStreamed_ItShouldHandleAllEventTypes(string eventString, AnthropicEvent anthropicEvent)
{
_mockHttpMessageHandler
.WhenCreateStreamMessageRequest()
@@ -258,4 +258,72 @@ public class AnthropicApiClientTests : IntegrationTest
e.Should().BeEquivalentTo(anthropicEvent);
}
[Fact]
public async Task CreateChatMessageAsync_WhenCalledAndMessageIsStreamed_ItShouldReturnAllExpectedEvents()
{
var eventStream = EventTestData.GetEventStream();
var events = EventTestData.GetAllEvents();
_mockHttpMessageHandler
.WhenCreateStreamMessageRequest()
.Respond(
HttpStatusCode.OK,
"text/event-stream",
eventStream
);
var request = new StreamChatMessageRequest(
model: AnthropicModels.Claude35Sonnet,
messages: [
new(MessageRole.User, [new TextContent("Hello!")]),
]
);
var result = Client.CreateChatMessageAsync(request);
var actualEvents = await result.ToListAsync();
actualEvents.Should().BeEquivalentTo(events);
}
[Fact]
public async Task CreateChatMessageAsync_WhenCalledMessageIsStreamedAndToolProvide_ItShouldReturnToolCall()
{
var eventStream = EventTestData.GetEventStream();
_mockHttpMessageHandler
.WhenCreateStreamMessageRequest()
.Respond(
HttpStatusCode.OK,
"text/event-stream",
eventStream
);
var getWeather = (string location, string unit) => $"The weather in {location} is 72°{unit}";
var request = new StreamChatMessageRequest(
model: AnthropicModels.Claude35Sonnet,
messages: [
new(MessageRole.User, [new TextContent("Hello!")]),
],
tools: [
Tool.CreateFromFunction("get_weather", "Gets the weather for a location", getWeather)
]
);
var result = Client.CreateChatMessageAsync(request);
var msgCompleteEvent = await result
.Where(e => e.Type is EventType.MessageComplete)
.FirstAsync();
msgCompleteEvent.Data.Should().BeOfType<MessageCompleteEventData>();
var toolCall = msgCompleteEvent.Data.As<MessageCompleteEventData>().Message.ToolCall;
var toolCallResult = await toolCall!.InvokeAsync<string>();
toolCallResult.IsSuccess.Should().BeTrue();
toolCallResult.Error.Should().BeNull();
toolCallResult.Value.Should().Be(getWeather("San Francisco, CA","fahrenheit"));
}
}