diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..792fbb4 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,267 @@ +"""Pytest configuration and fixtures for OpenAPI Mock Generator tests.""" + +import pytest +import tempfile +import json +from pathlib import Path + + +@pytest.fixture +def temp_dir(): + """Create a temporary directory for tests.""" + with tempfile.TemporaryDirectory() as tmpdir: + yield Path(tmpdir) + + +@pytest.fixture +def sample_openapi_yaml(): + """Sample OpenAPI specification in YAML format.""" + return """ +openapi: \"3.0.0\" +info: + title: Sample API + version: \"1.0.0\" +paths: + /users: + get: + summary: Get all users + parameters: + - name: page + in: query + schema: + type: integer + - name: limit + in: query + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + type: integer + name: + type: string + email: + type: string + format: email + createdAt: + type: string + format: date-time + /users/{userId}: + get: + summary: Get user by ID + parameters: + - name: userId + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + id: + type: integer + name: + type: string + email: + type: string + format: email + '404': + description: User not found + content: + application/json: + schema: + type: object + properties: + error: + type: string + message: + type: string + put: + summary: Update user + parameters: + - name: userId + in: path + required: true + schema: + type: integer + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + email: + type: string + format: email + required: + - name + responses: + '200': + description: User updated + content: + application/json: + schema: + type: object + properties: + id: + type: integer + name: + type: string + /posts: + post: + summary: Create a post + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + title: + type: string + content: + type: string + authorId: + type: integer + responses: + '201': + description: Post created + content: + application/json: + schema: + type: object + properties: + id: + type: integer + title: + type: string + content: + type: string + authorId: + type: integer + publishedAt: + type: string + format: date-time +components: + schemas: + User: + type: object + properties: + id: + type: integer + name: + type: string + email: + type: string + format: email + createdAt: + type: string + format: date-time + Post: + type: object + properties: + id: + type: integer + title: + type: string + content: + type: string + authorId: + type: integer + publishedAt: + type: string + format: date-time + Error: + type: object + properties: + error: + type: string + message: + type: string +""" + + +@pytest.fixture +def sample_openapi_json(): + """Sample OpenAPI specification in JSON format.""" + return json.dumps({ + "openapi": "3.0.0", + "info": { + "title": "Sample API", + "version": "1.0.0" + }, + "paths": { + "/users": { + "get": { + "summary": "Get all users", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": {"type": "integer"}, + "name": {"type": "string"} + } + } + } + } + } + } + } + } + } + } + }, indent=2) + + +@pytest.fixture +def invalid_openapi_yaml(): + """Invalid OpenAPI specification (missing openapi version).""" + return """ +info: + title: Invalid API + version: \"1.0.0\" +paths: + /users: + get: + responses: + '200': + description: Success +""" + + +@pytest.fixture +def temp_spec_file(sample_openapi_yaml, tmp_path): + """Create a temporary OpenAPI spec file.""" + spec_file = tmp_path / "openapi.yaml" + spec_file.write_text(sample_openapi_yaml) + return str(spec_file) + + +@pytest.fixture +def temp_json_spec_file(sample_openapi_json, tmp_path): + """Create a temporary OpenAPI spec file in JSON format.""" + spec_file = tmp_path / "openapi.json" + spec_file.write_text(sample_openapi_json) + return str(spec_file)