package memory import ( "os" "strings" "testing" ) func TestWriteIndex_Empty(t *testing.T) { s := newStore(t) if err := s.WriteIndex(nil); err != nil { t.Fatal(err) } b, err := os.ReadFile(s.indexPath()) if err != nil { t.Fatal(err) } if !strings.Contains(string(b), "no facts recorded") { t.Errorf("empty index missing placeholder:\n%s", string(b)) } } func TestWriteIndex_SeparatesPinned(t *testing.T) { s := newStore(t) a := makeFact("alpha", "active fact", TypeUser) p := makeFact("pinned-one", "pinned fact", TypeProject, func(f *Fact) { f.Pin = true }) if err := s.WriteIndex([]*Fact{p, a}); err != nil { t.Fatal(err) } b, err := os.ReadFile(s.indexPath()) if err != nil { t.Fatal(err) } s2 := string(b) iAlpha := strings.Index(s2, "**alpha**") iPinHdr := strings.Index(s2, "## pinned") iPinned := strings.Index(s2, "**pinned-one**") if iAlpha < 0 || iPinHdr < 0 || iPinned < 0 { t.Fatalf("missing expected entries:\n%s", s2) } if iAlpha >= iPinHdr || iPinHdr >= iPinned { t.Errorf("ordering wrong (alpha < pinned-header < pinned-one):\n%s", s2) } } func TestWriteIndex_SeparatesDisabled(t *testing.T) { s := newStore(t) a := makeFact("alpha", "active fact", TypeUser) d := makeFact("muted-one", "disabled fact", TypeFeedback, func(f *Fact) { f.Disabled = true }) if err := s.WriteIndex([]*Fact{d, a}); err != nil { t.Fatal(err) } b, err := os.ReadFile(s.indexPath()) if err != nil { t.Fatal(err) } s2 := string(b) iAlpha := strings.Index(s2, "**alpha**") iDisHdr := strings.Index(s2, "## disabled") iMuted := strings.Index(s2, "**muted-one**") if iAlpha < 0 || iDisHdr < 0 || iMuted < 0 { t.Fatalf("missing expected entries:\n%s", s2) } if iAlpha >= iDisHdr || iDisHdr >= iMuted { t.Errorf("ordering wrong (alpha < disabled-header < muted-one):\n%s", s2) } } func TestWriteIndex_DisabledOverridesPin(t *testing.T) { s := newStore(t) pd := makeFact("pinned-muted", "pinned and disabled", TypeProject, func(f *Fact) { f.Pin = true f.Disabled = true }) if err := s.WriteIndex([]*Fact{pd}); err != nil { t.Fatal(err) } b, _ := os.ReadFile(s.indexPath()) s2 := string(b) if strings.Contains(s2, "## pinned") { t.Errorf("pinned+disabled fact must not create a ## pinned section:\n%s", s2) } iDisHdr := strings.Index(s2, "## disabled") iFact := strings.Index(s2, "**pinned-muted**") if iDisHdr < 0 || iFact < 0 || iDisHdr >= iFact { t.Errorf("pinned+disabled fact must list under ## disabled:\n%s", s2) } } func TestWriteIndex_AllDisabled(t *testing.T) { s := newStore(t) d := makeFact("muted-one", "disabled fact", TypeFeedback, func(f *Fact) { f.Disabled = true }) if err := s.WriteIndex([]*Fact{d}); err != nil { t.Fatal(err) } b, _ := os.ReadFile(s.indexPath()) s2 := string(b) if !strings.Contains(s2, "_(no active facts)_") { t.Errorf("all-disabled store must print the no-active-facts placeholder:\n%s", s2) } if !strings.Contains(s2, "## disabled") { t.Errorf("all-disabled store must still render the ## disabled section:\n%s", s2) } } func TestWriteIndex_AlphabeticalActive(t *testing.T) { s := newStore(t) facts := []*Fact{ makeFact("zeta", "z", TypeUser), makeFact("alpha", "a", TypeUser), makeFact("middle", "m", TypeUser), } if err := s.WriteIndex(facts); err != nil { t.Fatal(err) } b, _ := os.ReadFile(s.indexPath()) s2 := string(b) ia := strings.Index(s2, "**alpha**") im := strings.Index(s2, "**middle**") iz := strings.Index(s2, "**zeta**") if ia >= im || im >= iz { t.Errorf("expected alpha < middle < zeta in:\n%s", s2) } }