""" Smoke-tests: проверяем что все ключевые роуты не падают с NameError/ImportError. Не проверяем бизнес-логику — только что страницы отдают ответ. """ import pytest # ── Публичные страницы ────────────────────────────────────────────────────── def test_index_anonymous(client): """Главная без авторизации — либо страница сервисов, либо логин.""" r = client.get("/", follow_redirects=True) assert r.status_code == 200 def test_login_form_on_index(client): """Форма логина рендерится на /.""" r = client.get("/", follow_redirects=True) assert r.status_code == 200 assert "csrf" in r.text.lower() or "login" in r.text.lower() or "пароль" in r.text.lower() def _get_csrf(client): from conftest import _extract_csrf return _extract_csrf(client) def test_login_wrong_password(client): csrf = _get_csrf(client) r = client.post("/login", data={ "username": "admin", "password": "wrongpass", "csrf_token": csrf, }) assert r.status_code in (200, 401) def test_login_csrf_fail(client): r = client.post("/login", data={ "username": "admin", "password": "testpass123", "csrf_token": "bad-token", }) assert r.status_code == 403 def test_login_no_such_method(client): r = client.get("/login") assert r.status_code in (200, 405) # только документируем поведение # ── Авторизованные страницы ───────────────────────────────────────────────── def test_login_success(auth_client): r = auth_client.get("/", follow_redirects=True) assert r.status_code == 200 def test_admin_page(auth_client): r = auth_client.get("/admin") assert r.status_code == 200 def test_admin_requires_auth(client): from fastapi.testclient import TestClient import main as app_module fresh = TestClient(app_module.app, raise_server_exceptions=False) r = fresh.get("/admin", follow_redirects=False) assert r.status_code in (302, 303, 401, 403) # ── API роуты ─────────────────────────────────────────────────────────────── def test_api_services_list(auth_client): r = auth_client.get("/api/admin/services") assert r.status_code in (200, 404, 405) def test_api_users_list(auth_client): r = auth_client.get("/api/admin/users") assert r.status_code in (200, 404, 405) def test_api_categories(auth_client): r = auth_client.get("/api/admin/categories") assert r.status_code in (200, 404, 405) # ── Несуществующие роуты ──────────────────────────────────────────────────── def test_404(client): r = client.get("/this-does-not-exist-xyz") assert r.status_code == 404 def test_session_unknown(auth_client): r = auth_client.get("/s/00000000-0000-0000-0000-000000000000/") assert r.status_code in (200, 302, 303, 404) def test_go_unknown_slug(auth_client): r = auth_client.get("/go/nonexistent-service-slug", follow_redirects=False) assert r.status_code in (302, 303, 404)