- Add pkg/bdd/steps/scenario_state.go with thread-safe per-scenario state manager - Update auth_steps.go, jwt_retention_steps.go to use per-scenario state accessors - Add LastSecret and LastError fields to ScenarioState for JWT retention testing - Update steps.go with SetScenarioKeyForAllSteps function - Update suite.go to generate scenario keys and clear state properly - Mark config hot-reload scenarios as @flaky (timing-sensitive) - Fix validate-test-suite.sh: add -p 1 flag for sequential execution, filter JSON logs, add --count flag - Add CONFIG_SCHEMA.md documenting configuration architecture - Split greet tests into v1/v2 sub-tests with explicit v2 enable/disable Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
74 lines
2.2 KiB
Go
74 lines
2.2 KiB
Go
package steps
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"dance-lessons-coach/pkg/bdd/testserver"
|
|
)
|
|
|
|
// GreetSteps holds greet-related step definitions
|
|
type GreetSteps struct {
|
|
client *testserver.Client
|
|
scenarioKey string // Track current scenario for state isolation
|
|
}
|
|
|
|
func NewGreetSteps(client *testserver.Client) *GreetSteps {
|
|
return &GreetSteps{client: client}
|
|
}
|
|
|
|
// SetScenarioKey sets the current scenario key for state isolation
|
|
func (s *GreetSteps) SetScenarioKey(key string) {
|
|
s.scenarioKey = key
|
|
}
|
|
|
|
func (s *GreetSteps) RegisterSteps(ctx interface {
|
|
RegisterStep(string, interface{}) error
|
|
}) error {
|
|
// This will be implemented in the main steps.go file
|
|
return nil
|
|
}
|
|
|
|
// Greet-related steps
|
|
func (s *GreetSteps) iRequestAGreetingFor(name string) error {
|
|
return s.client.Request("GET", fmt.Sprintf("/api/v1/greet/%s", name), nil)
|
|
}
|
|
|
|
func (s *GreetSteps) iRequestTheDefaultGreeting() error {
|
|
return s.client.Request("GET", "/api/v1/greet/", nil)
|
|
}
|
|
|
|
func (s *GreetSteps) iSendPOSTRequestToV2GreetWithName(name string) error {
|
|
// Create JSON request body
|
|
requestBody := map[string]string{"name": name}
|
|
return s.client.Request("POST", "/api/v2/greet", requestBody)
|
|
}
|
|
|
|
func (s *GreetSteps) iSendPOSTRequestToV2GreetWithInvalidJSON(invalidJSON string) error {
|
|
// Send raw invalid JSON
|
|
return s.client.Request("POST", "/api/v2/greet", invalidJSON)
|
|
}
|
|
|
|
func (s *GreetSteps) theServerIsRunningWithV2Enabled() error {
|
|
// Verify the server is running
|
|
if err := s.client.Request("GET", "/api/ready", nil); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Check if v2 endpoint is available (should return 405 Method Not Allowed for GET, which means endpoint exists)
|
|
// If v2 is disabled, this will return 404
|
|
resp, err := s.client.CustomRequest("GET", "/api/v2/greet", nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
// If we get 405, v2 is enabled (endpoint exists but doesn't allow GET)
|
|
if resp.StatusCode == 405 {
|
|
return nil
|
|
}
|
|
|
|
// If we get 404, v2 is not enabled - this means the test is not properly tagged
|
|
// The test should use @v2 tag and the test server should have v2 enabled via createTestConfig
|
|
return fmt.Errorf("v2 endpoint not available - ensure running with @v2 tag to enable v2 API")
|
|
}
|