104 lines
3.5 KiB
Go
104 lines
3.5 KiB
Go
// Copyright 2026 Alibaba Group
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
package app
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestCrossPlatformCoverageOAAttachmentDeliveredSchemaMatchesExecutableHelp(t *testing.T) {
|
|
tests := []struct {
|
|
cliPath string
|
|
canonical string
|
|
rpc string
|
|
description string
|
|
effect string
|
|
}{
|
|
{
|
|
cliPath: "oa approval attachment download-url",
|
|
canonical: "oa.get_attachment_download_url",
|
|
rpc: "get_attachment_download_url",
|
|
description: "获取审批附件下载授权并生成临时下载链接",
|
|
effect: "read",
|
|
},
|
|
{
|
|
cliPath: "oa approval attachment authorize-download",
|
|
canonical: "oa.auth_download_file",
|
|
rpc: "auth_download_file",
|
|
description: "批量授权当前用户下载指定的审批钉盘文件",
|
|
effect: "write",
|
|
},
|
|
{
|
|
cliPath: "oa approval attachment authorize-preview",
|
|
canonical: "oa.auth_preview_attachment",
|
|
rpc: "auth_preview_attachment",
|
|
description: "批量授权当前用户预览审批单中的附件",
|
|
effect: "write",
|
|
},
|
|
}
|
|
|
|
root := NewRootCommand()
|
|
for _, test := range tests {
|
|
t.Run(test.rpc, func(t *testing.T) {
|
|
command := exactCommandForTest(root, test.cliPath)
|
|
if command == nil {
|
|
t.Fatalf("executable command %q is missing", test.cliPath)
|
|
}
|
|
|
|
var stdout, stderr bytes.Buffer
|
|
root.SetOut(&stdout)
|
|
root.SetErr(&stderr)
|
|
root.SetArgs([]string{"schema", test.cliPath, "--format", "json"})
|
|
if err := root.Execute(); err != nil {
|
|
t.Fatalf("execute delivery schema leaf: %v; stderr=%s", err, stderr.String())
|
|
}
|
|
|
|
var tool map[string]any
|
|
if err := json.Unmarshal(stdout.Bytes(), &tool); err != nil {
|
|
t.Fatalf("decode delivery schema leaf: %v", err)
|
|
}
|
|
if got := schemaContractString(tool["canonical_path"]); got != test.canonical {
|
|
t.Fatalf("canonical_path = %q, want %q", got, test.canonical)
|
|
}
|
|
if got := schemaContractString(tool["primary_cli_path"]); got != test.cliPath {
|
|
t.Fatalf("primary_cli_path = %q, want %q", got, test.cliPath)
|
|
}
|
|
if got := schemaContractString(tool["description"]); !strings.HasPrefix(got, test.description) {
|
|
t.Fatalf("description = %q, want prefix %q", got, test.description)
|
|
}
|
|
if got := schemaContractString(tool["interface_mode"]); got != "mcp" {
|
|
t.Fatalf("interface_mode = %q, want mcp", got)
|
|
}
|
|
if got := schemaContractString(tool["availability"]); got != "available" {
|
|
t.Fatalf("availability = %q, want available", got)
|
|
}
|
|
interfaceRef := schemaInterfaceObject(tool["interface_ref"])
|
|
if got := schemaContractString(interfaceRef["product_id"]); got != "oa" {
|
|
t.Fatalf("interface_ref.product_id = %q, want oa", got)
|
|
}
|
|
if got := schemaContractString(interfaceRef["rpc_name"]); got != test.rpc {
|
|
t.Fatalf("interface_ref.rpc_name = %q, want %q", got, test.rpc)
|
|
}
|
|
if got := schemaContractString(tool["effect"]); got != test.effect {
|
|
t.Fatalf("effect = %q, want %q", got, test.effect)
|
|
}
|
|
if got := schemaContractString(tool["risk"]); got != "low" {
|
|
t.Fatalf("risk = %q, want low", got)
|
|
}
|
|
if got := schemaContractString(tool["confirmation"]); got != "not_required" {
|
|
t.Fatalf("confirmation = %q, want not_required", got)
|
|
}
|
|
if got := schemaContractString(tool["idempotency"]); got != "idempotent" {
|
|
t.Fatalf("idempotency = %q, want idempotent", got)
|
|
}
|
|
if problem := schemaHelpFlagCompletenessProblem(test.canonical, test.cliPath, command, tool); problem != "" {
|
|
t.Fatal(problem)
|
|
}
|
|
})
|
|
}
|
|
}
|