fix: stabilize beads and config tests (#560)
* fix: stabilize beads and config tests * fix: remove t.Parallel() incompatible with t.Setenv() The test now uses t.Setenv() which cannot be used with t.Parallel() in Go. This completes the conflict resolution from the rebase. * style: fix gofmt issue in beads_test.go Remove extra blank line in comment block. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -23,6 +23,9 @@ import (
|
|||||||
// this indicates an errant redirect file that should be removed. The function logs a
|
// this indicates an errant redirect file that should be removed. The function logs a
|
||||||
// warning and returns the original beads directory.
|
// warning and returns the original beads directory.
|
||||||
func ResolveBeadsDir(workDir string) string {
|
func ResolveBeadsDir(workDir string) string {
|
||||||
|
if filepath.Base(workDir) == ".beads" {
|
||||||
|
workDir = filepath.Dir(workDir)
|
||||||
|
}
|
||||||
beadsDir := filepath.Join(workDir, ".beads")
|
beadsDir := filepath.Join(workDir, ".beads")
|
||||||
redirectPath := filepath.Join(beadsDir, "redirect")
|
redirectPath := filepath.Join(beadsDir, "redirect")
|
||||||
|
|
||||||
|
|||||||
@@ -1804,7 +1804,6 @@ func TestSetupRedirect(t *testing.T) {
|
|||||||
// TestAgentBeadTombstoneBug demonstrates the bd bug where `bd delete --hard --force`
|
// TestAgentBeadTombstoneBug demonstrates the bd bug where `bd delete --hard --force`
|
||||||
// creates tombstones instead of truly deleting records.
|
// creates tombstones instead of truly deleting records.
|
||||||
//
|
//
|
||||||
//
|
|
||||||
// This test documents the bug behavior:
|
// This test documents the bug behavior:
|
||||||
// 1. Create agent bead
|
// 1. Create agent bead
|
||||||
// 2. Delete with --hard --force (supposed to permanently delete)
|
// 2. Delete with --hard --force (supposed to permanently delete)
|
||||||
@@ -2134,7 +2133,7 @@ func TestCloseAndClearAgentBead_FieldClearing(t *testing.T) {
|
|||||||
for i, tc := range tests {
|
for i, tc := range tests {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
// Create unique agent ID for each test case
|
// Create unique agent ID for each test case
|
||||||
agentID := fmt.Sprintf("test-testrig-%s-%d", tc.fields.RoleType, i)
|
agentID := fmt.Sprintf("test-testrig-%s-case-%c", tc.fields.RoleType, 'a'+i)
|
||||||
|
|
||||||
// Step 1: Create agent bead with specified fields
|
// Step 1: Create agent bead with specified fields
|
||||||
_, err := bd.CreateAgentBead(agentID, "Test agent", tc.fields)
|
_, err := bd.CreateAgentBead(agentID, "Test agent", tc.fields)
|
||||||
@@ -2371,7 +2370,7 @@ func TestCloseAndClearAgentBead_ReasonVariations(t *testing.T) {
|
|||||||
|
|
||||||
for i, tc := range tests {
|
for i, tc := range tests {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
agentID := fmt.Sprintf("test-testrig-polecat-reason%d", i)
|
agentID := fmt.Sprintf("test-testrig-polecat-reason-%c", 'a'+i)
|
||||||
|
|
||||||
// Create agent bead
|
// Create agent bead
|
||||||
_, err := bd.CreateAgentBead(agentID, "Test agent", &AgentFields{
|
_, err := bd.CreateAgentBead(agentID, "Test agent", &AgentFields{
|
||||||
|
|||||||
@@ -1212,11 +1212,18 @@ func TestBuildStartupCommand_UsesRigAgentWhenRigPathProvided(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildStartupCommand_UsesRoleAgentsFromTownSettings(t *testing.T) {
|
func TestBuildStartupCommand_UsesRoleAgentsFromTownSettings(t *testing.T) {
|
||||||
skipIfAgentBinaryMissing(t, "gemini", "codex")
|
|
||||||
t.Parallel()
|
|
||||||
townRoot := t.TempDir()
|
townRoot := t.TempDir()
|
||||||
rigPath := filepath.Join(townRoot, "testrig")
|
rigPath := filepath.Join(townRoot, "testrig")
|
||||||
|
|
||||||
|
binDir := t.TempDir()
|
||||||
|
for _, name := range []string{"gemini", "codex"} {
|
||||||
|
path := filepath.Join(binDir, name)
|
||||||
|
if err := os.WriteFile(path, []byte("#!/bin/sh\nexit 0\n"), 0755); err != nil {
|
||||||
|
t.Fatalf("write %s stub: %v", name, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t.Setenv("PATH", binDir+string(os.PathListSeparator)+os.Getenv("PATH"))
|
||||||
|
|
||||||
// Configure town settings with role_agents
|
// Configure town settings with role_agents
|
||||||
townSettings := NewTownSettings()
|
townSettings := NewTownSettings()
|
||||||
townSettings.DefaultAgent = "claude"
|
townSettings.DefaultAgent = "claude"
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMain(m *testing.M) {
|
||||||
|
stubDir, err := os.MkdirTemp("", "gt-agent-bin-*")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "create stub dir: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
stub := []byte("#!/bin/sh\nexit 0\n")
|
||||||
|
binaries := []string{
|
||||||
|
"claude",
|
||||||
|
"gemini",
|
||||||
|
"codex",
|
||||||
|
"cursor-agent",
|
||||||
|
"auggie",
|
||||||
|
"amp",
|
||||||
|
}
|
||||||
|
for _, name := range binaries {
|
||||||
|
path := filepath.Join(stubDir, name)
|
||||||
|
if err := os.WriteFile(path, stub, 0755); err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "write stub %s: %v\n", name, err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
originalPath := os.Getenv("PATH")
|
||||||
|
_ = os.Setenv("PATH", stubDir+string(os.PathListSeparator)+originalPath)
|
||||||
|
|
||||||
|
code := m.Run()
|
||||||
|
|
||||||
|
_ = os.Setenv("PATH", originalPath)
|
||||||
|
_ = os.RemoveAll(stubDir)
|
||||||
|
os.Exit(code)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user