Files
dingtalk-workspace-cli/internal/cli/schema_runtime_registry_contract_test.go
T

108 lines
3.2 KiB
Go

// Copyright 2026 Alibaba Group
// Licensed under the Apache License, Version 2.0 (the "License");
package cli
import (
"strings"
"testing"
)
func TestValidateSchemaRegistryAgainstCommandRegistryChecksFullIdentity(t *testing.T) {
tool := ToolSpec{Identity: ToolIdentitySpec{
ProductID: "sample",
SourceProductID: "implementation_a",
Name: "run",
CanonicalPath: "sample.run",
Path: "sample.run",
CLIPath: "sample run",
PrimaryCLIPath: "sample run",
Source: "reviewed_command_registry",
}}
registry, err := SchemaRegistryFromRuntime("test", []ProductSpec{{ID: "sample", Tools: []ToolSpec{tool}}})
if err != nil {
t.Fatal(err)
}
base := CommandSpec{
CanonicalPath: "sample.run",
SourceProductID: "implementation_a",
PrimaryCLIPath: "sample run",
Visibility: SchemaVisibilityPublic,
Source: "reviewed_command_registry",
}
for name, test := range map[string]struct {
mutate func(*CommandSpec)
want string
}{
"source product": {
mutate: func(spec *CommandSpec) { spec.SourceProductID = "implementation_b" },
want: "source product",
},
"identity source": {
mutate: func(spec *CommandSpec) { spec.Source = "reviewed_manual_hint" },
want: "identity source",
},
} {
t.Run(name, func(t *testing.T) {
expected := cloneCommandSpec(base)
test.mutate(&expected)
effective, err := newEffectiveCommandRegistry([]CommandSpec{expected})
if err != nil {
t.Fatal(err)
}
err = validateSchemaRegistryAgainstCommandRegistry(registry, effective)
if err == nil || !strings.Contains(err.Error(), test.want) {
t.Fatalf("validation error = %v, want %q", err, test.want)
}
})
}
}
func TestValidateSchemaRegistryAgainstCommandRegistryRejectsAliasViewAsCanonical(t *testing.T) {
baseTool := ToolSpec{Identity: ToolIdentitySpec{
ProductID: "sample",
Name: "run",
CanonicalPath: "sample.run",
Path: "sample.run",
CLIPath: "sample run",
PrimaryCLIPath: "sample run",
Aliases: []string{"sample execute"},
Source: "reviewed_command_registry",
}}
effective, err := newEffectiveCommandRegistry([]CommandSpec{{
CanonicalPath: "sample.run",
PrimaryCLIPath: "sample run",
Aliases: []string{"sample execute"},
Visibility: SchemaVisibilityPublic,
Source: "reviewed_command_registry",
}})
if err != nil {
t.Fatal(err)
}
for name, test := range map[string]struct {
mutate func(*ToolIdentitySpec)
want string
}{
"alternate cli path": {
mutate: func(identity *ToolIdentitySpec) { identity.CLIPath = "sample execute" },
want: "must equal primary_cli_path",
},
"alias marker": {
mutate: func(identity *ToolIdentitySpec) { identity.IsAlias = true },
want: "must have is_alias=false",
},
} {
t.Run(name, func(t *testing.T) {
tool := baseTool
test.mutate(&tool.Identity)
registry := SchemaRegistry{Products: []ProductSpec{{ID: "sample", Tools: []ToolSpec{tool}}}}
err := validateSchemaRegistryAgainstCommandRegistry(registry, effective)
if err == nil || !strings.Contains(err.Error(), test.want) {
t.Fatalf("validation error = %v, want %q", err, test.want)
}
})
}
}