#include <gtest/gtest.h>
#include <nlohmann/json.hpp>
#include "tool.hpp"
class MockTool : public Tool
{
public:
std::string name() const override
{
return "mock_tool";
}
std::string description() const override
{
return "Mock Tool";
}
nlohmann::json parametersSchema() const override
{
return nlohmann::json::object();
}
Task<mw::E<std::string>> execute(const nlohmann::json&) override
{
co_return "mock_result";
}
};
TEST(ToolRegistryTest, RegisterAndGetTool)
{
ToolRegistry registry;
auto res = registry.registerTool(std::make_unique<MockTool>());
ASSERT_TRUE(res.has_value());
Tool* tool = registry.getTool("mock_tool");
ASSERT_NE(tool, nullptr);
EXPECT_EQ(tool->name(), "mock_tool");
}
TEST(ToolRegistryTest, DuplicateRegistrationFails)
{
ToolRegistry registry;
ASSERT_TRUE(
registry.registerTool(std::make_unique<MockTool>()).has_value());
EXPECT_FALSE(
registry.registerTool(std::make_unique<MockTool>()).has_value());
}
TEST(ToolRegistryTest, RegisterWithNamespace)
{
ToolRegistry registry;
auto res =
registry.registerToolWithNamespace("ns", std::make_unique<MockTool>());
ASSERT_TRUE(res.has_value());
Tool* tool = registry.getTool("ns_mock_tool");
ASSERT_NE(tool, nullptr);
EXPECT_EQ(tool->name(), "mock_tool");
}
TEST(ToolRegistryTest, GetAllTools)
{
ToolRegistry registry;
registry.registerTool(std::make_unique<MockTool>());
auto tools = registry.getAllTools();
ASSERT_EQ(tools.size(), 1);
EXPECT_EQ(tools[0]->name(), "mock_tool");
}