Files
anthropic-client/tests/AnthropicClient.Tests/EndToEnd/AnthropicApiClientTests.cs
T

98 lines
2.6 KiB
C#
Raw Normal View History

2024-07-19 21:52:29 -05:00
using Xunit.Abstractions;
2024-07-19 21:50:07 -05:00
using Xunit.Sdk;
2024-06-27 23:26:53 -05:00
namespace AnthropicClient.Tests.EndToEnd;
2024-07-19 22:31:36 -05:00
public class ClientTests(ConfigurationFixture configFixture) : EndToEndTest(configFixture)
2024-06-27 23:26:53 -05:00
{
[Fact]
2024-07-03 16:57:27 -05:00
public async Task CreateMessageAsync_WhenCalled_ItShouldReturnResponse()
2024-06-27 23:26:53 -05:00
{
2024-07-03 16:57:27 -05:00
var request = new MessageRequest(
2024-06-27 23:26:53 -05:00
model: AnthropicModels.Claude3Haiku,
messages: [new(MessageRole.User, [new TextContent("Hello!")])]
);
2024-07-03 16:57:27 -05:00
var result = await _client.CreateMessageAsync(request);
2024-06-27 23:26:53 -05:00
result.IsSuccess.Should().BeTrue();
2024-07-03 16:57:27 -05:00
result.Value.Should().BeOfType<MessageResponse>();
result.Value.Content.Should().NotBeNullOrEmpty();
2024-06-27 23:26:53 -05:00
}
2024-06-28 10:54:00 -05:00
[Fact]
2024-07-03 16:57:27 -05:00
public async Task CreateMessageAsync_WhenCalledWithStreamRequest_ItShouldReturnEvents()
2024-06-28 10:54:00 -05:00
{
2024-07-03 16:57:27 -05:00
var request = new StreamMessageRequest(
2024-06-28 10:54:00 -05:00
model: AnthropicModels.Claude3Haiku,
messages: [new(MessageRole.User, [new TextContent("Hello!")])]
);
2024-07-03 16:57:27 -05:00
var response = _client.CreateMessageAsync(request);
2024-07-01 22:46:02 -05:00
2024-06-28 10:54:00 -05:00
var events = new List<AnthropicEvent>();
await foreach (var e in response)
{
events.Add(e);
}
events.Should().NotBeEmpty();
}
[Fact]
2024-07-03 16:57:27 -05:00
public async Task CreateMessageAsync_WhenCalledWithStreamRequest_ItShouldYieldAMessageCompleteEvent()
{
2024-07-03 16:57:27 -05:00
var request = new StreamMessageRequest(
model: AnthropicModels.Claude3Haiku,
messages: [new(MessageRole.User, [new TextContent("Hello!")])]
);
2024-07-03 16:57:27 -05:00
var response = _client.CreateMessageAsync(request);
2024-07-01 22:46:02 -05:00
await foreach (var e in response)
{
if (e.Data is MessageCompleteEventData messageCompleteData)
{
messageCompleteData.Message.Should().NotBeNull();
break;
}
}
}
2024-07-19 21:31:49 -05:00
[Fact]
public async Task CreateMessageAsync_WhenImageIsSent_ItShouldReturnResponse()
{
2024-07-19 22:38:47 -05:00
var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "Files", "base64-elephant.txt");
2024-07-19 21:31:49 -05:00
var mediaType = "image/jpeg";
2024-07-19 22:38:47 -05:00
var base64Data = await File.ReadAllTextAsync(imagePath);
2024-07-19 21:31:49 -05:00
var request = new MessageRequest(
model: AnthropicModels.Claude3Haiku,
messages: [
new(MessageRole.User, [
2024-07-19 22:38:47 -05:00
new ImageContent(mediaType, base64Data),
2024-07-19 21:31:49 -05:00
new TextContent("What is in this image?")
]),
]
);
var result = await _client.CreateMessageAsync(request);
result.IsSuccess.Should().BeTrue();
result.Value.Should().BeOfType<MessageResponse>();
result.Value.Content.Should().NotBeNullOrEmpty();
2024-07-19 21:38:52 -05:00
var text = result.Value.Content.Aggregate("", (acc, content) =>
2024-07-19 21:31:49 -05:00
{
if (content is TextContent textContent)
{
acc += textContent.Text;
}
return acc;
});
text.Should().Contain("elephant");
}
2024-06-27 23:26:53 -05:00
}