Skip to content

Commit 685f759

Browse files
authored
fix: <enter> on empty rows (#40)
1 parent d671e55 commit 685f759

File tree

6 files changed

+63
-18
lines changed

6 files changed

+63
-18
lines changed

internal/app/app_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,11 @@ func requireCmdMsg(tb testing.TB, expected tea.Msg, cmd tea.Cmd) {
7373

7474
if batch, ok := msg.(tea.BatchMsg); ok {
7575
for _, cmd := range batch {
76-
if cmd() == expected {
76+
msg := cmd()
77+
78+
tb.Logf("%T: %v\n", msg, msg)
79+
80+
if msg == expected {
7781
return
7882
}
7983
}

internal/app/helper.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func (h helper) handleOpenJSONRowRequestedMsg(
9696
previousState state,
9797
) (tea.Model, tea.Cmd) {
9898
if msg.Index < 0 || msg.Index >= len(msg.LogEntries) {
99-
return nil, nil
99+
return previousState, nil
100100
}
101101

102102
logEntry := msg.LogEntries[msg.Index]

internal/app/statefiltered.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ func (s StateFiltered) handleFilterKeyClickedMsg() (tea.Model, tea.Cmd) {
100100
}
101101

102102
func (s StateFiltered) handleRequestOpenJSON() (tea.Model, tea.Cmd) {
103+
if len(s.logEntries) == 0 {
104+
return s, events.BackKeyClicked
105+
}
106+
103107
return s, events.OpenJSONRowRequested(s.logEntries, s.table.Cursor())
104108
}
105109

internal/app/statefiltering_test.go

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ func TestStateFiltering(t *testing.T) {
9696
}
9797

9898
func TestStateFilteringReset(t *testing.T) {
99+
t.Parallel()
100+
99101
const termIncluded = "included"
100102

101103
const jsonFile = `
@@ -128,24 +130,42 @@ func TestStateFilteringReset(t *testing.T) {
128130
_, ok = model.(app.StateFiltered)
129131
assert.Truef(t, ok, "%s", model)
130132

131-
rendered = model.View()
133+
t.Run("record_not_included", func(t *testing.T) {
134+
t.Parallel()
135+
136+
rendered := model.View()
132137

133-
index := strings.Index(rendered, "filtered by:")
134-
if index > 0 {
135-
rendered = rendered[:index]
136-
}
138+
index := strings.Index(rendered, "filtered by:")
139+
if assert.Greater(t, index, 0) {
140+
rendered = rendered[:index]
141+
}
137142

138-
assert.NotContains(t, rendered, termIncluded)
143+
assert.NotContains(t, rendered, termIncluded)
139144

140-
// Come back
141-
model = handleUpdate(model, tea.KeyMsg{
142-
Type: tea.KeyEsc,
145+
// Come back
146+
model := handleUpdate(model, tea.KeyMsg{
147+
Type: tea.KeyEsc,
148+
})
149+
150+
_, ok = model.(app.StateLoaded)
151+
assert.Truef(t, ok, "%s", model)
152+
153+
// Assert.
154+
rendered = model.View()
155+
assert.Contains(t, rendered, termIncluded)
143156
})
144157

145-
_, ok = model.(app.StateLoaded)
146-
assert.Truef(t, ok, "%s", model)
158+
t.Run("record_not_included", func(t *testing.T) {
159+
t.Parallel()
147160

148-
// Assert.
149-
rendered = model.View()
150-
assert.Contains(t, rendered, termIncluded)
161+
// Try to open a record where there are no records.
162+
model := handleUpdate(model, tea.KeyMsg{
163+
Type: tea.KeyEnter,
164+
})
165+
166+
assert.NotNil(t, model)
167+
168+
_, ok := model.(app.StateLoaded)
169+
assert.Truef(t, ok, "%s", model)
170+
})
151171
}

internal/app/stateloaded.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ func (s StateLoaded) handleArrowUpKeyClicked() tea.Cmd {
108108
}
109109

110110
func (s StateLoaded) handleRequestOpenJSON() (tea.Model, tea.Cmd) {
111+
if len(s.logEntries) == 0 {
112+
return s, tea.Quit
113+
}
114+
111115
return s, events.OpenJSONRowRequested(s.logEntries, s.table.Cursor())
112116
}
113117

internal/app/stateloaded_test.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,19 @@ import (
1414
"github.com/stretchr/testify/require"
1515
)
1616

17+
func TestStateLoadedEmpty(t *testing.T) {
18+
t.Parallel()
19+
20+
model := newTestModel(t, []byte(""))
21+
22+
_, ok := model.(app.StateLoaded)
23+
require.Truef(t, ok, "%s", model)
24+
25+
model, cmd := model.Update(events.EnterKeyClicked())
26+
require.NotNil(t, model)
27+
requireCmdMsg(t, tea.Quit(), cmd)
28+
}
29+
1730
func TestStateLoaded(t *testing.T) {
1831
t.Parallel()
1932

@@ -126,7 +139,7 @@ func TestStateLoadedReload(t *testing.T) {
126139
Type: tea.KeyUp,
127140
})
128141

129-
rendered = model.View()
142+
rendered := model.View()
130143
assert.Contains(t, rendered, expected)
131144
})
132145

@@ -147,7 +160,7 @@ func TestStateLoadedReload(t *testing.T) {
147160
Type: tea.KeyUp,
148161
})
149162

150-
rendered = model.View()
163+
rendered := model.View()
151164
assert.Contains(t, rendered, expected)
152165
})
153166
}

0 commit comments

Comments
 (0)