package api import ( "os" "path/filepath" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) const parkedNote = "---\nproposed_wing: radar\nproposal_confidence: 0.40\nproposal_reason: \"text matches the client-content marker\"\ncreated_at: 2026-10-19T08:00:00Z\n---\nBody of the parked note.\n" // brain_pending lists a parked note under its bare filename, so promote and // reject must be able to act on exactly that name (#208: they could not). func TestPromoteNote_ActsOnANoteParkedInNeedsReview(t *testing.T) { dir := t.TempDir() writeParked(t, dir, "unsure.md", parkedNote) rel, err := PromoteNote(dir, PromoteOptions{Filename: "unsure.md", Wing: "homelab", Hall: "facts"}) require.NoError(t, err) assert.Equal(t, "wiki/homelab/facts/unsure.md", rel) got, err := os.ReadFile(filepath.Join(dir, "wiki/homelab/facts/unsure.md")) require.NoError(t, err) assert.Contains(t, string(got), "Body of the parked note.") assert.Contains(t, string(got), "wing: homelab") assert.NotContains(t, string(got), "proposed_wing", "the resolver's proposal is not part of the promoted note") assert.NotContains(t, string(got), "proposal_reason") _, statErr := os.Stat(filepath.Join(dir, "raw", "needs-review", "unsure.md")) assert.ErrorIs(t, statErr, os.ErrNotExist, "the parked note is consumed") pending, err := ListPending(dir) require.NoError(t, err) assert.Empty(t, pending) } func TestRejectNote_ActsOnANoteParkedInNeedsReview(t *testing.T) { dir := t.TempDir() writeParked(t, dir, "unsure.md", parkedNote) rel, err := RejectNote(dir, RejectOptions{Filename: "unsure.md", Reason: "not worth keeping"}) require.NoError(t, err) assert.Equal(t, "raw/rejected/unsure.md", rel) _, statErr := os.Stat(filepath.Join(dir, "raw", "needs-review", "unsure.md")) assert.ErrorIs(t, statErr, os.ErrNotExist) pending, _ := ListPending(dir) assert.Empty(t, pending, "a rejected note is not re-listed") } func TestPromoteNote_ASymlinkedNeedsReviewIsNotRead(t *testing.T) { dir := t.TempDir() outside := t.TempDir() require.NoError(t, os.WriteFile(filepath.Join(outside, "secret.md"), []byte("outside"), 0o644)) require.NoError(t, os.MkdirAll(filepath.Join(dir, "raw"), 0o755)) require.NoError(t, os.Symlink(outside, filepath.Join(dir, "raw", "needs-review"))) _, err := PromoteNote(dir, PromoteOptions{Filename: "secret.md", Wing: "homelab", Hall: "facts"}) assert.Error(t, err) _, statErr := os.Stat(filepath.Join(dir, "wiki/homelab/facts/secret.md")) assert.ErrorIs(t, statErr, os.ErrNotExist) }