1package cmd
2
3import (
4 "bytes"
5 "encoding/json"
6 "testing"
7
8 "github.com/charmbracelet/crush/internal/projects"
9 "github.com/stretchr/testify/require"
10)
11
12func TestProjectsEmpty(t *testing.T) {
13 // Use a temp directory for projects.json
14 tmpDir := t.TempDir()
15 t.Setenv("XDG_DATA_HOME", tmpDir)
16
17 var b bytes.Buffer
18 projectsCmd.SetOut(&b)
19 projectsCmd.SetErr(&b)
20 projectsCmd.SetIn(bytes.NewReader(nil))
21 err := projectsCmd.RunE(projectsCmd, nil)
22 require.NoError(t, err)
23 require.Equal(t, "No projects tracked yet.\n", b.String())
24}
25
26func TestProjectsJSON(t *testing.T) {
27 tmpDir := t.TempDir()
28 t.Setenv("XDG_DATA_HOME", tmpDir)
29
30 // Register a project
31 err := projects.Register("/test/project", "/test/project/.crush")
32 require.NoError(t, err)
33
34 var b bytes.Buffer
35 projectsCmd.SetOut(&b)
36 projectsCmd.SetErr(&b)
37 projectsCmd.SetIn(bytes.NewReader(nil))
38
39 // Set the --json flag
40 projectsCmd.Flags().Set("json", "true")
41 defer projectsCmd.Flags().Set("json", "false")
42
43 err = projectsCmd.RunE(projectsCmd, nil)
44 require.NoError(t, err)
45
46 // Parse the JSON output
47 var result struct {
48 Projects []projects.Project `json:"projects"`
49 }
50 err = json.Unmarshal(b.Bytes(), &result)
51 require.NoError(t, err)
52
53 require.Len(t, result.Projects, 1)
54 require.Equal(t, "/test/project", result.Projects[0].Path)
55 require.Equal(t, "/test/project/.crush", result.Projects[0].DataDir)
56}