204 lines
4.6 KiB
Go
204 lines
4.6 KiB
Go
|
package tui
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"os"
|
||
|
"testing"
|
||
|
|
||
|
"b612.me/apps/b612/gdu/internal/testanalyze"
|
||
|
"b612.me/apps/b612/gdu/internal/testapp"
|
||
|
"b612.me/apps/b612/gdu/pkg/analyze"
|
||
|
"b612.me/apps/b612/gdu/pkg/fs"
|
||
|
"github.com/gdamore/tcell/v2"
|
||
|
"github.com/rivo/tview"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
func TestConfirmExport(t *testing.T) {
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'E', 0))
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("export"))
|
||
|
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyRune, 'n', 0))
|
||
|
ui.keyPressed(tcell.NewEventKey(tcell.KeyEnter, 0, 0))
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("export"))
|
||
|
}
|
||
|
|
||
|
func TestExportAnalysis(t *testing.T) {
|
||
|
parentDir := &analyze.Dir{
|
||
|
File: &analyze.File{
|
||
|
Name: "parent",
|
||
|
},
|
||
|
Files: make([]fs.Item, 0, 1),
|
||
|
}
|
||
|
currentDir := &analyze.Dir{
|
||
|
File: &analyze.File{
|
||
|
Name: "sub",
|
||
|
Parent: parentDir,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.currentDir = currentDir
|
||
|
ui.topDir = parentDir
|
||
|
|
||
|
ui.exportAnalysis()
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("exporting"))
|
||
|
|
||
|
<-ui.done
|
||
|
|
||
|
assert.FileExists(t, "export.json")
|
||
|
err := os.Remove("export.json")
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestExportAnalysisEsc(t *testing.T) {
|
||
|
parentDir := &analyze.Dir{
|
||
|
File: &analyze.File{
|
||
|
Name: "parent",
|
||
|
},
|
||
|
Files: make([]fs.Item, 0, 1),
|
||
|
}
|
||
|
currentDir := &analyze.Dir{
|
||
|
File: &analyze.File{
|
||
|
Name: "sub",
|
||
|
Parent: parentDir,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.currentDir = currentDir
|
||
|
ui.topDir = parentDir
|
||
|
|
||
|
form := ui.confirmExport()
|
||
|
formInputFn := form.GetInputCapture()
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("export"))
|
||
|
|
||
|
formInputFn(tcell.NewEventKey(tcell.KeyEsc, 0, 0))
|
||
|
|
||
|
assert.False(t, ui.pages.HasPage("export"))
|
||
|
}
|
||
|
|
||
|
func TestExportAnalysisWithName(t *testing.T) {
|
||
|
parentDir := &analyze.Dir{
|
||
|
File: &analyze.File{
|
||
|
Name: "parent",
|
||
|
},
|
||
|
Files: make([]fs.Item, 0, 1),
|
||
|
}
|
||
|
currentDir := &analyze.Dir{
|
||
|
File: &analyze.File{
|
||
|
Name: "sub",
|
||
|
Parent: parentDir,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.currentDir = currentDir
|
||
|
ui.topDir = parentDir
|
||
|
|
||
|
form := ui.confirmExport()
|
||
|
// formInputFn := form.GetInputCapture()
|
||
|
item := form.GetFormItemByLabel("File name")
|
||
|
inputFn := item.(*tview.InputField).InputHandler()
|
||
|
|
||
|
// send 'n' to input
|
||
|
inputFn(tcell.NewEventKey(tcell.KeyRune, 'n', 0), nil)
|
||
|
assert.Equal(t, "export.jsonn", ui.exportName)
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("export"))
|
||
|
|
||
|
form.GetButton(0).InputHandler()(tcell.NewEventKey(tcell.KeyEnter, 0, 0), nil)
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("exporting"))
|
||
|
|
||
|
<-ui.done
|
||
|
|
||
|
assert.FileExists(t, "export.jsonn")
|
||
|
err := os.Remove("export.jsonn")
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestExportAnalysisWithoutRights(t *testing.T) {
|
||
|
parentDir := &analyze.Dir{
|
||
|
File: &analyze.File{
|
||
|
Name: "parent",
|
||
|
},
|
||
|
Files: make([]fs.Item, 0, 1),
|
||
|
}
|
||
|
currentDir := &analyze.Dir{
|
||
|
File: &analyze.File{
|
||
|
Name: "sub",
|
||
|
Parent: parentDir,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
_, err := os.Create("export.json")
|
||
|
assert.NoError(t, err)
|
||
|
err = os.Chmod("export.json", 0)
|
||
|
assert.NoError(t, err)
|
||
|
defer func() {
|
||
|
err = os.Chmod("export.json", 0o755)
|
||
|
assert.Nil(t, err)
|
||
|
err = os.Remove("export.json")
|
||
|
assert.NoError(t, err)
|
||
|
}()
|
||
|
|
||
|
simScreen := testapp.CreateSimScreen()
|
||
|
defer simScreen.Fini()
|
||
|
|
||
|
app := testapp.CreateMockedApp(true)
|
||
|
ui := CreateUI(app, simScreen, &bytes.Buffer{}, false, true, false, false, false)
|
||
|
ui.done = make(chan struct{})
|
||
|
ui.Analyzer = &testanalyze.MockedAnalyzer{}
|
||
|
ui.currentDir = currentDir
|
||
|
ui.topDir = parentDir
|
||
|
|
||
|
ui.exportAnalysis()
|
||
|
|
||
|
<-ui.done
|
||
|
|
||
|
for _, f := range ui.app.(*testapp.MockedApp).GetUpdateDraws() {
|
||
|
f()
|
||
|
}
|
||
|
|
||
|
assert.True(t, ui.pages.HasPage("error"))
|
||
|
}
|