// internal/session/history_test.go package session_test import ( "strings" "testing" "time" "github.com/mathiasbq/supervisor/internal/session" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestFormatHistoryEmpty(t *testing.T) { result := session.FormatHistory(nil, "") assert.Equal(t, "", result) } func TestFormatHistoryFormatsEntries(t *testing.T) { entries := []session.Entry{ { Skill: "tdd", Phase: "red", FinalStatus: "pass", FilePath: "internal/foo/foo_test.go", Message: "wrote failing test for Foo", Timestamp: time.Now(), }, } result := session.FormatHistory(entries, "") assert.Contains(t, result, "## Session history") assert.Contains(t, result, "Phase: red") assert.Contains(t, result, "wrote failing test for Foo") assert.Contains(t, result, "internal/foo/foo_test.go") } func TestFormatHistoryExcludesCurrentPhase(t *testing.T) { entries := []session.Entry{ {Skill: "tdd", Phase: "red", Message: "red done", FinalStatus: "pass"}, {Skill: "tdd", Phase: "green", Message: "green done", FinalStatus: "pass"}, } result := session.FormatHistory(entries, "green") assert.Contains(t, result, "red done") assert.NotContains(t, result, "green done") } func TestPrependHistoryNoSessionID(t *testing.T) { result := session.PrependHistory("", "", "review", "do the task") assert.Equal(t, "do the task", result) } func TestPrependHistoryNoLog(t *testing.T) { dir := t.TempDir() result := session.PrependHistory(dir, "sess-abc", "review", "do the task") assert.Equal(t, "do the task", result) } func TestPrependHistoryPrependsHistory(t *testing.T) { dir := t.TempDir() entry := session.Entry{ SessionID: "sess-abc", Skill: "tdd", Phase: "red", FinalStatus: "pass", Message: "wrote test", Timestamp: time.Now(), } require.NoError(t, session.Append(dir, "sess-abc", entry)) result := session.PrependHistory(dir, "sess-abc", "review", "do the task") assert.Contains(t, result, "## Session history") assert.Contains(t, result, "wrote test") assert.True(t, strings.HasSuffix(result, "do the task")) } func TestPrependHistoryExcludesCurrentPhase(t *testing.T) { dir := t.TempDir() require.NoError(t, session.Append(dir, "sess-abc", session.Entry{ SessionID: "sess-abc", Skill: "tdd", Phase: "red", FinalStatus: "pass", Message: "red done", Timestamp: time.Now(), })) require.NoError(t, session.Append(dir, "sess-abc", session.Entry{ SessionID: "sess-abc", Skill: "tdd", Phase: "green", FinalStatus: "pass", Message: "green done", Timestamp: time.Now(), })) result := session.PrependHistory(dir, "sess-abc", "green", "do the task") assert.Contains(t, result, "red done") assert.NotContains(t, result, "green done") }