filepicker_test.go

 1package filepicker
 2
 3import (
 4	"fmt"
 5	"io/fs"
 6	"testing"
 7	"testing/fstest"
 8
 9	tea "github.com/charmbracelet/bubbletea/v2"
10	"github.com/charmbracelet/crush/internal/tui/util"
11	"github.com/stretchr/testify/assert"
12	"github.com/stretchr/testify/require"
13)
14
15var pngMagicNumberData = []byte("\x89PNG\x0D\x0A\x1A\x0A")
16
17func TestOnPasteMockFSWithValidPath(t *testing.T) {
18	var mockedFSPath string
19	resolveTestFS := func(fsysPath string) fs.FS {
20		mockedFSPath = fsysPath
21		return fstest.MapFS{
22			"image1.png": &fstest.MapFile{
23				Data: pngMagicNumberData,
24			},
25			"image2.png": &fstest.MapFile{
26				Data: []byte("fake png content"),
27			},
28		}
29	}
30
31	// Test with the first file
32	cmd := onPaste(resolveTestFS, "/home/testuser/images/image1.png")
33	msg := cmd()
34
35	assert.Equal(t, "/home/testuser/images", mockedFSPath)
36	filePickedMsg, ok := msg.(FilePickedMsg)
37	require.True(t, ok)
38	require.NotNil(t, filePickedMsg)
39	assert.Equal(t, "image1.png", filePickedMsg.Attachment.FileName)
40	assert.Equal(t, "image/png", filePickedMsg.Attachment.MimeType)
41}
42
43func TestOnPasteMockFSWithInvalidPath(t *testing.T) {
44	var mockedFSPath string
45	resolveTestFS := func(fsysPath string) fs.FS {
46		mockedFSPath = fsysPath
47		return fstest.MapFS{
48			"image1.png": &fstest.MapFile{
49				Data: pngMagicNumberData,
50			},
51			"image2.png": &fstest.MapFile{
52				Data: []byte("fake png content"),
53			},
54		}
55	}
56
57	// Test with the first file
58	cmd, ok := onPaste(resolveTestFS, "/home/testuser/images/nonexistent.png")().(tea.Cmd)
59	require.True(t, ok)
60
61	msg := cmd()
62
63	assert.Equal(t, "/home/testuser/images", mockedFSPath)
64	fmt.Printf("TYPE: %T\n", msg)
65	infoErrMsg, ok := msg.(util.InfoMsg)
66	require.True(t, ok)
67	require.NotNil(t, infoErrMsg)
68
69	assert.Equal(t, util.InfoMsg{
70		Type: util.InfoTypeError,
71		Msg:  "unable to read the image: error getting file info: open nonexistent.png: file does not exist, /home/testuser/images/nonexistent.png",
72	}, infoErrMsg)
73}