package {{ package_name }} import ( "encoding/json" "fmt" "net/http" "os" "strings" "testing" "time" ) const ( baseURL = "{{ mock_server_url }}" testTimeout = 10 * time.Second ) {% if security_schemes %} {% for scheme_name, scheme in security_schemes.items() %} {% if scheme.type == "apiKey" %} func get{{ scheme_name|capitalize }}Headers() map[string]string { return map[string]string{ "{{ scheme.name }}": os.Getenv("API_KEY"), } } {% elif scheme.type == "http" and scheme.scheme == "bearer" %} func getBearerHeaders() map[string]string { return map[string]string{ "Authorization": fmt.Sprintf("Bearer %s", os.Getenv("TOKEN")), } } {% elif scheme.type == "http" and scheme.scheme == "basic" %} func getBasicHeaders(username, password string) map[string]string { auth := username + ":" + password encoded := base64.StdEncoding.EncodeToString([]byte(auth)) return map[string]string{ "Authorization": "Basic " + encoded, } } {% endif %} {% endfor %} {% endif %} func contains(slice []int, item int) bool { for _, s := range slice { if s == item { return true } } return false } {% for path, path_endpoints in grouped_endpoints.items() %} {% for endpoint in path_endpoints %} {% set test_name = (endpoint.method + "_" + path.strip("/").replace("/", "_").replace("{", "").replace("}", "")).title().replace("_", "") %} func Test{{ test_name }}(t *testing.T) { client := &http.Client{Timeout: testTimeout} url := baseURL + "{{ path }}" {% for param in endpoint.parameters %} {% if param.in == "path" %} url = strings.Replace(url, "{+{{ param.name }}}", "{{ param.name }}", 1) {% endif %} {% endfor %} {% if endpoint.method in ["post", "put", "patch"] %} body := `{}` req, err := http.NewRequest("{{ endpoint.method.upper() }}", url, strings.NewReader(body)) {% else %} req, err := http.NewRequest("{{ endpoint.method.upper() }}", url, nil) {% endif %} if err != nil { t.Fatalf("Failed to create request: %v", err) } req.Header.Set("Content-Type", "application/json") {% if endpoint.security %} {% set scheme_name = endpoint.security[0].keys()|first %} {% set scheme = security_schemes[scheme_name] %} {% if scheme.type == "apiKey" %} for k, v := range get{{ scheme_name|capitalize }}Headers() { req.Header.Set(k, v) } {% elif scheme.type == "http" and scheme.scheme == "bearer" %} for k, v := range getBearerHeaders() { req.Header.Set(k, v) } {% endif %} {% endif %} resp, err := client.Do(req) if err != nil { t.Fatalf("Request failed: %v", err) } defer resp.Body.Close() if !contains([]int{200, 201, 204}, resp.StatusCode) { t.Errorf("Expected status in [200, 201, 204], got %d", resp.StatusCode) } if resp.StatusCode == 200 || resp.StatusCode == 201 { var data interface{} if err := json.NewDecoder(resp.Body).Decode(&data); err != nil { t.Errorf("Failed to decode response: %v", err) } } } {% endfor %} {% endfor %} func TestAPIHealth(t *testing.T) { client := &http.Client{Timeout: testTimeout} resp, err := client.Get(baseURL + "/health") if err != nil { t.Fatalf("Health check failed: %v", err) } defer resp.Body.Close() if resp.StatusCode != 200 { t.Errorf("Expected status 200, got %d", resp.StatusCode) } }