agent/pkg/runner/paths_test.go
Virgil bf3aae5766 test(ax): align provider and runner path specs
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-29 22:07:52 +00:00

145 lines
3.6 KiB
Go

// SPDX-License-Identifier: EUPL-1.2
package runner
import (
"testing"
"time"
"dappco.re/go/agent/pkg/agentic"
core "dappco.re/go/core"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestPaths_CoreRoot_Good(t *testing.T) {
t.Setenv("CORE_WORKSPACE", "/tmp/core-root")
assert.Equal(t, "/tmp/core-root", CoreRoot())
}
func TestPaths_CoreRoot_Bad(t *testing.T) {
t.Setenv("CORE_WORKSPACE", "")
home := core.Env("DIR_HOME")
assert.Equal(t, home+"/Code/.core", CoreRoot())
}
func TestPaths_CoreRoot_Ugly(t *testing.T) {
t.Setenv("CORE_WORKSPACE", "/tmp/core-røot")
assert.Equal(t, "/tmp/core-røot", CoreRoot())
}
func TestPaths_WorkspaceRoot_Good(t *testing.T) {
t.Setenv("CORE_WORKSPACE", "/tmp/core-root")
assert.Equal(t, "/tmp/core-root/workspace", WorkspaceRoot())
}
func TestPaths_WorkspaceRoot_Bad(t *testing.T) {
t.Setenv("CORE_WORKSPACE", "")
home := core.Env("DIR_HOME")
assert.Equal(t, home+"/Code/.core/workspace", WorkspaceRoot())
}
func TestPaths_WorkspaceRoot_Ugly(t *testing.T) {
t.Setenv("CORE_WORKSPACE", "/srv/core/tenant-a")
assert.Equal(t, "/srv/core/tenant-a/workspace", WorkspaceRoot())
}
func TestPaths_ReadStatus_Good(t *testing.T) {
wsDir := t.TempDir()
status := &agentic.WorkspaceStatus{
Status: "completed",
Agent: "codex",
Repo: "go-io",
Task: "Finish AX cleanup",
Branch: "agent/ax-cleanup",
PID: 42,
ProcessID: "proc-123",
StartedAt: time.Now(),
UpdatedAt: time.Now(),
Question: "Ready?",
Runs: 2,
PRURL: "https://forge.test/core/go-io/pulls/12",
}
require.True(t, agentic.LocalFs().WriteAtomic(agentic.WorkspaceStatusPath(wsDir), core.JSONMarshalString(status)).OK)
st, err := ReadStatus(wsDir)
require.NoError(t, err)
assert.Equal(t, "completed", st.Status)
assert.Equal(t, "codex", st.Agent)
assert.Equal(t, "go-io", st.Repo)
assert.Equal(t, "agent/ax-cleanup", st.Branch)
assert.Equal(t, 2, st.Runs)
}
func TestPaths_ReadStatus_Bad(t *testing.T) {
wsDir := t.TempDir()
require.True(t, agentic.LocalFs().WriteAtomic(agentic.WorkspaceStatusPath(wsDir), "{not-json").OK)
_, err := ReadStatus(wsDir)
assert.Error(t, err)
}
func TestPaths_ReadStatus_Ugly(t *testing.T) {
_, err := ReadStatus(t.TempDir())
assert.Error(t, err)
}
func TestPaths_WriteStatus_Good(t *testing.T) {
wsDir := t.TempDir()
WriteStatus(wsDir, &WorkspaceStatus{
Status: "running",
Agent: "codex",
Repo: "go-io",
Task: "Track workspace",
Branch: "agent/ax-cleanup",
Runs: 1,
})
st, err := ReadStatus(wsDir)
require.NoError(t, err)
assert.Equal(t, "running", st.Status)
assert.Equal(t, "codex", st.Agent)
assert.Equal(t, "go-io", st.Repo)
assert.Equal(t, "agent/ax-cleanup", st.Branch)
assert.Equal(t, 1, st.Runs)
agenticStatus, err := agentic.ReadStatus(wsDir)
require.NoError(t, err)
assert.False(t, agenticStatus.UpdatedAt.IsZero())
}
func TestPaths_WriteStatus_Bad(t *testing.T) {
wsDir := t.TempDir()
WriteStatus(wsDir, nil)
assert.False(t, agentic.LocalFs().Read(agentic.WorkspaceStatusPath(wsDir)).OK)
}
func TestPaths_WriteStatus_Ugly(t *testing.T) {
wsDir := t.TempDir()
WriteStatus(wsDir, &WorkspaceStatus{
Status: "running",
Agent: "codex",
Repo: "go-io",
Task: "First run",
})
WriteStatus(wsDir, &WorkspaceStatus{
Status: "completed",
Agent: "claude",
Repo: "go-io",
Task: "Second run",
Branch: "agent/ax-cleanup",
StartedAt: time.Now(),
Runs: 3,
})
st, err := ReadStatus(wsDir)
require.NoError(t, err)
assert.Equal(t, "completed", st.Status)
assert.Equal(t, "claude", st.Agent)
assert.Equal(t, "agent/ax-cleanup", st.Branch)
assert.Equal(t, 3, st.Runs)
}