129 lines
5.3 KiB
Python
129 lines
5.3 KiB
Python
from pathlib import Path
|
|
|
|
|
|
def test_base_navigation_is_russian_and_has_no_legacy_employees_link():
|
|
template = Path("app/templates/base.html").read_text(encoding="utf-8")
|
|
|
|
assert "Обзор" in template
|
|
assert "Сотрудники" in template
|
|
assert "Запуски" in template
|
|
assert "Выйти" in template
|
|
assert '<a class="admin__brand-link" href="/admin">MIEM Employees</a>' in template
|
|
assert ">Employees<" not in template
|
|
assert "/admin/employees" not in template
|
|
|
|
|
|
def test_directory_template_is_russian_and_uses_display_dates():
|
|
template = Path("app/templates/directory.html").read_text(encoding="utf-8")
|
|
|
|
assert "Сотрудники" in template
|
|
assert "колонки" in template
|
|
assert "Применить фильтры" in template
|
|
assert "Сотрудников на странице" in template
|
|
assert "{% for value in [25, 50, 100] %}" in template
|
|
assert "Показаны" in template
|
|
assert "Новости" in template
|
|
assert "Есть учёная степень" in template
|
|
assert 'data-column="academic_degree"' in template
|
|
assert "employee.news_count" in template
|
|
assert "employee.first_seen_display" in template
|
|
assert "employee.last_seen_display" in template
|
|
assert "employee.dismissed_display" in template
|
|
assert "verification_required" in template
|
|
assert '<label class="directory__field">Статус' in template
|
|
assert 'id="columns-dialog"' in template
|
|
assert 'aria-controls="columns-dialog"' in template
|
|
assert 'aria-labelledby="columns-dialog-title"' in template
|
|
assert "Сбросить фильтры" in template
|
|
assert 'data-columns-preset="review"' in template
|
|
assert '<dialog class="columns-modal"' in template
|
|
assert 'id="columns-dialog"' in template
|
|
assert 'aria-controls="columns-dialog"' in template
|
|
assert "Сбросить фильтры" in template
|
|
assert "Directory" not in template
|
|
assert "employees found" not in template
|
|
|
|
|
|
def test_admin_employees_route_redirects_to_directory():
|
|
source = Path("app/admin.py").read_text(encoding="utf-8")
|
|
|
|
assert 'RedirectResponse("/admin/directory", status_code=303)' in source
|
|
|
|
|
|
def test_dashboard_limits_latest_runs_to_five():
|
|
source = Path("app/admin.py").read_text(encoding="utf-8")
|
|
|
|
assert "order_by(desc(CrawlRun.started_at)).limit(5)" in source
|
|
assert "order_by(desc(CrawlRun.started_at)).limit(10)" not in source
|
|
|
|
|
|
def test_runs_template_links_to_run_detail():
|
|
template = Path("app/templates/runs.html").read_text(encoding="utf-8")
|
|
|
|
assert '<a class="admin__link" href="/admin/runs/{{ run.id }}">' in template
|
|
assert "onclick=" not in template
|
|
assert 'role="link"' not in template
|
|
|
|
|
|
def test_run_detail_template_extends_base_and_shows_change_groups():
|
|
template = Path("app/templates/run_detail.html").read_text(encoding="utf-8")
|
|
|
|
assert '{% extends "base.html" %}' in template
|
|
assert 'id="new-employees"' in template
|
|
assert "Новые сотрудники" in template
|
|
assert "Потеряшки" in template
|
|
assert "Требуют проверки" in template
|
|
assert "Уволенные" in template
|
|
assert "Детализация сотрудников для этого запуска недоступна" in template
|
|
|
|
|
|
def test_dashboard_metric_cards_link_to_admin_targets():
|
|
template = Path("app/templates/dashboard.html").read_text(encoding="utf-8")
|
|
|
|
assert 'href="/admin/directory"' in template
|
|
assert 'href="/admin/directory?status=active"' in template
|
|
assert 'href="/admin/directory?status=verification_required"' in template
|
|
assert '/admin/runs/{{ latest_run.id }}#new-employees' in template
|
|
assert 'href="/admin/directory?status=dismissed"' in template
|
|
assert 'href="/admin/runs"' in template
|
|
|
|
|
|
def test_dashboard_has_dismissed_status_refresh_action():
|
|
template = Path("app/templates/dashboard.html").read_text(encoding="utf-8")
|
|
|
|
assert 'action="/admin/dismissed/refresh"' in template
|
|
assert "Проверить уволенных" in template
|
|
|
|
|
|
def test_progress_template_has_accessible_progressbar():
|
|
for name in ("dashboard.html", "runs.html"):
|
|
template = Path(f"app/templates/{name}").read_text(encoding="utf-8")
|
|
assert 'role="progressbar"' in template
|
|
assert 'aria-valuemin="0"' in template
|
|
assert 'aria-valuemax="100"' in template
|
|
assert "Прогресс парсинга" in template
|
|
|
|
|
|
def test_dashboard_latest_run_rows_link_to_run_detail():
|
|
template = Path("app/templates/dashboard.html").read_text(encoding="utf-8")
|
|
|
|
assert '<a class="admin__link" href="/admin/runs/{{ run.id }}">' in template
|
|
assert "onclick=" not in template
|
|
assert 'role="link"' not in template
|
|
|
|
|
|
def test_admin_js_uses_native_dialog_for_column_settings():
|
|
source = Path("app/static/admin.js").read_text(encoding="utf-8")
|
|
|
|
assert "showModal()" in source
|
|
assert "modal.close()" in source
|
|
assert 'setAttribute("aria-expanded", "true")' in source
|
|
assert "data-progress-retry" in source
|
|
|
|
|
|
def test_base_template_has_skip_link_and_current_navigation_state():
|
|
template = Path("app/templates/base.html").read_text(encoding="utf-8")
|
|
|
|
assert 'href="#main-content"' in template
|
|
assert 'aria-current="page"' in template
|