package tui import ( "errors" "testing" tea "charm.land/bubbletea/v2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestPostUpdateHealthAcknowledgementIsDeferredUntilProgramInit(t *testing.T) { m := NewModel() called := false m.acknowledgeSelfUpdate = func(path string) error { called = true assert.Equal(t, "transaction.json", path) return nil } m.SetPostUpdateHealthAcknowledgement("transaction.json") assert.False(t, called, "configuration must not acknowledge readiness") batch, ok := m.Init()().(tea.BatchMsg) require.True(t, ok) require.Len(t, batch, 2) msg := batch[1]() assert.False(t, called, "the Init command must wait for the initial render") _, ok = msg.(postUpdateRenderReadyMsg) require.True(t, ok) // Bubble Tea performs its initial render before it starts processing the // message emitted by the Init command. updated, acknowledgeCmd := m.Update(msg) m = updated.(*Model) require.NotNil(t, acknowledgeCmd) ack, ok := acknowledgeCmd().(postUpdateHealthAcknowledgedMsg) require.True(t, ok) assert.True(t, called, "the first-render message must trigger acknowledgement") require.NoError(t, ack.err) updated, cmd := m.Update(ack) m = updated.(*Model) assert.Empty(t, m.postUpdateJournal) assert.Nil(t, cmd) } func TestPostUpdateHealthAcknowledgementFailureQuitsForRollback(t *testing.T) { m := NewModel() updated, cmd := m.Update(postUpdateHealthAcknowledgedMsg{err: errors.New("disk full")}) m = updated.(*Model) require.NotNil(t, cmd) _, ok := cmd().(tea.QuitMsg) assert.True(t, ok) assert.Equal(t, StateError, m.state) assert.Contains(t, m.errorMessage, "disk full") }