🧪 test: add JWT secret rotation BDD scenarios and step implementations (#12)
All checks were successful
CI/CD Pipeline / Build Docker Cache (push) Successful in 9s
CI/CD Pipeline / CI Pipeline (push) Successful in 4m15s
CI/CD Pipeline / Trigger Docker Push (push) Has been skipped

 merge: implement JWT secret rotation with BDD scenario isolation

- Implement JWT secret rotation mechanism (closes #8)
- Add per-scenario state isolation for BDD tests (closes #14)
- Validate password reset workflow via BDD tests (closes #7)
- Fix port conflicts in test validation
- Add state tracer for debugging test execution
- Document BDD isolation strategies in ADR 0025
- Fix PostgreSQL configuration environment variables

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Co-authored-by: Gabriel Radureau <arcodange@gmail.com>
Co-committed-by: Gabriel Radureau <arcodange@gmail.com>
This commit was merged in pull request #12.
This commit is contained in:
2026-04-11 17:56:45 +02:00
committed by arcodange
parent 5de703468f
commit 5eec64e5e8
66 changed files with 10025 additions and 701 deletions

View File

@@ -1,19 +1,26 @@
package steps
import (
"dance-lessons-coach/pkg/bdd/testserver"
"fmt"
"dance-lessons-coach/pkg/bdd/testserver"
)
// GreetSteps holds greet-related step definitions
type GreetSteps struct {
client *testserver.Client
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 {
@@ -42,8 +49,7 @@ func (s *GreetSteps) iSendPOSTRequestToV2GreetWithInvalidJSON(invalidJSON string
}
func (s *GreetSteps) theServerIsRunningWithV2Enabled() error {
// Verify the server is running and v2 is enabled by checking v2 endpoint exists
// First check server is running
// Verify the server is running
if err := s.client.Request("GET", "/api/ready", nil); err != nil {
return err
}
@@ -57,10 +63,11 @@ func (s *GreetSteps) theServerIsRunningWithV2Enabled() error {
defer resp.Body.Close()
// If we get 405, v2 is enabled (endpoint exists but doesn't allow GET)
// If we get 404, v2 is disabled
if resp.StatusCode == 404 {
return fmt.Errorf("v2 endpoint not available - v2 feature flag not enabled")
if resp.StatusCode == 405 {
return nil
}
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")
}