package main import ( "testing" "mgit.msbls.de/m/ImaGen/internal/config" "mgit.msbls.de/m/ImaGen/internal/preview" ) func TestResolvePreviewMode(t *testing.T) { type tc struct { name string cfg *config.Config flagOn bool flagOff bool env string want preview.Mode wantError bool } cases := []tc{ {name: "all-empty-defaults-to-auto", want: preview.ModeAuto}, {name: "config-on", cfg: &config.Config{Output: config.OutputConfig{Preview: "on"}}, want: preview.ModeOn}, {name: "config-off", cfg: &config.Config{Output: config.OutputConfig{Preview: "off"}}, want: preview.ModeOff}, {name: "config-auto-explicit", cfg: &config.Config{Output: config.OutputConfig{Preview: "auto"}}, want: preview.ModeAuto}, {name: "env-overrides-config", cfg: &config.Config{Output: config.OutputConfig{Preview: "on"}}, env: "off", want: preview.ModeOff}, {name: "flag-on-overrides-env-off", env: "off", flagOn: true, want: preview.ModeOn}, {name: "flag-off-overrides-env-on", env: "on", flagOff: true, want: preview.ModeOff}, {name: "flag-off-overrides-config-on", cfg: &config.Config{Output: config.OutputConfig{Preview: "on"}}, flagOff: true, want: preview.ModeOff}, {name: "both-flags-error", flagOn: true, flagOff: true, wantError: true}, {name: "bad-env-errors", env: "yes", wantError: true}, {name: "bad-config-errors", cfg: &config.Config{Output: config.OutputConfig{Preview: "yes"}}, wantError: true}, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { got, err := resolvePreviewMode(c.cfg, c.flagOn, c.flagOff, c.env) if c.wantError { if err == nil { t.Fatalf("expected error, got mode %q", got) } return } if err != nil { t.Fatalf("unexpected error: %v", err) } if got != c.want { t.Errorf("mode = %q, want %q", got, c.want) } }) } }