projects_test.go 1.3 KB

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