skills_all/api-test-generator/SKILL.md
Генерация полных Python pytest тестов для REST API эндпоинтов с валидацией схемы. Использовать при создании тестов для новых эндпоинтов, добавлении покрытия для CRUD операций или валидации соответствия API с OpenAPI схемами.
npx skillsauth add microck/ordinary-claude-skills api-test-generatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate comprehensive Python pytest tests for MikoPBX REST API endpoints with full parameter coverage, schema validation, and edge case testing.
Analyzes DataStructure.php files and generates complete pytest test suites including:
Use this skill when you need to:
When the user requests test generation:
Identify the endpoint
/pbxcore/api/v3/extensions)Locate DataStructure.php
find /Users/nb/PhpstormProjects/mikopbx/Core/src/PBXCoreREST/Lib -name "DataStructure.php" | grep -i "{resource}"
Analyze parameter definitions
Extract from DataStructure.php:
Generate test file Use the complete template from test-template.py
Customize for endpoint
{ResourceName} placeholderstests/api/
├── test_{resource}_api.py # Main test file
└── conftest.py # Shared fixtures
Each test file should have these test classes:
class TestCreate{ResourceName}:
"""Test POST endpoint for creating resources"""
- test_create_with_valid_data()
- test_create_missing_required_field()
- test_create_with_invalid_type()
class TestGet{ResourceName}:
"""Test GET endpoint for retrieving resources"""
- test_get_all()
- test_get_by_id()
- test_get_nonexistent()
class TestUpdate{ResourceName}:
"""Test PUT/PATCH endpoints for updating resources"""
- test_update_with_valid_data()
- test_patch_partial_update()
class TestDelete{ResourceName}:
"""Test DELETE endpoint for removing resources"""
- test_delete_existing()
- test_delete_nonexistent()
class TestSchemaValidation{ResourceName}:
"""Test response schema validation"""
- test_response_matches_openapi_schema()
class TestEdgeCases{ResourceName}:
"""Test edge cases and boundary conditions"""
- test_special_characters_in_fields()
- test_empty_string_values()
- test_boundary_values()
@pytest.fixture
def auth_token():
"""Get authentication token"""
response = requests.post(
f"{BASE_URL}/pbxcore/api/v3/auth/login",
json={"login": "admin", "password": "123456789MikoPBX#1"},
verify=False
)
return response.json()["data"]["access_token"]
@pytest.fixture
def headers(auth_token):
"""Standard headers with authentication"""
return {
"Authorization": f"Bearer {auth_token}",
"Content-Type": "application/json"
}
def test_create_with_valid_data(self, headers):
"""Test creating a resource with all valid required parameters"""
payload = {
# Based on DataStructure.php
}
response = requests.post(
f"{BASE_URL}{API_PATH}",
json=payload,
headers=headers,
verify=False
)
assert response.status_code == 200, f"Expected 200, got {response.status_code}: {response.text}"
data = response.json()
assert "data" in data
assert "id" in data["data"]
# Validate returned values match input
for key, value in payload.items():
assert data["data"][key] == value
def test_create_missing_required_field(self, headers):
"""Test validation when required field is missing"""
payload = {
# Missing required field
}
response = requests.post(
f"{BASE_URL}{API_PATH}",
json=payload,
headers=headers,
verify=False
)
assert response.status_code == 400
assert "messages" in response.json()
def test_special_characters_in_fields(self, headers):
"""Test handling of special characters"""
special_chars = "Test <script>alert('xss')</script> & \"quotes\""
payload = {
"string_field": special_chars,
}
response = requests.post(...)
assert response.status_code == 200
assert response.json()["data"]["string_field"] == special_chars
When analyzing DataStructure.php, extract these key elements:
public static function getParameterDefinitions(): array
{
return [
'request' => [
'POST' => [
'parameter_name' => [
'type' => 'string', // Extract type
'description' => 'Description', // Extract description
'example' => 'value', // Use for test data
'required' => true, // Required vs optional
'default' => 'default_value', // Default value
'enum' => ['val1', 'val2'], // Valid enum values
'pattern' => '^[a-z]+$', // Regex pattern
'minLength' => 1, // Min length
'maxLength' => 100, // Max length
],
],
],
];
}
example and default valuesAdd to the top of each test file:
"""
Tests for {ResourceName} API endpoint
API Endpoint: /pbxcore/api/v3/{resource-path}
DataStructure: src/PBXCoreREST/Lib/{ResourceName}/DataStructure.php
Test Coverage:
- CRUD operations (Create, Read, Update, Delete)
- Required vs optional parameters
- Data type validations
- Enum value validations
- Pattern validations (regex)
- Boundary conditions (min/max values)
- Special characters and edge cases
- Schema validation (when SCHEMA_VALIDATION_STRICT=1)
Requirements:
- pytest
- requests
- Docker container running with MikoPBX
Run tests:
pytest tests/api/test_{resource_name}.py -v
Run with schema validation:
# Ensure SCHEMA_VALIDATION_STRICT=1 is set in container
pytest tests/api/test_{resource_name}.py -v
"""
Always generate:
# Run all API tests
pytest tests/api/ -v
# Run specific endpoint tests
pytest tests/api/test_extensions_api.py -v
# Run specific test class
pytest tests/api/test_extensions_api.py::TestCreateExtensions -v
# Run specific test
pytest tests/api/test_extensions_api.py::TestCreateExtensions::test_create_with_valid_data -v
# Enable schema validation in container
docker exec mikopbx_container sh -c 'export SCHEMA_VALIDATION_STRICT=1'
# Run tests
pytest tests/api/test_extensions_api.py -v
# Run only CRUD tests
pytest tests/api/ -m crud -v
# Skip slow tests
pytest tests/api/ -m "not slow" -v
# Run smoke tests
pytest tests/api/ -m smoke -v
/auth/loginverify=False for self-signed certificateshttps://mikopbx-php83.localhost:8445SCHEMA_VALIDATION_STRICT=1 in containerComplete test templates for copy-paste usage:
Test a new endpoint in 5 steps:
{ResourceName} and {resource-path}pytest tests/api/test_{resource}_api.py -vNeed specific patterns?
User: "Generate pytest tests for the Extensions API endpoint"
Your response should:
/src/PBXCoreREST/Lib/Extensions/DataStructure.phptests/api/test_extensions_api.pyIssue: Test fails with "Unauthorized"
Solution: Check that auth_token fixture is working and token is valid
Issue: Schema validation tests don't run
Solution: Ensure SCHEMA_VALIDATION_STRICT=1 is set in container
Issue: Tests are flaky Solution: Ensure test isolation - each test should create its own resources
Issue: Container not accessible
Solution: Check container is running: docker ps | grep mikopbx
Issue: SSL certificate errors
Solution: Ensure verify=False is set in requests
# Check container is running
docker ps | grep mikopbx
# Check environment variable
docker exec mikopbx_container env | grep SCHEMA_VALIDATION_STRICT
# View API logs
docker exec mikopbx_container tail -f /storage/usbdisk1/mikopbx/log/php/error.log
# Test API manually
curl -k https://mikopbx-php83.localhost:8445/pbxcore/api/v3/system/ping
development
Migrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5. Use when the user wants to update their codebase, prompts, or API calls to use Opus 4.5. Handles model string updates and prompt adjustments for known Opus 4.5 behavioral differences. Does NOT migrate Haiku 4.5.
development
Analyzes Claude Code usage patterns and provides comprehensive recommendations. Runs usage analysis, discovers GitHub community resources, suggests CLAUDE.md improvements, and fetches latest docs on-demand. Use when user wants to optimize their Claude Code workflow, create configurations (agents/skills/commands), or set up project documentation.
development
Quantum computing framework for building, simulating, optimizing, and executing quantum circuits. Use this skill when working with quantum algorithms, quantum circuit design, quantum simulation (noiseless or noisy), running on quantum hardware (Google, IonQ, AQT, Pasqal), circuit optimization and compilation, noise modeling and characterization, or quantum experiments and benchmarking (VQE, QAOA, QPE, randomized benchmarking).
tools
Browser automation, debugging, and performance analysis using Puppeteer CLI scripts. Use for automating browsers, taking screenshots, analyzing performance, monitoring network traffic, web scraping, form automation, and JavaScript debugging.