package brain_test import ( "path/filepath" "testing" "github.com/mathiasbq/hyperguild/ingestion/internal/brain" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestNotePath_Valid(t *testing.T) { got, err := brain.NotePath("/b", "jepa-fx", "decisions", "val-vol-r2") require.NoError(t, err) assert.Equal(t, filepath.Join("/b", "wiki", "jepa-fx", "decisions", "val-vol-r2.md"), got) } func TestNotePath_StripsMdSuffix(t *testing.T) { got, err := brain.NotePath("/b", "x", "facts", "note.md") require.NoError(t, err) assert.Equal(t, filepath.Join("/b", "wiki", "x", "facts", "note.md"), got) } func TestNotePath_SanitisesWingAndSlug(t *testing.T) { got, err := brain.NotePath("/b", "Jepa FX!", "facts", "Val Vol R2") require.NoError(t, err) assert.Equal(t, filepath.Join("/b", "wiki", "jepa-fx", "facts", "val-vol-r2.md"), got) } func TestNotePath_RejectsInvalidHall(t *testing.T) { _, err := brain.NotePath("/b", "x", "garbage", "y") require.Error(t, err) assert.Contains(t, err.Error(), "invalid hall") } func TestNotePath_RejectsEmptyWing(t *testing.T) { _, err := brain.NotePath("/b", "!!!", "facts", "y") require.Error(t, err) assert.Contains(t, err.Error(), "invalid wing") } func TestNotePath_RejectsEmptySlug(t *testing.T) { _, err := brain.NotePath("/b", "x", "facts", "!!!") require.Error(t, err) assert.Contains(t, err.Error(), "invalid slug") } func TestSanitise(t *testing.T) { cases := map[string]string{ "Jepa-FX": "jepa-fx", " foo bar ": "foo-bar", "Val/Vol\\R2.md": "val-vol-r2-md", "!!!": "", "___leading": "leading", "trailing___": "trailing", "multi---hyphen": "multi-hyphen", "UPPER 123 mixed": "upper-123-mixed", } for in, want := range cases { t.Run(in, func(t *testing.T) { assert.Equal(t, want, brain.Sanitise(in)) }) } } func TestIsValidHall(t *testing.T) { for _, h := range []string{"facts", "decisions", "failures", "hypotheses", "sources"} { assert.True(t, brain.IsValidHall(h), h) } for _, h := range []string{"", "Facts", "facts ", "rooms", "concepts", "entities"} { assert.False(t, brain.IsValidHall(h), h) } }