节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
3.77 KiB
Stardust
using Xunit;

namespace ServerTest.Mcp;

/// <summary>部署读工具复用 MVC/API 已有查询,不在 MCP 里另写 FindAll 条件。</summary>
public class DeployReadReuseTests
{
    private static String ToolBody(String typeName)
    {
        var source = global::ServerTest.SourceRoot.ReadSource("Stardust.Mcp/Tools/Deploy/DeployTools.cs");
        var start = source.IndexOf($"public class {typeName}", StringComparison.Ordinal);
        Assert.True(start >= 0, typeName);
        var next = source.IndexOf("public class ", start + 1, StringComparison.Ordinal);
        return next < 0 ? source[start..] : source[start..next];
    }

    [Fact]
    public void DeployStatus_UsesFindAllByDeployId()
    {
        var body = ToolBody("DeployStatusTool");
        Assert.Contains("AppDeployNode.FindAllByDeployId(deploy.Id)", body);
        Assert.DoesNotContain("AppDeployNode.FindAll(", body);
        Assert.DoesNotContain("FindAllByAppId", body);
    }

    [Fact]
    public void DeployVersions_UsesControllerSearch()
    {
        var body = ToolBody("DeployVersionsTool");
        Assert.Contains("AppDeployVersion.Search(deploy.Id, null, null, DateTime.MinValue, DateTime.MinValue, null, null)", body);
        Assert.DoesNotContain("AppDeployVersion.FindAll(", body);
    }

    [Fact]
    public void DeployHistory_UsesControllerSearchWithoutMemoryPaging()
    {
        var body = ToolBody("DeployHistoryTool");
        Assert.Contains("AppDeployHistory.Search(deploy.Id, -1, null, Since(args), DateTime.MinValue, null, page)", body);
        Assert.Contains("RetrieveTotalCount = true", body);
        Assert.DoesNotContain("AppDeployHistory.FindAll(", body);
        Assert.DoesNotContain(".Skip(", body);
        Assert.DoesNotContain(".Take(", body);
    }

    [Fact]
    public void PipelineRunDetail_UsesFindAllByRunId()
    {
        var body = ToolBody("PipelineRunDetailTool");
        Assert.Contains("AppPipelineStep.FindAllByRunId(run.Id)", body);
        Assert.DoesNotContain("AppPipelineStep.FindAll(", body);
    }

    [Fact]
    public void DeployRelease_SelectsNodesByDeployId_AndKeepsVersionSwitchWithoutPublish()
    {
        var body = ToolBody("DeployReleaseTool");
        Assert.Contains("AppDeployNode.FindAllByDeployId(deploy.Id)", body);
        Assert.DoesNotContain("AppDeployNode.FindAll(", body);
        Assert.Contains("AppDeployVersion.FindByDeployIdAndVersion(deploy.Id, version)", body);
        Assert.DoesNotContain("AppDeployVersion.FindAll(", body);
        Assert.Contains("await ops.UseVersionAsync(ver.Id, ctx.CallerIp, false);", body);
        Assert.DoesNotContain("publishEnabledNodes", body);
        Assert.Contains("ControlDeployAsync(deploy.Id, node.Id, \"install\", ctx.CallerIp)", body);
    }

    [Fact]
    public void HistoryControllers_ShareTheSameSearch()
    {
        const String call = "return AppDeployHistory.Search(appId, nodeId, null, start, end, p[\"Q\"], p);";
        var mvc = global::ServerTest.SourceRoot.ReadSource("Stardust.Web/Areas/Deployment/Controllers/AppDeployHistoryController.cs");
        var api = global::ServerTest.SourceRoot.ReadSource("Stardust.WebApi/Areas/Deployment/Controllers/AppDeployHistoryController.cs");
        Assert.Contains(call, mvc);
        Assert.Contains(call, api);
    }

    [Fact]
    public void PipelineRunDetail_ApiAlreadyUsesFindAllByRunId_MvcDetailDoesNotQuerySteps()
    {
        var api = global::ServerTest.SourceRoot.ReadSource("Stardust.WebApi/Areas/Deployment/Controllers/AppPipelineRunController.cs");
        var mvc = global::ServerTest.SourceRoot.ReadSource("Stardust.Web/Areas/Deployment/Controllers/AppPipelineRunController.cs");
        Assert.Contains("AppPipelineStep.FindAllByRunId(id)", api);
        Assert.Contains("return View(entity);", mvc);
        Assert.DoesNotContain("AppPipelineStep.", mvc);
    }
}