Files
2026-07-13 12:49:17 +08:00

77 lines
2.7 KiB
C#

using System;
using System.IO;
using MCPForUnity.Editor.Clients;
using MCPForUnity.Editor.Models;
using NUnit.Framework;
namespace MCPForUnityTests.Editor.Clients
{
/// <summary>
/// Covers the regression where JsonFileMcpConfigurator.CheckStatus only recognized
/// the "url" property and missed "serverUrl" (Antigravity/Windsurf) and "httpUrl"
/// (Gemini CLI), so clients configured via HTTP looked unconfigured and got rewritten
/// every startup by the auto-rewrite path.
/// </summary>
[TestFixture]
public class CheckStatusUrlPropertyTests
{
private string _tempDir;
[SetUp]
public void SetUp()
{
_tempDir = Path.Combine(Path.GetTempPath(), "UnityMCPTests", Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(_tempDir);
}
[TearDown]
public void TearDown()
{
try { if (Directory.Exists(_tempDir)) Directory.Delete(_tempDir, true); } catch { }
}
[Test]
public void CheckStatus_DetectsHttp_WhenUrlProperty()
=> AssertHttpDetected("url");
[Test]
public void CheckStatus_DetectsHttp_WhenServerUrlProperty()
=> AssertHttpDetected("serverUrl");
[Test]
public void CheckStatus_DetectsHttp_WhenHttpUrlProperty()
=> AssertHttpDetected("httpUrl");
private void AssertHttpDetected(string urlProperty)
{
string configPath = Path.Combine(_tempDir, $"{urlProperty}.json");
File.WriteAllText(configPath,
"{\"mcpServers\":{\"unityMCP\":{\"" + urlProperty + "\":\"http://localhost:65535/mcp\"}}}");
var client = new McpClient
{
name = "Fake",
windowsConfigPath = configPath,
macConfigPath = configPath,
linuxConfigPath = configPath,
HttpUrlProperty = urlProperty,
};
var configurator = new FakeJsonConfigurator(client);
configurator.CheckStatus(attemptAutoRewrite: false);
Assert.AreNotEqual(ConfiguredTransport.Unknown, client.configuredTransport,
$"CheckStatus must recognize the '{urlProperty}' property as an HTTP URL");
Assert.That(
client.configuredTransport == ConfiguredTransport.Http
|| client.configuredTransport == ConfiguredTransport.HttpRemote,
$"Expected HTTP/HttpRemote transport for '{urlProperty}', got {client.configuredTransport}");
}
private sealed class FakeJsonConfigurator : JsonFileMcpConfigurator
{
public FakeJsonConfigurator(McpClient client) : base(client) { }
}
}
}