64 lines
2.9 KiB
Go
64 lines
2.9 KiB
Go
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)
|
|
}
|
|
}
|