package cmd import ( "errors" "testing" "github.com/Pingu-Studio/MaidnCLI/internal/config" ) func TestAppOnboardValidatesConfigBeforeInspectingCheckout(t *testing.T) { originalConfig, originalResolve, originalClean := loadFreshConfig, resolveAppOnboarding, ensureOnboardCheckoutClean originalConfigPath, originalFrom := onboardConfigPath, onboardFrom t.Cleanup(func() { loadFreshConfig = originalConfig resolveAppOnboarding = originalResolve ensureOnboardCheckoutClean = originalClean onboardConfigPath, onboardFrom = originalConfigPath, originalFrom }) loadFreshConfig = func(string) (config.Config, error) { return config.Config{}, nil } resolveAppOnboarding = func(config.Config) (config.Config, error) { return config.Config{}, errors.New("incomplete delivery") } ensureOnboardCheckoutClean = func(string) error { t.Fatal("onboarding inspected checkout before validating config") return nil } onboardConfigPath, onboardFrom = "private.yaml", "app-checkout" if err := runAppOnboard(nil, nil); err == nil { t.Fatal("onboarding accepted invalid configuration") } } func TestAppOnboardScaffoldsOnlyTheValidatedCheckout(t *testing.T) { originalConfig, originalResolve, originalClean := loadFreshConfig, resolveAppOnboarding, ensureOnboardCheckoutClean originalOrigin, originalBranch, originalGenerate := onboardCheckoutOrigin, onboardCheckoutBranch, generateAppDelivery originalConfigPath, originalFrom := onboardConfigPath, onboardFrom t.Cleanup(func() { loadFreshConfig, resolveAppOnboarding, ensureOnboardCheckoutClean = originalConfig, originalResolve, originalClean onboardCheckoutOrigin, onboardCheckoutBranch, generateAppDelivery = originalOrigin, originalBranch, originalGenerate onboardConfigPath, onboardFrom = originalConfigPath, originalFrom }) cfg := config.Config{Delivery: config.DeliveryConfig{AppRepoURL: "https://git.example.test/new-org/app.git", AppRepoRef: "main"}} loadFreshConfig = func(string) (config.Config, error) { return cfg, nil } resolveAppOnboarding = func(config.Config) (config.Config, error) { return cfg, nil } ensureOnboardCheckoutClean = func(path string) error { if path != "app-checkout" { t.Fatal("onboarding checked the wrong checkout") } return nil } onboardCheckoutOrigin = func(string) (string, error) { return cfg.Delivery.AppRepoURL, nil } onboardCheckoutBranch = func(string) (string, error) { return cfg.Delivery.AppRepoRef, nil } generations := 0 generateAppDelivery = func(path string, got config.Config) error { if path != "app-checkout" || got.Delivery.AppRepoURL != cfg.Delivery.AppRepoURL { t.Fatal("onboarding generated delivery for the wrong checkout or config") } generations++ return nil } onboardConfigPath, onboardFrom = "private.yaml", "app-checkout" if err := runAppOnboard(nil, nil); err != nil || generations != 1 { t.Fatalf("runAppOnboard() = %v, generations = %d", err, generations) } }