svrnty-mcp-client/tests/Svrnty.MCP.Client.Core.Tests/Models/McpToolResultTests.cs
Svrnty d936ad7856 docs: comprehensive AI coding assistant research and MCP-first implementation plan
Research conducted on modern AI coding assistants (Cursor, GitHub Copilot, Cline,
Aider, Windsurf, Replit Agent) to understand architecture patterns, context management,
code editing workflows, and tool use protocols.

Key Decision: Pivoted from building full CLI (40-50h) to validation-driven MCP-first
approach (10-15h). Build 5 core CODEX MCP tools that work with ANY coding assistant,
validate adoption over 2-4 weeks, then decide on full CLI if demand proven.

Files:
- research/ai-systems/modern-coding-assistants-architecture.md (comprehensive research)
- research/ai-systems/codex-coding-assistant-implementation-plan.md (original CLI plan, preserved)
- research/ai-systems/codex-mcp-tools-implementation-plan.md (approved MCP-first plan)
- ideas/registry.json (updated with approved MCP tools proposal)

Architech Validation: APPROVED with pivot to MCP-first approach
Human Decision: Approved (pragmatic validation-driven development)

Next: Begin Phase 1 implementation (10-15 hours, 5 core MCP tools)

🤖 Generated with CODEX Research System

Co-Authored-By: The Archivist <archivist@codex.svrnty.io>
Co-Authored-By: The Architech <architech@codex.svrnty.io>
Co-Authored-By: Mathias Beaulieu-Duncan <mat@svrnty.io>
2025-10-22 21:00:34 -04:00

99 lines
2.3 KiB
C#

using OpenHarbor.MCP.Client.Core.Models;
using Xunit;
namespace OpenHarbor.MCP.Client.Core.Tests.Models;
/// <summary>
/// Unit tests for McpToolResult following TDD approach.
/// Tests result creation, success/failure states, and factory methods.
/// </summary>
public class McpToolResultTests
{
[Fact]
public void Success_WithContent_ReturnsSuccessResult()
{
// Arrange
var content = "Test content";
// Act
var result = McpToolResult.Success(content);
// Assert
Assert.True(result.IsSuccess);
Assert.Equal(content, result.Content);
Assert.Null(result.Error);
}
[Fact]
public void Success_WithEmptyContent_ReturnsSuccessResultWithEmptyString()
{
// Arrange
var content = string.Empty;
// Act
var result = McpToolResult.Success(content);
// Assert
Assert.True(result.IsSuccess);
Assert.Equal(string.Empty, result.Content);
Assert.Null(result.Error);
}
[Fact]
public void Failure_WithError_ReturnsFailureResult()
{
// Arrange
var error = "Test error";
// Act
var result = McpToolResult.Failure(error);
// Assert
Assert.False(result.IsSuccess);
Assert.Equal(error, result.Error);
Assert.Equal(string.Empty, result.Content);
}
[Fact]
public void Failure_WithEmptyError_ReturnsFailureResult()
{
// Arrange
var error = string.Empty;
// Act
var result = McpToolResult.Failure(error);
// Assert
Assert.False(result.IsSuccess);
Assert.Equal(string.Empty, result.Error);
Assert.Equal(string.Empty, result.Content);
}
[Fact]
public void Constructor_WithInitializers_SetsProperties()
{
// Arrange & Act
var result = new McpToolResult
{
IsSuccess = true,
Content = "Test content",
Error = null
};
// Assert
Assert.True(result.IsSuccess);
Assert.Equal("Test content", result.Content);
Assert.Null(result.Error);
}
[Fact]
public void Default_Content_IsEmptyString()
{
// Arrange & Act
var result = new McpToolResult { IsSuccess = false };
// Assert
Assert.Equal(string.Empty, result.Content);
}
}