ui_test.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package model
  2. import (
  3. "testing"
  4. "charm.land/catwalk/pkg/catwalk"
  5. "github.com/charmbracelet/crush/internal/config"
  6. "github.com/charmbracelet/crush/internal/csync"
  7. "github.com/charmbracelet/crush/internal/ui/common"
  8. "github.com/charmbracelet/crush/internal/workspace"
  9. "github.com/stretchr/testify/require"
  10. )
  11. func TestCurrentModelSupportsImages(t *testing.T) {
  12. t.Parallel()
  13. t.Run("returns false when config is nil", func(t *testing.T) {
  14. t.Parallel()
  15. ui := newTestUIWithConfig(t, nil)
  16. require.False(t, ui.currentModelSupportsImages())
  17. })
  18. t.Run("returns false when coder agent is missing", func(t *testing.T) {
  19. t.Parallel()
  20. cfg := &config.Config{
  21. Providers: csync.NewMap[string, config.ProviderConfig](),
  22. Agents: map[string]config.Agent{},
  23. }
  24. ui := newTestUIWithConfig(t, cfg)
  25. require.False(t, ui.currentModelSupportsImages())
  26. })
  27. t.Run("returns false when model is not found", func(t *testing.T) {
  28. t.Parallel()
  29. cfg := &config.Config{
  30. Providers: csync.NewMap[string, config.ProviderConfig](),
  31. Agents: map[string]config.Agent{
  32. config.AgentCoder: {Model: config.SelectedModelTypeLarge},
  33. },
  34. }
  35. ui := newTestUIWithConfig(t, cfg)
  36. require.False(t, ui.currentModelSupportsImages())
  37. })
  38. t.Run("returns true when current model supports images", func(t *testing.T) {
  39. t.Parallel()
  40. providers := csync.NewMap[string, config.ProviderConfig]()
  41. providers.Set("test-provider", config.ProviderConfig{
  42. ID: "test-provider",
  43. Models: []catwalk.Model{
  44. {ID: "test-model", SupportsImages: true},
  45. },
  46. })
  47. cfg := &config.Config{
  48. Models: map[config.SelectedModelType]config.SelectedModel{
  49. config.SelectedModelTypeLarge: {
  50. Provider: "test-provider",
  51. Model: "test-model",
  52. },
  53. },
  54. Providers: providers,
  55. Agents: map[string]config.Agent{
  56. config.AgentCoder: {Model: config.SelectedModelTypeLarge},
  57. },
  58. }
  59. ui := newTestUIWithConfig(t, cfg)
  60. require.True(t, ui.currentModelSupportsImages())
  61. })
  62. }
  63. func newTestUIWithConfig(t *testing.T, cfg *config.Config) *UI {
  64. t.Helper()
  65. return &UI{
  66. com: &common.Common{
  67. Workspace: &testWorkspace{cfg: cfg},
  68. },
  69. }
  70. }
  71. // testWorkspace is a minimal [workspace.Workspace] stub for unit tests.
  72. type testWorkspace struct {
  73. workspace.Workspace
  74. cfg *config.Config
  75. }
  76. func (w *testWorkspace) Config() *config.Config {
  77. return w.cfg
  78. }