Initial commit: Add OpenAPI Mock Server project
Some checks failed
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled

This commit is contained in:
2026-01-30 03:41:47 +00:00
parent 0c0988816f
commit 069b819d7e

135
.tests/test_server.py Normal file
View File

@@ -0,0 +1,135 @@
"""Tests for the server module."""
import pytest
from fastapi.testclient import TestClient
from openapi_mock.server.server import (
create_app,
OpenAPIMockServer,
ResponseDelayMiddleware,
AuthMiddleware,
)
class TestCreateApp:
"""Tests for create_app function."""
def test_create_app_with_spec(self, temp_spec_file):
"""Test creating a FastAPI app from OpenAPI spec."""
app = create_app(temp_spec_file)
assert app is not None
assert app.title == "Test API"
def test_create_app_with_delay(self, temp_spec_file):
"""Test creating app with response delay."""
app = create_app(temp_spec_file, delay_range=(0.1, 0.5))
assert app is not None
def test_create_app_with_auth(self, temp_spec_file):
"""Test creating app with authentication."""
app = create_app(temp_spec_file, auth_type="bearer")
assert app is not None
class TestOpenAPIMockServer:
"""Tests for OpenAPIMockServer class."""
def test_server_initialization(self, temp_spec_file):
"""Test server initialization from spec."""
server = OpenAPIMockServer(temp_spec_file)
assert server.spec_path == temp_spec_file
assert server.app is not None
def test_server_routes(self, temp_spec_file):
"""Test that server has expected routes."""
server = OpenAPIMockServer(temp_spec_file)
routes = [r.path for r in server.app.routes]
assert "/users" in routes
class TestServerEndpoints:
"""Tests for server endpoint responses."""
def test_get_users_endpoint(self, temp_spec_file, sample_openapi_spec):
"""Test GET /users endpoint returns valid response."""
app = create_app(temp_spec_file)
client = TestClient(app)
response = client.get("/users")
assert response.status_code == 200
data = response.json()
assert isinstance(data, list)
def test_get_user_by_id_endpoint(self, temp_spec_file):
"""Test GET /users/{userId} endpoint."""
app = create_app(temp_spec_file)
client = TestClient(app)
response = client.get("/users/123")
assert response.status_code == 200
data = response.json()
assert isinstance(data, dict)
def test_create_user_endpoint(self, temp_spec_file):
"""Test POST /users endpoint."""
app = create_app(temp_spec_file)
client = TestClient(app)
response = client.post("/users", json={"name": "test"})
assert response.status_code == 200
class TestAuthenticationMiddleware:
"""Tests for authentication middleware."""
def test_no_auth_required(self, temp_spec_file):
"""Test endpoints work without auth when auth is none."""
app = create_app(temp_spec_file, auth_type="none")
client = TestClient(app)
response = client.get("/users")
assert response.status_code == 200
def test_bearer_auth_missing(self, temp_spec_file):
"""Test request fails without Bearer token."""
app = create_app(temp_spec_file, auth_type="bearer")
client = TestClient(app)
response = client.get("/users")
assert response.status_code == 401
def test_bearer_auth_valid(self, temp_spec_file):
"""Test request succeeds with valid Bearer token."""
app = create_app(temp_spec_file, auth_type="bearer")
client = TestClient(app)
response = client.get("/users", headers={"Authorization": "Bearer test-token"})
assert response.status_code == 200
def test_api_key_missing(self, temp_spec_file):
"""Test request fails without API key."""
app = create_app(temp_spec_file, auth_type="api_key")
client = TestClient(app)
response = client.get("/users")
assert response.status_code == 401
def test_api_key_valid(self, temp_spec_file):
"""Test request succeeds with valid API key."""
app = create_app(
temp_spec_file,
auth_type="api_key",
auth_config={"api_keys": ["test-key-123"]}
)
client = TestClient(app)
response = client.get("/users", headers={"X-API-Key": "test-key-123"})
assert response.status_code == 200
def test_basic_auth_missing(self, temp_spec_file):
"""Test request fails without Basic auth."""
app = create_app(temp_spec_file, auth_type="basic")
client = TestClient(app)
response = client.get("/users")
assert response.status_code == 401
def test_basic_auth_valid(self, temp_spec_file):
"""Test request succeeds with valid Basic auth."""
import base64
app = create_app(temp_spec_file, auth_type="basic")
client = TestClient(app)
credentials = base64.b64encode(b"user:password").decode()
response = client.get("/users", headers={"Authorization": f"Basic {credentials}"})
assert response.status_code == 200