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 } func NewCommonSteps(client *testserver.Client) *CommonSteps { return &CommonSteps{client: client} } // 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 }