|
@@ -9,21 +9,130 @@ import (
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
func Test_Model_Init(t *testing.T) {
|
|
func Test_Model_Init(t *testing.T) {
|
|
|
- t.Skip()
|
|
|
|
|
- assert.Nil(t, Model{}.Init())
|
|
|
|
|
|
|
+ testModel := Model{Path: "tests/bugs/test-1"}
|
|
|
|
|
+ testIssue, _ := Issue{}.NewFromPath("tests/bugs/test-1")
|
|
|
|
|
+ assert.Equal(t, testModel.Init()(), tea.Msg(testIssue))
|
|
|
|
|
+
|
|
|
|
|
+ testModel = Model{Path: "tests/bugs"}
|
|
|
|
|
+ testCollection, _ := IssueCollection{}.NewFromPath("tests/bugs")
|
|
|
|
|
+ assert.Equal(t, testModel.Init()(), tea.Msg(testCollection))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func Test_Model_Update_quit_on_keymsg(t *testing.T) {
|
|
func Test_Model_Update_quit_on_keymsg(t *testing.T) {
|
|
|
- testIssue, _ := Issue.NewFromPath(Issue{}, "tests/bugs/test-1")
|
|
|
|
|
- testModel := Model{issue: testIssue}
|
|
|
|
|
- testMsg := tea.KeyMsg{}
|
|
|
|
|
|
|
+ testModel := Model{}
|
|
|
|
|
+ testKey := tea.Key{Type: tea.KeyRunes, Runes: []rune{'q'}}
|
|
|
|
|
+ testMsg := tea.KeyMsg(testKey)
|
|
|
|
|
|
|
|
model, cmd := testModel.Update(testMsg)
|
|
model, cmd := testModel.Update(testMsg)
|
|
|
assert.Equal(t, testModel, model)
|
|
assert.Equal(t, testModel, model)
|
|
|
|
|
|
|
|
- cmdValue := cmd()
|
|
|
|
|
- assert.IsType(t, tea.QuitMsg{}, cmdValue)
|
|
|
|
|
|
|
+ if cmd != nil {
|
|
|
|
|
+ cmdMsg := cmd()
|
|
|
|
|
+ assert.Equal(t, tea.QuitMsg{}, cmdMsg)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ assert.Fail(t, "should return cmd!")
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func Test_Model_Update_scroll_on_k(t *testing.T) {
|
|
|
|
|
+ ic, _ := IssueCollection.NewFromPath(IssueCollection{}, "tests/bugs/")
|
|
|
|
|
+ testModel := Model{collection: ic}
|
|
|
|
|
+ testKey := tea.Key{Type: tea.KeyRunes, Runes: []rune{'k'}}
|
|
|
|
|
+ testMsg := tea.KeyMsg(testKey)
|
|
|
|
|
+
|
|
|
|
|
+ model, cmd := testModel.Update(testMsg)
|
|
|
|
|
+ assert.Equal(t, testModel.selection+1, model.(Model).selection)
|
|
|
|
|
+
|
|
|
|
|
+ if cmd == nil {
|
|
|
|
|
+ assert.Fail(t, "should return tea.Cmd")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // test select wraparound
|
|
|
|
|
+ testModel.selection = len(testModel.collection) - 1
|
|
|
|
|
+ model, cmd = testModel.Update(testMsg)
|
|
|
|
|
+ assert.Equal(t, 0, model.(Model).selection)
|
|
|
|
|
+
|
|
|
|
|
+ if cmd == nil {
|
|
|
|
|
+ assert.Fail(t, "should return tea.Cmd")
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func Test_Model_Update_scroll_on_j(t *testing.T) {
|
|
|
|
|
+ ic, _ := IssueCollection.NewFromPath(IssueCollection{}, "tests/bugs/")
|
|
|
|
|
+ testModel := Model{collection: ic}
|
|
|
|
|
+ testKey := tea.Key{Type: tea.KeyRunes, Runes: []rune{'j'}}
|
|
|
|
|
+ testMsg := tea.KeyMsg(testKey)
|
|
|
|
|
+
|
|
|
|
|
+ model, cmd := testModel.Update(testMsg)
|
|
|
|
|
+ assert.Equal(t, len(testModel.collection)-1, model.(Model).selection)
|
|
|
|
|
+
|
|
|
|
|
+ if cmd == nil {
|
|
|
|
|
+ assert.Fail(t, "should return tea.Cmd")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ model, cmd = model.(Model).Update(testMsg)
|
|
|
|
|
+ assert.Equal(t, len(testModel.collection)-2, model.(Model).selection)
|
|
|
|
|
+
|
|
|
|
|
+ if cmd == nil {
|
|
|
|
|
+ assert.Fail(t, "should return tea.Cmd")
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func Test_Model_Update_load_on_enter(t *testing.T) {
|
|
|
|
|
+ ic, _ := IssueCollection.NewFromPath(IssueCollection{}, "tests/bugs")
|
|
|
|
|
+ testModel := Model{collection: ic}
|
|
|
|
|
+ testKey := tea.Key{Type: tea.KeyEnter, Runes: []rune{}}
|
|
|
|
|
+ testMsg := tea.KeyMsg(testKey)
|
|
|
|
|
+ testPath := testModel.collection[testModel.selection].Path
|
|
|
|
|
+
|
|
|
|
|
+ model, cmd := testModel.Update(testMsg)
|
|
|
|
|
+ assert.Equal(t, testPath, model.(Model).Path)
|
|
|
|
|
+
|
|
|
|
|
+ if cmd == nil {
|
|
|
|
|
+ assert.Fail(t, "should return tea.Cmd")
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func Test_Model_Update_renderIssue(t *testing.T) {
|
|
|
|
|
+ testIssue, _ := Issue{}.NewFromPath("tests/bugs/test-1")
|
|
|
|
|
+ testModel := Model{}
|
|
|
|
|
+
|
|
|
|
|
+ model, cmd := testModel.Update(tea.Msg(testIssue))
|
|
|
|
|
+ if cmd == nil {
|
|
|
|
|
+ assert.Fail(t, "should return cmd")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ assert.Equal(t, model.(Model).issue.Title, testIssue.Title)
|
|
|
|
|
+ assert.Equal(t, Model{issue: testIssue}.renderIssue(), cmd())
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+func Test_Model_Update_renderIssueCollection(t *testing.T) {
|
|
|
|
|
+ testCollection, _ := IssueCollection{}.NewFromPath("tests/bugs")
|
|
|
|
|
+ testModel := Model{}
|
|
|
|
|
+
|
|
|
|
|
+ model, cmd := testModel.Update(tea.Msg(testCollection))
|
|
|
|
|
+ if cmd == nil {
|
|
|
|
|
+ assert.Fail(t, "should return cmd")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ assert.Equal(t, len(testCollection), len(model.(Model).collection))
|
|
|
|
|
+ assert.Equal(t, Model{collection: testCollection}.renderIssueCollection(), cmd())
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func Test_Model_Update_updates_content(t *testing.T) {
|
|
|
|
|
+ testIssue, _ := Issue{}.NewFromPath("tests/bugs/test-1")
|
|
|
|
|
+ testModel := Model{issue: testIssue}
|
|
|
|
|
+
|
|
|
|
|
+ testModel.content = testModel.renderIssue().(string)
|
|
|
|
|
+
|
|
|
|
|
+ model, cmd := testModel.Update(tea.Msg(testModel.content))
|
|
|
|
|
+ if cmd != nil {
|
|
|
|
|
+ assert.Fail(t, "should not return cmd")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ assert.Equal(t, testModel.content, model.(Model).content)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func Test_Model_Update_do_nothing(t *testing.T) {
|
|
func Test_Model_Update_do_nothing(t *testing.T) {
|
|
|
testIssue, _ := Issue.NewFromPath(Issue{}, "tests/bugs/test-1")
|
|
testIssue, _ := Issue.NewFromPath(Issue{}, "tests/bugs/test-1")
|
|
|
testModel := Model{issue: testIssue}
|
|
testModel := Model{issue: testIssue}
|
|
@@ -44,9 +153,15 @@ func Test_Model_renderIssue(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func Test_Model_View(t *testing.T) {
|
|
func Test_Model_View(t *testing.T) {
|
|
|
- t.Skip("skip until view lifecycle complete")
|
|
|
|
|
testIssue, _ := Issue.NewFromPath(Issue{}, "tests/bugs/test-1")
|
|
testIssue, _ := Issue.NewFromPath(Issue{}, "tests/bugs/test-1")
|
|
|
- testRender := Model{issue: testIssue}.View()
|
|
|
|
|
|
|
+ model, cmd := Model{}.Update(tea.Msg(testIssue)) // gives render cmd
|
|
|
|
|
+ model, cmd = model.Update(cmd()) // handle internal render
|
|
|
|
|
+ if cmd != nil {
|
|
|
|
|
+ assert.Fail(t, "should not return cmd")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ assert.Equal(t, Model{issue: testIssue}.renderIssue().(string), model.(Model).View())
|
|
|
|
|
|
|
|
- assert.True(t, strings.Contains(testRender, "test description"))
|
|
|
|
|
|
|
+ render2 := Model{}.View()
|
|
|
|
|
+ assert.Equal(t, "loading...", render2)
|
|
|
}
|
|
}
|