package bdd import ( "dance-lessons-coach/pkg/bdd/context" "dance-lessons-coach/pkg/bdd/helpers" "dance-lessons-coach/pkg/bdd/steps" "dance-lessons-coach/pkg/bdd/testserver" "os" "time" "github.com/cucumber/godog" "github.com/rs/zerolog/log" ) // FeatureSuiteContext holds feature-specific test suite context type FeatureSuiteContext struct { featureName string client *testserver.Client authContext *context.AuthContext configContext *context.ConfigContext // Add other feature contexts as needed } // InitializeFeatureSuite initializes a feature-specific test suite func InitializeFeatureSuite(ctx *godog.TestSuiteContext) { featureName := os.Getenv("FEATURE") if featureName == "" { featureName = "all" } log.Debug().Str("feature", featureName).Msg("Initializing feature suite") ctx.BeforeSuite(func() { // Initialize shared server for this feature server := testserver.NewServer() if err := server.Start(); err != nil { panic(err) } // Store server in a way that can be accessed by scenarios // This would need to be properly implemented }) ctx.AfterSuite(func() { // Cleanup feature-specific resources log.Debug().Str("feature", featureName).Msg("Cleaning up feature suite") }) } // InitializeFeatureScenario initializes a feature-specific scenario func InitializeFeatureScenario(ctx *godog.ScenarioContext, client *testserver.Client) { featureName := os.Getenv("FEATURE") // Initialize feature-specific contexts var authCtx *context.AuthContext var configCtx *context.ConfigContext switch featureName { case "auth": authCtx = context.NewAuthContext(client) context.InitializeAuthContext(ctx, client) case "config": configCtx = context.NewConfigContext(client) context.InitializeConfigContext(ctx, client) case "greet": // Initialize greet-specific context if needed steps.InitializeAllSteps(ctx, client) case "health": // Initialize health-specific context if needed steps.InitializeAllSteps(ctx, client) case "jwt": // Initialize JWT-specific context if needed steps.InitializeAllSteps(ctx, client) default: // Fallback to all steps for backward compatibility steps.InitializeAllSteps(ctx, client) } // Initialize synchronization helpers ctx.Step(`^I wait for the server to be ready$`, func() error { return helpers.waitForServerReady(client, 30*time.Second) }) ctx.Step(`^I wait for v2 API to be enabled$`, func() error { return helpers.waitForV2APIEnabled(client, 30*time.Second) }) ctx.Step(`^I wait for config reload to complete$`, func() error { return helpers.waitForConfigReload(client, 10*time.Second) }) } // CleanupFeatureSuite cleans up feature-specific resources func CleanupFeatureSuite() { featureName := os.Getenv("FEATURE") log.Debug().Str("feature", featureName).Msg("Cleaning up feature suite") // Feature-specific cleanup would go here steps.CleanupAllTestConfigFiles() }