| name | add-test |
| description | Add unit and integration tests for Prompture functionality. Uses pytest conventions, shared fixtures from conftest.py, and the integration marker pattern. Use when writing tests for new or existing features. |
| metadata | {"author":"prompture","version":"1.0"} |
Add Tests
Creates tests in tests/ following project conventions.
Infrastructure
- Framework: pytest
- Shared fixtures:
tests/conftest.py
- Default model:
DEFAULT_MODEL (currently "ollama/gpt-oss:20b")
- Integration marker:
@pytest.mark.integration (skipped by default)
Available Fixtures and Helpers
sample_json_schema
integration_driver
assert_valid_usage_metadata(meta)
assert_jsonify_response_structure(response)
File Naming
tests/test_{module}.py — maps to source module
tests/test_{feature}.py — cross-cutting features
Test Structure
import pytest
from prompture import extract_with_model
class TestFeatureName:
"""Tests for {feature}."""
def test_basic_behavior(self):
"""What this test verifies."""
result = some_function(...)
assert result["key"] == expected
def test_error_handling(self):
"""Should raise ValueError on invalid input."""
with pytest.raises(ValueError, match="expected"):
some_function(bad_input)
class TestFeatureIntegration:
"""Integration tests requiring live LLM access."""
@pytest.mark.integration
def test_live_extraction(self, integration_driver, sample_json_schema):
result = extract_and_jsonify(
text="John is 30 years old",
json_schema=sample_json_schema,
model_name=DEFAULT_MODEL,
)
assert_jsonify_response_structure(result)
assert_valid_usage_metadata(result["usage"])
Rules
- Unit tests (no LLM): no marker, must always pass
- Integration tests (live LLM): must have
@pytest.mark.integration
- Use conftest fixtures — don't redefine them
- One test class per logical group with docstrings
- Test both happy path and error cases
- Mock HTTP layer for driver unit tests
Running
pytest tests/ -x -q
pytest tests/ --run-integration -x -q
pytest tests/test_core.py::TestClass::test_method