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}