Migrate prompt fixtures to direct definitions
This commit is contained in:
@@ -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())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user