/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.4
tests/integration/application/test_application.py
188 строк
6 KB
User
0.4.1 - продолжаю переписывать тесты. пофиксил несколько багов по дороге.
04 июл 2026, 23:46
04 июл 2026, 23:46
7632abc
Код
Авторство
О чём код?
"""Интеграционные тесты для Application.""" import pytest import tempfile import os import yaml from unittest.mock import Mock, patch from liquidcode import Application, route from src.liquidcode.http import HttpResponse from liquidcode.routing import Router class TestApplicationIntegration: """Интеграционные тесты для Application с реальными компонентами.""" def test_application_with_controller_and_route(self): """Интеграция контроллера и маршрутов.""" class TestController: @route("/api/users", methods=["GET"]) def list_users(self): return {"users": ["Alice", "Bob"]} app = Application() app.add_controller(TestController) # Проверяем, что маршрут добавлен assert app.router.has_route("/api/users", "GET") def test_application_full_workflow(self): """Полный рабочий цикл приложения.""" class UserController: @route("/users/{id}", methods=["GET"]) def get_user(self, id): return {"id": id, "name": f"User {id}"} app = Application() app.add_controller(UserController) # Проверяем регистрацию assert app.router.has_route("/users/{id}", "GET") # Проверяем обнаружение with tempfile.TemporaryDirectory() as tmpdir: controller_dir = os.path.join(tmpdir, "src", "Controller") os.makedirs(controller_dir) controller_file = os.path.join(controller_dir, "TestController.py") with open(controller_file, "w") as f: f.write(""" from liquidcode import route class TestController: @route('/test') def index(self): return {'message': 'Hello'} """) app2 = Application() app2.discover_controllers(controller_dir) assert app2.router.has_route("/test", "GET") # Cleanup if os.path.exists(controller_file): os.remove(controller_file) def test_application_with_middleware_integration(self): """Интеграция с middleware.""" def logging_middleware(request, call_next): # Добавляем логирование request.environ["logged"] = True response = call_next(request) return response app = Application() app.add_middleware(logging_middleware) # Проверяем, что middleware зарегистрирован assert len(app.kernel._middlewares) > 0 def test_application_with_hooks(self): """Интеграция с хуками.""" app = Application() def before_hook(request): request.environ["hook_called"] = True app.add_before_request(before_hook) # Проверяем регистрацию хука assert len(app.kernel._before_request_hooks) > 0 def test_application_with_static(self): """Интеграция со статикой.""" app = Application() app.set_static(prefix="/assets", directory="public") assert app._static_prefix == "/assets" assert app._static_dir == "public" def test_application_config_full(self): """Полная интеграция с конфигурацией.""" with tempfile.TemporaryDirectory() as tmpdir: config_file = os.path.join(tmpdir, "config.yaml") config = { "parameters": { "host": "0.0.0.0", "port": 9000, "debug": True, }, "middleware": [ { "class": "liquidcode.middleware.LoggingMiddleware", "enabled": True, "priority": 100, } ], } with open(config_file, "w") as f: yaml.dump(config, f) app = Application() app.load_config(config_file) assert app.host == "0.0.0.0" assert app.port == 9000 assert app._debug is True class TestControllerDecoratorIntegration: """Интеграционные тесты для @controller decorator.""" def test_controller_with_prefix_integration(self): """Контроллер с префиксом.""" from liquidcode import controller @controller(prefix="/api/users") class UserController: @route("/", methods=["GET"]) def list(self): return {"users": []} app = Application() app.add_controller(UserController) assert app.router.has_route("/api/users", "GET") def test_controller_with_middlewares_integration(self): """Контроллер с middleware.""" from liquidcode import controller def test_middleware(request, call_next): return call_next(request) @controller(prefix="/api", middlewares=[test_middleware]) class ApiController: @route("/test") def index(self): return {"test": True} app = Application() app.add_controller(ApiController) assert app.router.has_route("/api/test", "GET") def test_controller_nested_routes_integration(self): """Вложенные маршруты контроллера.""" from liquidcode import controller @controller(prefix="/api/users") class UserController: @route("/", methods=["GET"]) def list(self): return {"users": []} @route("/{id}", methods=["GET"]) def get(self, id): return {"id": id} app = Application() app.add_controller(UserController) assert app.router.has_route("/api/users", "GET") assert app.router.has_route("/api/users/{id}", "GET")