You've already forked agentic-coding-workflow
bugfix
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
package projectmemory
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestRenderAgentsMD_GroupsByKindDeterministic(t *testing.T) {
|
||||
entries := []Entry{
|
||||
{ID: uuid.New(), Kind: KindGotcha, Title: "Zebra gotcha", Body: "watch out"},
|
||||
{ID: uuid.New(), Kind: KindDecision, Title: "Use Postgres", Body: "ACID matters", Tags: []string{"db", "arch"}},
|
||||
{ID: uuid.New(), Kind: KindDecision, Title: "Adopt Chi router", Body: "lightweight"},
|
||||
{ID: uuid.New(), Kind: KindConvention, Title: "Tabs not spaces", Body: "gofmt"},
|
||||
}
|
||||
out := renderAgentsMD(entries, nil)
|
||||
|
||||
// Sections appear in canonical kind order: Decisions, Conventions, Gotchas.
|
||||
di := strings.Index(out, "## Decisions")
|
||||
ci := strings.Index(out, "## Conventions")
|
||||
gi := strings.Index(out, "## Gotchas")
|
||||
require.Greater(t, di, 0)
|
||||
require.Greater(t, ci, di)
|
||||
require.Greater(t, gi, ci)
|
||||
|
||||
// Within Decisions, titles are sorted: "Adopt Chi router" before "Use Postgres".
|
||||
require.Less(t, strings.Index(out, "Adopt Chi router"), strings.Index(out, "Use Postgres"))
|
||||
|
||||
// Tags are rendered sorted.
|
||||
require.Contains(t, out, "Tags: arch, db")
|
||||
|
||||
// Generated banner present.
|
||||
require.True(t, strings.HasPrefix(out, agentsMDHeader))
|
||||
|
||||
// Determinism: same input → identical output.
|
||||
require.Equal(t, out, renderAgentsMD(entries, nil))
|
||||
}
|
||||
|
||||
func TestRenderAgentsMD_WorkspaceScoping(t *testing.T) {
|
||||
ws := uuid.New()
|
||||
other := uuid.New()
|
||||
entries := []Entry{
|
||||
{ID: uuid.New(), Kind: KindDecision, Title: "Project-wide", Body: "x"}, // ws nil → always
|
||||
{ID: uuid.New(), Kind: KindDecision, Title: "WS-specific", Body: "y", WorkspaceID: &ws}, // matches ws
|
||||
{ID: uuid.New(), Kind: KindDecision, Title: "Other-WS", Body: "z", WorkspaceID: &other}, // excluded
|
||||
}
|
||||
out := renderAgentsMD(entries, &ws)
|
||||
require.Contains(t, out, "Project-wide")
|
||||
require.Contains(t, out, "WS-specific")
|
||||
require.NotContains(t, out, "Other-WS")
|
||||
|
||||
// With no workspace, only project-wide entries appear.
|
||||
outNil := renderAgentsMD(entries, nil)
|
||||
require.Contains(t, outNil, "Project-wide")
|
||||
require.NotContains(t, outNil, "WS-specific")
|
||||
}
|
||||
|
||||
func TestRenderAgentsMD_Empty(t *testing.T) {
|
||||
out := renderAgentsMD(nil, nil)
|
||||
require.Contains(t, out, "No project memory recorded yet")
|
||||
}
|
||||
Reference in New Issue
Block a user