//go:build unix // Notices cross the session boundary and clear on a real submitted turn. A // unit test with fabricated lifecycle messages cannot prove either daemon // command. package e2e import ( "strings" "testing" "albedo/cli/internal/tui" tea "charm.land/bubbletea/v2" ) func TestTUINoticeMovesToANewSessionAndClearsOnSend(t *testing.T) { profile := providerRoute(t, echoReply) d := driveTUI(t, nil) const notice = "provider selected for new sessions" d.App.AddNotice(notice) // The created session's stream would block a synchronous walk, so only the // create command runs. d.Update(d.Update(tui.ChatNewSessionMsg{})()) if d.App.ActiveSession == nil || !strings.Contains(d.View(), notice) { t.Fatalf("notice did not follow the real new session:\n%s", d.View()) } d.connected() // Enter batches the send with the spinner; only the send reaches the // daemon. d.App.Chat.TextArea.SetValue("clear the notice") batch, _ := d.Update(tea.KeyPressMsg{Code: tea.KeyEnter})().(tea.BatchMsg) for _, command := range batch { if msg, ok := command().(tui.ChatTurnSentMsg); ok { d.Update(msg) } } if len(d.App.Chat.Notices) != 0 || strings.Contains(d.View(), notice) { t.Fatalf("notice survived the submitted turn %v:\n%s", d.App.Chat.Notices, d.View()) } waitIdle(t, d.App.ActiveSession.ID, profile, 1) }