Initial commit: Add OpenAPI Mock Server project
This commit is contained in:
135
.tests/test_server.py
Normal file
135
.tests/test_server.py
Normal 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
|
||||
Reference in New Issue
Block a user