Add test files: conftest, parser tests, generator tests
Some checks failed
CI / test (push) Has been cancelled
Some checks failed
CI / test (push) Has been cancelled
This commit is contained in:
144
tests/test_parser.py
Normal file
144
tests/test_parser.py
Normal file
@@ -0,0 +1,144 @@
|
||||
"""Tests for OpenAPI Spec Parser."""
|
||||
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
|
||||
from src.core.parser import (
|
||||
OpenAPIParser,
|
||||
OpenAPIParserError,
|
||||
InvalidOpenAPIFormat,
|
||||
UnsupportedOpenAPIVersion,
|
||||
)
|
||||
|
||||
|
||||
class TestOpenAPIParser:
|
||||
"""Tests for OpenAPIParser class."""
|
||||
|
||||
def test_load_valid_yaml_spec(self, temp_spec_file):
|
||||
"""Test loading a valid YAML OpenAPI specification."""
|
||||
parser = OpenAPIParser(str(temp_spec_file))
|
||||
spec = parser.load()
|
||||
|
||||
assert spec is not None
|
||||
assert spec["openapi"] == "3.0.0"
|
||||
assert spec["info"]["title"] == "Sample API"
|
||||
assert spec["info"]["version"] == "1.0.0"
|
||||
|
||||
def test_load_valid_json_spec(self, temp_json_spec_file):
|
||||
"""Test loading a valid JSON OpenAPI specification."""
|
||||
parser = OpenAPIParser(str(temp_json_spec_file))
|
||||
spec = parser.load()
|
||||
|
||||
assert spec is not None
|
||||
assert spec["openapi"] == "3.0.0"
|
||||
|
||||
def test_file_not_found(self):
|
||||
"""Test handling of non-existent spec file."""
|
||||
parser = OpenAPIParser("/nonexistent/path/openapi.yaml")
|
||||
|
||||
with pytest.raises(FileNotFoundError):
|
||||
parser.load()
|
||||
|
||||
def test_get_paths(self, temp_spec_file):
|
||||
"""Test extracting paths from specification."""
|
||||
parser = OpenAPIParser(str(temp_spec_file))
|
||||
parser.load()
|
||||
paths = parser.get_paths()
|
||||
|
||||
assert "/users" in paths
|
||||
assert "/users/{userId}" in paths
|
||||
assert "/posts" in paths
|
||||
|
||||
def test_get_response_schema(self, temp_spec_file):
|
||||
"""Test extracting response schema for an operation."""
|
||||
parser = OpenAPIParser(str(temp_spec_file))
|
||||
parser.load()
|
||||
|
||||
schema = parser.get_response_schema("/users", "get", "200")
|
||||
assert schema is not None
|
||||
|
||||
def test_get_response_schema_not_found(self, temp_spec_file):
|
||||
"""Test response schema not found for undefined status code."""
|
||||
parser = OpenAPIParser(str(temp_spec_file))
|
||||
parser.load()
|
||||
|
||||
schema = parser.get_response_schema("/users", "get", "500")
|
||||
assert schema is None
|
||||
|
||||
def test_version_extraction(self, temp_spec_file):
|
||||
"""Test OpenAPI version extraction."""
|
||||
parser = OpenAPIParser(str(temp_spec_file))
|
||||
parser.load()
|
||||
|
||||
assert parser.version == "3.0.0"
|
||||
|
||||
def test_get_servers(self, temp_spec_file):
|
||||
"""Test extracting servers from specification."""
|
||||
parser = OpenAPIParser(str(temp_spec_file))
|
||||
parser.load()
|
||||
|
||||
servers = parser.get_servers()
|
||||
assert isinstance(servers, list)
|
||||
|
||||
def test_get_base_path(self, temp_spec_file):
|
||||
"""Test extracting base path from specification."""
|
||||
parser = OpenAPIParser(str(temp_spec_file))
|
||||
parser.load()
|
||||
|
||||
base_path = parser.get_base_path()
|
||||
assert isinstance(base_path, str)
|
||||
|
||||
|
||||
class TestOpenAPIParserErrors:
|
||||
"""Tests for parser error handling."""
|
||||
|
||||
def test_invalid_yaml_format(self, tmp_path):
|
||||
"""Test handling of invalid YAML format."""
|
||||
invalid_file = tmp_path / "invalid.yaml"
|
||||
invalid_file.write_text("not: valid: yaml: content: [")
|
||||
|
||||
parser = OpenAPIParser(str(invalid_file))
|
||||
|
||||
with pytest.raises(InvalidOpenAPIFormat):
|
||||
parser.load()
|
||||
|
||||
def test_missing_openapi_version(self, tmp_path):
|
||||
"""Test handling of missing OpenAPI version."""
|
||||
invalid_file = tmp_path / "missing_version.yaml"
|
||||
invalid_file.write_text("""
|
||||
info:
|
||||
title: Test API
|
||||
version: \"1.0.0\"
|
||||
paths: {}
|
||||
""")
|
||||
|
||||
parser = OpenAPIParser(str(invalid_file))
|
||||
|
||||
with pytest.raises(InvalidOpenAPIFormat):
|
||||
parser.load()
|
||||
|
||||
def test_unsupported_version(self, tmp_path):
|
||||
"""Test handling of unsupported OpenAPI version."""
|
||||
invalid_file = tmp_path / "unsupported.yaml"
|
||||
invalid_file.write_text("""
|
||||
openapi: \"2.0.0\"
|
||||
info:
|
||||
title: Test API
|
||||
version: \"1.0.0\"
|
||||
paths: {}
|
||||
""")
|
||||
|
||||
parser = OpenAPIParser(str(invalid_file))
|
||||
|
||||
with pytest.raises(UnsupportedOpenAPIVersion):
|
||||
parser.load()
|
||||
|
||||
def test_invalid_json_format(self, tmp_path):
|
||||
"""Test handling of invalid JSON format."""
|
||||
invalid_file = tmp_path / "invalid.json"
|
||||
invalid_file.write_text("{invalid json}")
|
||||
|
||||
parser = OpenAPIParser(str(invalid_file))
|
||||
|
||||
with pytest.raises(InvalidOpenAPIFormat):
|
||||
parser.load()
|
||||
Reference in New Issue
Block a user