Files
AI-Studio/app/Tests/Assistants/SWOTAnalysis/SwotAnalysisSendToChatTests.cs
T

107 lines
3.9 KiB
C#
Raw Normal View History

2026-10-28 08:51:30 +01:00
using AIStudio.Assistants.SWOTAnalysis;
using AIStudio.Chat;
using AIStudio.Provider;
namespace AIStudio.Tests.Assistants.SWOTAnalysis;
[TestFixture]
public sealed class SwotAnalysisSendToChatTests
{
private const string ADDRESS_A_MODEL_CHOSE = "https://research.example.org/report";
[Test]
public void TheChatGetsTheVisibleRequestAndTheVisibleResultOnly()
{
var assistantThread = CreateAssistantThread();
var result = assistantThread.Blocks.Last();
var visiblePrompt = VisiblePrompt(result.Time.AddTicks(-1));
var chatThread = AssistantSWOTAnalysis.CreateChatThreadForResult(assistantThread, visiblePrompt, result);
Assert.Multiple(() =>
{
Assert.That(chatThread.Blocks, Has.Count.EqualTo(2));
Assert.That(chatThread.Blocks[0], Is.SameAs(visiblePrompt));
Assert.That(chatThread.Blocks[1].Role, Is.EqualTo(ChatRole.AI));
Assert.That(chatThread.Blocks[1].HideFromUser, Is.False);
Assert.That(((ContentText)chatThread.Blocks[1].Content!).Text, Is.EqualTo("## SWOT Matrix"));
Assert.That(chatThread.Blocks[1].Content, Is.Not.SameAs(result.Content));
Assert.That(chatThread.SystemPrompt, Is.EqualTo(SystemPrompts.DEFAULT));
});
}
[Test]
public void AnAddressAModelWroteIsNotGivenInTheChat()
{
var assistantThread = CreateAssistantThread();
var result = assistantThread.Blocks.Last();
var chatThread = AssistantSWOTAnalysis.CreateChatThreadForResult(assistantThread, VisiblePrompt(result.Time.AddTicks(-1)), result);
Assert.Multiple(() =>
{
Assert.That(assistantThread.IsWebAddressGivenToTheModel(new Uri(ADDRESS_A_MODEL_CHOSE)), Is.True, "The hidden request counts as a message of the user.");
Assert.That(chatThread.IsWebAddressGivenToTheModel(new Uri(ADDRESS_A_MODEL_CHOSE)), Is.False);
});
}
[Test]
public void TheChatKeepsTheIdAndTheRestrictionsOfTheAssistant()
{
var assistantThread = CreateAssistantThread();
assistantThread.RequireProviderConfidence(ConfidenceLevel.HIGH);
var result = assistantThread.Blocks.Last();
var chatThread = AssistantSWOTAnalysis.CreateChatThreadForResult(assistantThread, VisiblePrompt(result.Time.AddTicks(-1)), result);
Assert.Multiple(() =>
{
Assert.That(chatThread.ChatId, Is.EqualTo(assistantThread.ChatId));
Assert.That(chatThread.RequiredProviderConfidence, Is.EqualTo(ConfidenceLevel.HIGH));
});
}
[Test]
public void WithoutAResultTheChatStartsEmpty()
{
var chatThread = AssistantSWOTAnalysis.CreateChatThreadForResult(CreateAssistantThread(), null, null);
Assert.That(chatThread.Blocks, Is.Empty);
}
private static ChatThread CreateAssistantThread()
{
var time = DateTimeOffset.Now;
return new ChatThread
{
ChatId = Guid.NewGuid(),
Blocks =
[
new ContentBlock
{
Time = time,
Role = ChatRole.USER,
ContentType = ContentType.TEXT,
HideFromUser = true,
Content = new ContentText { Text = $"The opportunities rest on {ADDRESS_A_MODEL_CHOSE}." },
},
new ContentBlock
{
Time = time.AddSeconds(1),
Role = ChatRole.AI,
ContentType = ContentType.TEXT,
HideFromUser = true,
Content = new ContentText { Text = "## SWOT Matrix" },
},
],
};
}
private static ContentBlock VisiblePrompt(DateTimeOffset time) => new()
{
Time = time,
Role = ChatRole.USER,
ContentType = ContentType.TEXT,
Content = new ContentText { Text = "Create a SWOT analysis of my content" },
};
}