package cli import ( "os" "path/filepath" "testing" "github.com/spf13/cobra" "galahad2lcd/internal/config" ) func TestApplyOverridesChangedFlags(t *testing.T) { dir := t.TempDir() src := filepath.Join(dir, "media.gif") if err := os.WriteFile(src, []byte("gif"), 0o644); err != nil { t.Fatal(err) } cmd := &cobra.Command{} var input string var rotate int var speed, fps float64 cmd.Flags().StringVar(&input, "input", "", "") cmd.Flags().IntVar(&rotate, "rotate", 0, "") cmd.Flags().Float64Var(&speed, "speed", 0, "") cmd.Flags().Float64Var(&fps, "fps", 0, "") _ = cmd.Flags().Set("input", src) _ = cmd.Flags().Set("rotate", "180") _ = cmd.Flags().Set("speed", "1.5") _ = cmd.Flags().Set("fps", "24") cfg := config.Default() if err := applyOverrides(cmd, &cfg, input, rotate, speed, fps); err != nil { t.Fatalf("applyOverrides error = %v", err) } if cfg.Display.Input != src { t.Errorf("input = %q, want %q", cfg.Display.Input, src) } if cfg.Display.Rotate != 180 { t.Errorf("rotate = %d, want 180", cfg.Display.Rotate) } if cfg.Display.Speed != 1.5 { t.Errorf("speed = %v, want 1.5", cfg.Display.Speed) } if cfg.Stream.FPS != 24 { t.Errorf("fps = %v, want 24", cfg.Stream.FPS) } } func TestApplyOverridesUnchangedFlags(t *testing.T) { cmd := &cobra.Command{} var input string var rotate int var speed, fps float64 cmd.Flags().StringVar(&input, "input", "", "") cmd.Flags().IntVar(&rotate, "rotate", 0, "") cmd.Flags().Float64Var(&speed, "speed", 0, "") cmd.Flags().Float64Var(&fps, "fps", 0, "") cfg := config.Default() if err := applyOverrides(cmd, &cfg, input, rotate, speed, fps); err != nil { t.Fatalf("applyOverrides error = %v", err) } if cfg.Display.Input != "" || cfg.Display.Rotate != 0 { t.Errorf("unset flags changed config: %+v", cfg) } } func TestResolveInput(t *testing.T) { dir := t.TempDir() file := filepath.Join(dir, "x.gif") if err := os.WriteFile(file, nil, 0o644); err != nil { t.Fatal(err) } abs, err := resolveInput(file) if err != nil { t.Fatalf("resolveInput error = %v", err) } if abs != file { t.Errorf("resolveInput = %q, want %q", abs, file) } if _, err := resolveInput(filepath.Join(dir, "missing.gif")); err == nil { t.Error("resolveInput returned nil error for missing file") } if _, err := resolveInput(dir); err == nil { t.Error("resolveInput returned nil error for a directory") } } func TestRootVersionCommand(t *testing.T) { root := newRootCmd("1.2.3") root.SetArgs([]string{"version"}) if err := root.Execute(); err != nil { t.Fatalf("version command error = %v", err) } } func TestRootSetCommandRequiresFlags(t *testing.T) { root := newRootCmd("dev") root.SetArgs([]string{"set"}) if err := root.Execute(); err == nil { t.Error("set with no flags returned nil error") } }