Migrate prompt fixtures to direct definitions

This commit is contained in:
2026-10-17 18:39:38 +00:00
parent 66b2994e48
commit c1fa18629d
9 changed files with 307 additions and 316 deletions

View File

@@ -17,41 +17,40 @@ import (
const requirementsCommandPrompt = `prompts:
briefing:
"2":
default_profile: editorial
session_id: '{{input "session-only"}} {{.session_variable}}'
messages:
- role: user
content: '{{if .mode}}{{input "notes"}}{{end}}'
output:
format: text
validation_mode: none
version: "2"
default_profile: editorial
session_id: '{{input "session-only"}} {{.session_variable}}'
messages:
- role: user
content: '{{if .mode}}{{input "notes"}}{{end}}'
output:
format: text
validation_mode: none
required-variable:
"1":
default_profile: editorial
messages:
- role: user
content: '{{.required}}'
output:
format: text
validation_mode: none
ambiguous:
"1":
default_profile: editorial
messages:
- role: user
content: "First version"
output:
format: text
validation_mode: none
"2":
default_profile: editorial
messages:
- role: user
content: "Second version"
output:
format: text
validation_mode: none
version: "1"
default_profile: editorial
messages:
- role: user
content: '{{.required}}'
output:
format: text
validation_mode: none
ambiguous-first:
default_profile: editorial
messages:
- role: user
content: "First definition"
output:
format: text
validation_mode: none
ambiguous-second:
default_profile: editorial
messages:
- role: user
content: "Second definition"
output:
format: text
validation_mode: none
backends:
local:
endpoint: "https://example.invalid/v1"
@@ -101,7 +100,7 @@ func executeRequirementsAgainstNative(t *testing.T, engine *promptkit.Engine, re
return native, outcome, actual, diagnostic.String()
}
func TestRequirementsCommandMatchesNativePromptKitDiscovery(t *testing.T) {
func TestRequirementsCommandForwardsNativeRequestAndProjectsInspection(t *testing.T) {
engine := requirementsCommandEngine(t)
for _, test := range []struct {
name string
@@ -109,82 +108,50 @@ func TestRequirementsCommandMatchesNativePromptKitDiscovery(t *testing.T) {
args []string
}{
{
name: "partial conditional discovery",
request: promptkit.RequirementInspectionRequest{PromptID: "briefing", PromptVersion: "2", ProfileID: "editorial"},
args: []string{"promptkit", "requirements", "show", "briefing", "--version", "2", "--profile", "editorial"},
},
{
name: "supplied branch variable",
request: promptkit.RequirementInspectionRequest{
PromptID: "briefing", PromptVersion: "2", ProfileID: "editorial", Vars: map[string]string{"mode": "full"},
},
args: []string{"promptkit", "requirements", "show", "briefing", "--version", "2", "--profile", "editorial", "--var", "mode=full", "--format", "yaml"},
},
{
name: "complete with an unsupplied required variable",
request: promptkit.RequirementInspectionRequest{PromptID: "required-variable", PromptVersion: "1", ProfileID: "editorial"},
args: []string{"promptkit", "requirements", "show", "required-variable", "--version", "1", "--profile", "editorial"},
},
{
name: "native version and default profile selection",
request: promptkit.RequirementInspectionRequest{PromptID: "briefing"},
args: []string{"promptkit", "requirements", "show", "briefing"},
},
{
name: "session template discovery",
name: "conditional discovery",
request: promptkit.RequirementInspectionRequest{PromptID: "briefing", ProfileID: "editorial"},
args: []string{"promptkit", "requirements", "show", "briefing", "--profile", "editorial"},
},
{
name: "session ID bypasses the session template",
name: "supplied branch variable",
request: promptkit.RequirementInspectionRequest{PromptID: "briefing", ProfileID: "editorial", Vars: map[string]string{"mode": "full"}},
args: []string{"promptkit", "requirements", "show", "briefing", "--profile", "editorial", "--var", "mode=full", "--format", "yaml"},
},
{
name: "prompt with a required variable",
request: promptkit.RequirementInspectionRequest{PromptID: "required-variable", ProfileID: "editorial"},
args: []string{"promptkit", "requirements", "show", "required-variable", "--profile", "editorial"},
},
{
name: "default profile selection",
request: promptkit.RequirementInspectionRequest{PromptID: "briefing"},
args: []string{"promptkit", "requirements", "show", "briefing"},
},
{
name: "first distinct prompt ID",
request: promptkit.RequirementInspectionRequest{PromptID: "ambiguous-first", ProfileID: "editorial"},
args: []string{"promptkit", "requirements", "show", "ambiguous-first", "--profile", "editorial"},
},
{
name: "second distinct prompt ID",
request: promptkit.RequirementInspectionRequest{PromptID: "ambiguous-second", ProfileID: "editorial"},
args: []string{"promptkit", "requirements", "show", "ambiguous-second", "--profile", "editorial"},
},
{
name: "session template context",
request: promptkit.RequirementInspectionRequest{PromptID: "briefing", ProfileID: "editorial"},
args: []string{"promptkit", "requirements", "show", "briefing", "--profile", "editorial"},
},
{
name: "session ID context",
request: promptkit.RequirementInspectionRequest{PromptID: "briefing", ProfileID: "editorial", SessionID: "session-42"},
args: []string{"promptkit", "requirements", "show", "briefing", "--profile", "editorial", "--session-id", "session-42"},
},
} {
t.Run(test.name, func(t *testing.T) {
native, outcome, _, _ := executeRequirementsAgainstNative(t, engine, test.request, test.args)
_, outcome, _, _ := executeRequirementsAgainstNative(t, engine, test.request, test.args)
if outcome.Status != 0 {
t.Fatalf("partial or complete inspection returned status %d", outcome.Status)
}
switch test.name {
case "partial conditional discovery":
if native.Complete || len(native.Issues) == 0 || len(native.Inputs) == 0 {
t.Fatalf("partial discovery lost useful evidence: %#v", native)
}
case "supplied branch variable":
if !native.Complete || len(native.Issues) != 0 {
t.Fatalf("resolved discovery = %#v", native)
}
case "complete with an unsupplied required variable":
if !native.Complete || len(native.Variables) != 1 || native.Variables[0].Supplied {
t.Fatalf("complete discovery with unsupplied variable = %#v", native)
}
case "native version and default profile selection":
if native.PromptVersion != "2" || native.ProfileID != "editorial" {
t.Fatalf("native default selection = %#v", native)
}
case "session template discovery":
foundInput, foundVariable := false, false
for _, input := range native.Inputs {
foundInput = foundInput || input.Name == "session-only"
}
for _, variable := range native.Variables {
foundVariable = foundVariable || variable.Name == "session_variable"
}
if !foundInput || !foundVariable {
t.Fatalf("session template dependencies missing: %#v", native)
}
case "session ID bypasses the session template":
for _, input := range native.Inputs {
if input.Name == "session-only" {
t.Fatalf("session template input remained with session ID: %#v", native.Inputs)
}
}
for _, variable := range native.Variables {
if variable.Name == "session_variable" {
t.Fatalf("session template variable remained with session ID: %#v", native.Variables)
}
}
t.Fatalf("inspection returned status %d", outcome.Status)
}
})
}
@@ -193,40 +160,38 @@ func TestRequirementsCommandMatchesNativePromptKitDiscovery(t *testing.T) {
func TestRequirementsCommandPreservesNativeSelectionErrors(t *testing.T) {
engine := requirementsCommandEngine(t)
for _, test := range []struct {
name string
request promptkit.RequirementInspectionRequest
args []string
cause error
name string
args []string
cause error
}{
{
name: "missing prompt",
request: promptkit.RequirementInspectionRequest{PromptID: "missing", PromptVersion: "2", ProfileID: "editorial"},
args: []string{"promptkit", "requirements", "show", "missing", "--version", "2", "--profile", "editorial"},
cause: promptkit.ErrPromptNotFound,
name: "missing prompt",
args: []string{"promptkit", "requirements", "show", "missing", "--profile", "editorial"},
cause: promptkit.ErrPromptNotFound,
},
{
name: "missing profile",
request: promptkit.RequirementInspectionRequest{PromptID: "briefing", PromptVersion: "2", ProfileID: "missing"},
args: []string{"promptkit", "requirements", "show", "briefing", "--version", "2", "--profile", "missing"},
cause: promptkit.ErrProfileNotFound,
name: "missing profile",
args: []string{"promptkit", "requirements", "show", "briefing", "--profile", "missing"},
cause: promptkit.ErrProfileNotFound,
},
{
name: "ambiguous prompt version",
request: promptkit.RequirementInspectionRequest{PromptID: "ambiguous", ProfileID: "editorial"},
args: []string{"promptkit", "requirements", "show", "ambiguous", "--profile", "editorial"},
cause: promptkit.ErrPromptLoad,
name: "removed prompt version flag",
args: []string{"promptkit", "requirements", "show", "briefing", "--version", "2", "--profile", "editorial"},
cause: nil,
},
} {
t.Run(test.name, func(t *testing.T) {
_, nativeErr := engine.InspectRequirements(context.Background(), test.request)
if !errors.Is(nativeErr, test.cause) {
t.Fatalf("native selection error = %v, want %v", nativeErr, test.cause)
}
app := newPromptTestApp(t, Command(FromEngine[int, int](func(context.Context, ckconfig.Selection, int, int) (*promptkit.Engine, error) {
return engine, nil
})))
var output bytes.Buffer
outcome := app.Execute(context.Background(), test.args, commandkit.Streams{Out: &output, Err: io.Discard})
if test.cause == nil {
if outcome.Kind != commandkit.OutcomeUsage || output.Len() != 0 {
t.Fatalf("removed flag outcome = %#v output=%q", outcome, output.String())
}
return
}
if outcome.Kind != commandkit.OutcomeOperational || outcome.Status != 1 || !errors.Is(outcome.Cause, test.cause) || output.Len() != 0 {
t.Fatalf("native selection outcome = %#v output=%q", outcome, output.String())
}