fix: критические баги и качество кода — полный аудит

Критические фиксы:
- main.py: монтировать /static из web/static/ (CSS не грузился совсем)
- api/scans.py: filtered total count (был всегда общий, игнорируя фильтры)
- web/routes.py: исправлен VALID_SORT_FIELDS (отсутствовали ключи packages)
- web/routes.py: filtered total count для web scans list
- package_detail.html: f.data.X вместо f.X (findings не отображались)

Чистка мёртвого кода:
- config.py: удалён _parse_repos и nexus_repositories (не использовались)
- web/routes.py: удалён completed_scans/failed_scans (не отображались)
- удалён мёртвый guarddog_nexus/static/style.css (67-байтный стаб)

Качество кода:
- web/routes.py: Jinja2 Environment кэшируется на уровне модуля
- Вынесен дублирующийся JS в web/static/app.js
- Вынесены дублирующиеся inline-стили в CSS-классы
- Исправлен duplicate class attribute в списках
- Удалены гигантские SVG из empty states

Тесты:
- 20 новых edge-case тестов (CSV export, search/filter/sort, 404, pagination)
- Добавлен sample_flagged_scan fixture
- Итого: 50 тестов, все зелёные
This commit is contained in:
Marker689
2026-05-10 03:46:05 +03:00
parent 6c8e89c95e
commit c43e7c4c9b
15 changed files with 329 additions and 145 deletions

View File

@@ -1,7 +1,7 @@
"""Configuration via environment variables."""
import os
from dataclasses import dataclass, field
from dataclasses import dataclass
@dataclass
@@ -9,7 +9,6 @@ class Config:
nexus_url: str = os.getenv("NEXUS_URL", "http://localhost:8081")
nexus_username: str = os.getenv("NEXUS_USERNAME", "admin")
nexus_password: str = os.getenv("NEXUS_PASSWORD", "admin123")
nexus_repositories: list[str] = field(default_factory=lambda: _parse_repos())
database_path: str = os.getenv("DATABASE_PATH", "data/guarddog.db")
@@ -26,9 +25,4 @@ class Config:
temp_dir: str = os.getenv("TEMP_DIR", "/tmp/guarddog-nexus")
def _parse_repos() -> list[str]:
raw = os.getenv("NEXUS_REPOSITORIES", "")
return [r.strip() for r in raw.split(",") if r.strip()]
config = Config()