64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
"""Smoke tests for openapi_first.loader."""
|
|
|
|
import pytest
|
|
|
|
from openapi_first.loader import OpenAPISpecLoadError, load_openapi
|
|
|
|
|
|
def test_load_openapi_json(spec_file, minimal_spec):
|
|
path = spec_file("openapi.json")
|
|
spec = load_openapi(path)
|
|
assert spec == minimal_spec
|
|
|
|
|
|
def test_load_openapi_yaml(spec_file, minimal_spec):
|
|
path = spec_file("openapi.yaml")
|
|
spec = load_openapi(path)
|
|
assert spec == minimal_spec
|
|
|
|
|
|
def test_load_missing_file(tmp_path):
|
|
with pytest.raises(OpenAPISpecLoadError):
|
|
load_openapi(tmp_path / "missing.json")
|
|
|
|
|
|
def test_load_unsupported_extension(tmp_path):
|
|
path = tmp_path / "openapi.txt"
|
|
path.write_text("{}", encoding="utf-8")
|
|
with pytest.raises(OpenAPISpecLoadError):
|
|
load_openapi(path)
|
|
|
|
|
|
def test_load_invalid_spec(tmp_path):
|
|
path = tmp_path / "invalid.yaml"
|
|
path.write_text("not: [valid: openapi", encoding="utf-8")
|
|
with pytest.raises(OpenAPISpecLoadError):
|
|
load_openapi(path)
|
|
|
|
|
|
def test_load_validation_failure(tmp_path):
|
|
path = tmp_path / "bad.yaml"
|
|
path.write_text("openapi: 3.0.3\ninfo: {}\n", encoding="utf-8")
|
|
with pytest.raises(OpenAPISpecLoadError):
|
|
load_openapi(path)
|
|
|
|
|
|
def test_env_var_resolution(spec_file, monkeypatch):
|
|
monkeypatch.setenv("AUTH_HOST", "http://auth.internal")
|
|
spec = {
|
|
"openapi": "3.0.3",
|
|
"info": {"title": "Env API", "version": "1.0.0"},
|
|
"servers": [{"url": "{AUTH_HOST}/v1"}],
|
|
"paths": {
|
|
"/ping": {
|
|
"get": {
|
|
"operationId": "get_ping",
|
|
"responses": {"200": {"description": "OK"}},
|
|
}
|
|
}
|
|
},
|
|
}
|
|
path = spec_file("env.yaml", spec)
|
|
loaded = load_openapi(path)
|
|
assert loaded["servers"][0]["url"] == "{AUTH_HOST}/v1"
|