This commit is contained in:
@@ -1,38 +1,156 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from src.core.generator import generate_docs
|
|
||||||
from pathlib import Path
|
from src.core.models import Schema
|
||||||
|
from src.utils.examples import ExampleGenerator, generate_examples_from_schema
|
||||||
|
|
||||||
|
|
||||||
def test_generate_html(tmp_path, sample_spec):
|
class TestExampleGenerator:
|
||||||
output = tmp_path / "test.html"
|
def test_generate_string(self):
|
||||||
generate_docs(str(sample_spec), str(output), 'html')
|
schema = Schema(type="string")
|
||||||
assert output.exists()
|
generator = ExampleGenerator()
|
||||||
html = output.read_text()
|
result = generator.generate(schema)
|
||||||
assert '<html>' in html
|
assert result == "string"
|
||||||
assert 'API Documentation' in html
|
|
||||||
|
def test_generate_string_with_format(self):
|
||||||
|
schema = Schema(type="string", format="email")
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert result == "user@example.com"
|
||||||
|
|
||||||
|
def test_generate_string_with_date_format(self):
|
||||||
|
schema = Schema(type="string", format="date")
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert result == "2024-01-01"
|
||||||
|
|
||||||
|
def test_generate_string_with_datetime_format(self):
|
||||||
|
schema = Schema(type="string", format="date-time")
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert "T" in result
|
||||||
|
|
||||||
|
def test_generate_integer(self):
|
||||||
|
schema = Schema(type="integer")
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert result == 0
|
||||||
|
assert isinstance(result, int)
|
||||||
|
|
||||||
|
def test_generate_integer_with_default(self):
|
||||||
|
schema = Schema(type="integer", default=42)
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert result == 42
|
||||||
|
|
||||||
|
def test_generate_number(self):
|
||||||
|
schema = Schema(type="number")
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert result == 0.0
|
||||||
|
assert isinstance(result, float)
|
||||||
|
|
||||||
|
def test_generate_boolean(self):
|
||||||
|
schema = Schema(type="boolean")
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert result is False
|
||||||
|
assert isinstance(result, bool)
|
||||||
|
|
||||||
|
def test_generate_boolean_with_example(self):
|
||||||
|
schema = Schema(type="boolean", example=True)
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert result is True
|
||||||
|
|
||||||
|
def test_generate_array(self):
|
||||||
|
schema = Schema(type="array", items={"type": "string"})
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert isinstance(result, list)
|
||||||
|
assert len(result) == 1
|
||||||
|
assert result[0] == "string"
|
||||||
|
|
||||||
|
def test_generate_object(self):
|
||||||
|
schema = Schema(
|
||||||
|
type="object",
|
||||||
|
properties={
|
||||||
|
"name": Schema(type="string"),
|
||||||
|
"age": Schema(type="integer")
|
||||||
|
},
|
||||||
|
required=["name"]
|
||||||
|
)
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert isinstance(result, dict)
|
||||||
|
assert "name" in result
|
||||||
|
assert "age" in result
|
||||||
|
|
||||||
|
def test_generate_object_with_enum(self):
|
||||||
|
schema = Schema(
|
||||||
|
type="object",
|
||||||
|
properties={
|
||||||
|
"status": Schema(type="string", enum=["active", "inactive"])
|
||||||
|
}
|
||||||
|
)
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert isinstance(result, dict)
|
||||||
|
assert result["status"] in ["active", "inactive"]
|
||||||
|
|
||||||
|
def test_generate_with_example(self):
|
||||||
|
schema = Schema(type="string", example="custom-value")
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert result == "custom-value"
|
||||||
|
|
||||||
|
def test_generate_null_schema(self):
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(None)
|
||||||
|
assert result is None
|
||||||
|
|
||||||
|
def test_generate_with_all_of(self):
|
||||||
|
schema = Schema(all_of=[
|
||||||
|
{"type": "object", "properties": {"name": {"type": "string"}}},
|
||||||
|
{"type": "object", "properties": {"email": {"type": "string"}}}
|
||||||
|
])
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert isinstance(result, dict)
|
||||||
|
assert "name" in result
|
||||||
|
assert "email" in result
|
||||||
|
|
||||||
|
def test_generate_with_any_of(self):
|
||||||
|
schema = Schema(any_of=[
|
||||||
|
{"type": "string"},
|
||||||
|
{"type": "integer"}
|
||||||
|
])
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert result is not None
|
||||||
|
|
||||||
|
def test_generate_with_one_of(self):
|
||||||
|
schema = Schema(one_of=[
|
||||||
|
{"type": "string"},
|
||||||
|
{"type": "integer"}
|
||||||
|
])
|
||||||
|
generator = ExampleGenerator()
|
||||||
|
result = generator.generate(schema)
|
||||||
|
assert result is not None
|
||||||
|
|
||||||
|
|
||||||
def test_generate_markdown(tmp_path, sample_spec):
|
class TestGenerateExamplesFromSchema:
|
||||||
output = tmp_path / "test.md"
|
def test_generate_from_dict_schema(self):
|
||||||
generate_docs(str(sample_spec), str(output), 'markdown')
|
schema = {"type": "string"}
|
||||||
assert output.exists()
|
result = generate_examples_from_schema(schema)
|
||||||
md = output.read_text()
|
assert result == "string"
|
||||||
assert '# API Documentation' in md
|
|
||||||
|
def test_generate_with_components(self):
|
||||||
|
schemas = {"User": Schema(type="object", properties={"name": Schema(type="string")})}
|
||||||
|
generator = ExampleGenerator(schemas)
|
||||||
|
result = generator.generate({"$ref": "#/components/schemas/User"})
|
||||||
|
assert isinstance(result, dict)
|
||||||
|
assert "name" in result
|
||||||
|
|
||||||
|
|
||||||
def test_generate_json(tmp_path, sample_spec):
|
if __name__ == "__main__":
|
||||||
output = tmp_path / "test.json"
|
pytest.main([__file__, "-v"])
|
||||||
generate_docs(str(sample_spec), str(output), 'json')
|
|
||||||
assert output.exists()
|
|
||||||
import json
|
|
||||||
data = json.loads(output.read_text())
|
|
||||||
assert 'title' in data
|
|
||||||
assert 'endpoints' in data
|
|
||||||
|
|
||||||
|
|
||||||
def test_invalid_spec(tmp_path):
|
|
||||||
invalid_spec = tmp_path / "invalid.json"
|
|
||||||
invalid_spec.write_text('{"invalid": "spec"}')
|
|
||||||
|
|
||||||
with pytest.raises(ValueError):
|
|
||||||
generate_docs(str(invalid_spec), 'html')
|
|
||||||
|
|||||||
Reference in New Issue
Block a user