#include <gtest/gtest.h>
#include "message.hpp"
TEST(MessageTest, SystemMessageToJson)
{
SystemMessage msg{"You are a helpful assistant."};
nlohmann::json j = toJson(msg);
EXPECT_EQ(j["role"], "system");
EXPECT_EQ(j["content"], "You are a helpful assistant.");
}
TEST(MessageTest, UserMessageToJson)
{
UserMessage msg{"What is 2+2?"};
nlohmann::json j = toJson(msg);
EXPECT_EQ(j["role"], "user");
EXPECT_EQ(j["content"], "What is 2+2?");
}
TEST(MessageTest, ToolCallToJson)
{
ToolCall call{"call_1", "calc", {{"a", 2}, {"b", 2}}};
nlohmann::json j = toJson(call);
EXPECT_EQ(j["id"], "call_1");
EXPECT_EQ(j["type"], "function");
EXPECT_EQ(j["function"]["name"], "calc");
EXPECT_EQ(j["function"]["arguments"], "{\"a\":2,\"b\":2}");
}
TEST(MessageTest, AssistantMessageToJson_ContentOnly)
{
AssistantMessage msg{"The answer is 4.", {}};
nlohmann::json j = toJson(msg);
EXPECT_EQ(j["role"], "assistant");
EXPECT_EQ(j["content"], "The answer is 4.");
EXPECT_FALSE(j.contains("tool_calls"));
}
TEST(MessageTest, AssistantMessageToJson_ToolCallsOnly)
{
AssistantMessage msg{std::nullopt,
{{"call_1", "calc", {{"a", 2}, {"b", 2}}}}};
nlohmann::json j = toJson(msg);
EXPECT_EQ(j["role"], "assistant");
EXPECT_FALSE(j.contains("content"));
ASSERT_TRUE(j.contains("tool_calls"));
EXPECT_EQ(j["tool_calls"].size(), 1);
EXPECT_EQ(j["tool_calls"][0]["id"], "call_1");
}
TEST(MessageTest, ToolResultMessageToJson)
{
ToolResultMessage msg{"call_1", "4"};
nlohmann::json j = toJson(msg);
EXPECT_EQ(j["role"], "tool");
EXPECT_EQ(j["tool_call_id"], "call_1");
EXPECT_EQ(j["content"], "4");
}
TEST(MessageTest, MessageVariantToJson)
{
Message msg = UserMessage{"Hello"};
nlohmann::json j = toJson(msg);
EXPECT_EQ(j["role"], "user");
EXPECT_EQ(j["content"], "Hello");
}