This commit is contained in:
74
tests/test_parser.py
Normal file
74
tests/test_parser.py
Normal file
@@ -0,0 +1,74 @@
|
||||
import pytest
|
||||
from src.core.parser import parse_openapi_spec, load_spec_file, ParseError
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sample_spec(tmp_path):
|
||||
spec = {
|
||||
"openapi": "3.0.0",
|
||||
"info": {
|
||||
"title": "Test API",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
"paths": {
|
||||
"/users": {
|
||||
"get": {
|
||||
"summary": "Get users",
|
||||
"description": "Retrieve a list of users",
|
||||
"tags": ["users"],
|
||||
"responses": {
|
||||
"200": {"description": "Successful response"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
path = tmp_path / "test.json"
|
||||
path.write_text(__import__('json').dumps(spec))
|
||||
return path
|
||||
|
||||
|
||||
def test_parse_valid_spec(sample_spec):
|
||||
result = parse_openapi_spec(str(sample_spec))
|
||||
assert result['valid'] == True
|
||||
assert result['title'] == 'Test API'
|
||||
assert result['version_num'] == '1.0.0'
|
||||
|
||||
|
||||
def test_parse_invalid_spec(tmp_path):
|
||||
invalid = tmp_path / "invalid.json"
|
||||
invalid.write_text('{"invalid": "spec"}')
|
||||
result = parse_openapi_spec(str(invalid))
|
||||
assert result['valid'] == False
|
||||
assert 'errors' in result
|
||||
|
||||
|
||||
def test_load_json_spec(sample_spec):
|
||||
spec = load_spec_file(str(sample_spec))
|
||||
assert spec['info']['title'] == 'Test API'
|
||||
|
||||
|
||||
def test_load_yaml_spec(tmp_path):
|
||||
content = '''
|
||||
openapi: "3.0.0"
|
||||
info:
|
||||
title: Test API
|
||||
version: "1.0.0"
|
||||
paths: {}
|
||||
'''
|
||||
path = tmp_path / "test.yaml"
|
||||
path.write_text(content)
|
||||
spec = load_spec_file(str(path))
|
||||
assert spec['info']['title'] == 'Test API'
|
||||
|
||||
|
||||
def test_parse_error_missing_file():
|
||||
with pytest.raises(ParseError):
|
||||
load_spec_file('/nonexistent/path.json')
|
||||
|
||||
|
||||
def test_parse_error_unsupported_format(tmp_path):
|
||||
path = tmp_path / "test.txt"
|
||||
path.write_text('some content')
|
||||
with pytest.raises(ParseError):
|
||||
load_spec_file(str(path))
|
||||
Reference in New Issue
Block a user