Files
dance-lessons-coach/pkg/bdd/steps/greet_steps.go
Gabriel Radureau 5eec64e5e8
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
🧪 test: add JWT secret rotation BDD scenarios and step implementations (#12)
 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>
2026-04-11 17:56:45 +02:00

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")
}