diff --git a/tests/test_generator.py b/tests/test_generator.py index a41544b..a92f6ab 100644 --- a/tests/test_generator.py +++ b/tests/test_generator.py @@ -1,38 +1,156 @@ 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): - output = tmp_path / "test.html" - generate_docs(str(sample_spec), str(output), 'html') - assert output.exists() - html = output.read_text() - assert '' in html - assert 'API Documentation' in html +class TestExampleGenerator: + def test_generate_string(self): + schema = Schema(type="string") + generator = ExampleGenerator() + result = generator.generate(schema) + assert result == "string" + + 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): - output = tmp_path / "test.md" - generate_docs(str(sample_spec), str(output), 'markdown') - assert output.exists() - md = output.read_text() - assert '# API Documentation' in md +class TestGenerateExamplesFromSchema: + def test_generate_from_dict_schema(self): + schema = {"type": "string"} + result = generate_examples_from_schema(schema) + assert result == "string" + + 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): - output = tmp_path / "test.json" - 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') +if __name__ == "__main__": + pytest.main([__file__, "-v"])