Files
dance-lessons-coach/pkg/bdd/steps/common_steps.go
Gabriel Radureau 70c2eb554e
Some checks failed
CI/CD Pipeline / Build Docker Cache (push) Successful in 10s
CI/CD Pipeline / CI Pipeline (push) Failing after 4m8s
🧪 test: implement per-scenario state isolation and enhance validate-test-suite.sh
- 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>
2026-04-11 13:34:51 +02:00

66 lines
1.9 KiB
Go

package steps
import (
"fmt"
"strings"
"dance-lessons-coach/pkg/bdd/testserver"
)
// CommonSteps holds shared step definitions that are used across multiple domains
type CommonSteps struct {
client *testserver.Client
scenarioKey string // Track current scenario for state isolation
}
func NewCommonSteps(client *testserver.Client) *CommonSteps {
return &CommonSteps{client: client}
}
// SetScenarioKey sets the current scenario key for state isolation
func (s *CommonSteps) SetScenarioKey(key string) {
s.scenarioKey = key
}
// Response validation steps
func (s *CommonSteps) theResponseShouldBe(arg1, arg2 string) error {
// The regex captures the full JSON from the feature file, including quotes
// We need to extract just the key and value without the surrounding quotes and backslashes
// Remove the surrounding quotes and backslashes
cleanArg1 := strings.Trim(arg1, `"\`)
cleanArg2 := strings.Trim(arg2, `"\`)
// Build the expected JSON string
expected := fmt.Sprintf(`{"%s":"%s"}`, cleanArg1, cleanArg2)
return s.client.ExpectResponseBody(expected)
}
func (s *CommonSteps) theResponseShouldContainError(expectedError string) error {
// Check if the response contains the expected error
body := string(s.client.GetLastBody())
// For JWT validation errors, check for invalid_token error type
if strings.Contains(body, "invalid_token") {
// If we expect any invalid error and got invalid_token, that's acceptable for JWT tests
if strings.Contains(expectedError, "invalid") {
return nil
}
}
if !strings.Contains(body, expectedError) {
return fmt.Errorf("expected response to contain error %q, got %q", expectedError, body)
}
return nil
}
// Status code validation
func (s *CommonSteps) theStatusCodeShouldBe(expectedStatus int) error {
actualStatus := s.client.GetLastStatusCode()
if actualStatus != expectedStatus {
return fmt.Errorf("expected status %d, got %d", expectedStatus, actualStatus)
}
return nil
}