chore(picker): make it easier to ensure correct file system initialised

tauraamui created

Change summary

internal/tui/components/dialogs/filepicker/filepicker.go      |  5 
internal/tui/components/dialogs/filepicker/filepicker_test.go | 22 +++-
2 files changed, 17 insertions(+), 10 deletions(-)

Detailed changes

internal/tui/components/dialogs/filepicker/filepicker.go 🔗

@@ -130,7 +130,7 @@ func (m *model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		// Get the path of the selected file.
 		return m, tea.Sequence(
 			util.CmdHandler(dialogs.CloseDialogMsg{}),
-			onPaste(resolveFS(filepath.Dir(path)), path),
+			onPaste(resolveFS, path),
 		)
 	}
 	m.image, cmd = m.image.Update(msg)
@@ -142,7 +142,8 @@ func resolveFS(baseDirPath string) fs.FS {
 	return os.DirFS(baseDirPath)
 }
 
-func onPaste(fsys fs.FS, path string) func() tea.Msg {
+func onPaste(resolveFsys func(path string) fs.FS, path string) func() tea.Msg {
+	fsys := resolveFsys(filepath.Dir(path))
 	name := filepath.Base(path)
 	return func() tea.Msg {
 		isFileLarge, err := IsFileTooBigWithFS(fsys, name, MaxAttachmentSize)

internal/tui/components/dialogs/filepicker/filepicker_test.go 🔗

@@ -1,6 +1,7 @@
 package filepicker
 
 import (
+	"io/fs"
 	"testing"
 	"testing/fstest"
 
@@ -11,19 +12,24 @@ import (
 var pngMagicNumberData = []byte("\x89PNG\x0D\x0A\x1A\x0A")
 
 func TestOnPasteMockFSWithValidPath(t *testing.T) {
-	mockFS := fstest.MapFS{
-		"image1.png": &fstest.MapFile{
-			Data: pngMagicNumberData,
-		},
-		"image2.png": &fstest.MapFile{
-			Data: []byte("fake png content"),
-		},
+	var mockedFSPath string
+	resolveTestFS := func(fsysPath string) fs.FS {
+		mockedFSPath = fsysPath
+		return fstest.MapFS{
+			"image1.png": &fstest.MapFile{
+				Data: pngMagicNumberData,
+			},
+			"image2.png": &fstest.MapFile{
+				Data: []byte("fake png content"),
+			},
+		}
 	}
 
 	// Test with the first file
-	cmd := onPaste(mockFS, "image1.png")
+	cmd := onPaste(resolveTestFS, "/home/testuser/images/image1.png")
 	msg := cmd()
 
+	assert.Equal(t, "/home/testuser/images", mockedFSPath)
 	filePickedMsg, ok := msg.(FilePickedMsg)
 	require.True(t, ok)
 	require.NotNil(t, filePickedMsg)