diff --git a/.tests/conftest.py b/.tests/conftest.py new file mode 100644 index 0000000..88bb80b --- /dev/null +++ b/.tests/conftest.py @@ -0,0 +1,161 @@ +"""Pytest configuration and fixtures for OpenAPI Mock Server tests.""" + +import sys +from pathlib import Path + +import pytest + +sys.path.insert(0, str(Path(__file__).parent.parent / "src")) + + +@pytest.fixture +def sample_openapi_spec(): + """Sample OpenAPI 3.0 specification for testing.""" + return { + "openapi": "3.0.0", + "info": { + "title": "Test API", + "version": "1.0.0", + "description": "A test API for unit tests" + }, + "paths": { + "/users": { + "get": { + "summary": "List users", + "operationId": "listUsers", + "responses": { + "200": { + "description": "A list of users", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": {"$ref": "#/components/schemas/User"} + } + } + } + } + } + }, + "post": { + "summary": "Create user", + "operationId": "createUser", + "requestBody": { + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/User"} + } + } + }, + "responses": { + "201": { + "description": "User created", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/User"} + } + } + } + } + } + }, + "/users/{userId}": { + "get": { + "summary": "Get user by ID", + "operationId": "getUser", + "parameters": [ + { + "name": "userId", + "in": "path", + "required": True, + "schema": {"type": "integer"} + } + ], + "responses": { + "200": { + "description": "User found", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/User"} + } + } + } + } + } + } + }, + "components": { + "schemas": { + "User": { + "type": "object", + "required": ["id", "username", "email"], + "properties": { + "id": {"type": "integer", "format": "int64"}, + "username": {"type": "string", "minLength": 3, "maxLength": 50}, + "email": {"type": "string", "format": "email"}, + "created_at": {"type": "string", "format": "date-time"}, + "active": {"type": "boolean", "default": True} + } + } + } + } + } + + +@pytest.fixture +def swagger_2_spec(): + """Sample Swagger 2.0 specification for testing.""" + return { + "swagger": "2.0", + "info": { + "title": "Swagger Test API", + "version": "2.0.0" + }, + "paths": { + "/pets": { + "get": { + "summary": "List pets", + "operationId": "listPets", + "responses": { + "200": { + "description": "A list of pets", + "schema": { + "type": "array", + "items": {"$ref": "#/definitions/Pet"} + } + } + } + } + } + }, + "definitions": { + "Pet": { + "type": "object", + "required": ["id", "name"], + "properties": { + "id": {"type": "integer"}, + "name": {"type": "string"}, + "tag": {"type": "string"} + } + } + } + } + + +@pytest.fixture +def temp_spec_file(tmp_path, sample_openapi_spec): + """Create a temporary OpenAPI spec file.""" + import yaml + spec_path = tmp_path / "test-spec.yaml" + with open(spec_path, "w") as f: + yaml.dump(sample_openapi_spec, f) + return str(spec_path) + + +@pytest.fixture +def invalid_yaml_file(tmp_path): + """Create an invalid YAML file.""" + file_path = tmp_path / "invalid.yaml" + with open(file_path, "w") as f: + f.write("invalid: yaml: content: [") + return str(file_path)