80 lines
2.1 KiB
Go
80 lines
2.1 KiB
Go
|
|
package workspace
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/stretchr/testify/assert"
|
||
|
|
"github.com/stretchr/testify/require"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestParseAgentID_Good(t *testing.T) {
|
||
|
|
provider, name, err := parseAgentID("claude-opus/qa")
|
||
|
|
require.NoError(t, err)
|
||
|
|
assert.Equal(t, "claude-opus", provider)
|
||
|
|
assert.Equal(t, "qa", name)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestParseAgentID_Bad(t *testing.T) {
|
||
|
|
tests := []string{
|
||
|
|
"noslash",
|
||
|
|
"/missing-provider",
|
||
|
|
"missing-name/",
|
||
|
|
"",
|
||
|
|
}
|
||
|
|
for _, id := range tests {
|
||
|
|
_, _, err := parseAgentID(id)
|
||
|
|
assert.Error(t, err, "expected error for: %q", id)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestAgentContextPath(t *testing.T) {
|
||
|
|
path := agentContextPath("/ws/p101/i343", "claude-opus", "qa")
|
||
|
|
assert.Equal(t, "/ws/p101/i343/agents/claude-opus/qa", path)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestUpdateAgentManifest_Good(t *testing.T) {
|
||
|
|
tmp := t.TempDir()
|
||
|
|
agentDir := filepath.Join(tmp, "agents", "test-provider", "test-agent")
|
||
|
|
require.NoError(t, os.MkdirAll(agentDir, 0755))
|
||
|
|
|
||
|
|
updateAgentManifest(agentDir, "test-provider", "test-agent")
|
||
|
|
|
||
|
|
data, err := os.ReadFile(filepath.Join(agentDir, "manifest.json"))
|
||
|
|
require.NoError(t, err)
|
||
|
|
|
||
|
|
var m AgentManifest
|
||
|
|
require.NoError(t, json.Unmarshal(data, &m))
|
||
|
|
assert.Equal(t, "test-provider", m.Provider)
|
||
|
|
assert.Equal(t, "test-agent", m.Name)
|
||
|
|
assert.False(t, m.CreatedAt.IsZero())
|
||
|
|
assert.False(t, m.LastSeen.IsZero())
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestUpdateAgentManifest_PreservesCreatedAt(t *testing.T) {
|
||
|
|
tmp := t.TempDir()
|
||
|
|
agentDir := filepath.Join(tmp, "agents", "p", "a")
|
||
|
|
require.NoError(t, os.MkdirAll(agentDir, 0755))
|
||
|
|
|
||
|
|
// First call sets created_at
|
||
|
|
updateAgentManifest(agentDir, "p", "a")
|
||
|
|
|
||
|
|
data, err := os.ReadFile(filepath.Join(agentDir, "manifest.json"))
|
||
|
|
require.NoError(t, err)
|
||
|
|
var first AgentManifest
|
||
|
|
require.NoError(t, json.Unmarshal(data, &first))
|
||
|
|
|
||
|
|
// Second call should preserve created_at
|
||
|
|
updateAgentManifest(agentDir, "p", "a")
|
||
|
|
|
||
|
|
data, err = os.ReadFile(filepath.Join(agentDir, "manifest.json"))
|
||
|
|
require.NoError(t, err)
|
||
|
|
var second AgentManifest
|
||
|
|
require.NoError(t, json.Unmarshal(data, &second))
|
||
|
|
|
||
|
|
assert.Equal(t, first.CreatedAt, second.CreatedAt)
|
||
|
|
assert.True(t, second.LastSeen.After(first.CreatedAt) || second.LastSeen.Equal(first.CreatedAt))
|
||
|
|
}
|