gendesign/backend/tests/skip_allowlist.txt
bot-backend c9c7aab228
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m30s
CI / backend-tests (pull_request) Successful in 16m41s
test(ptica): объявить пропуск нового EXPLAIN-теста в skip_allowlist
Причина четырёх красных прогонов backend-tests найдена, и это не инфраструктура:
сторож в tests/conftest.py (pytest_sessionfinish) роняет прогон, если тест
пропустился, но не объявлен в skip_allowlist.txt. Мои два новых
параметризованных EXPLAIN-теста скипаются без TEST_DATABASE_URL и в списке
не значились → session.exitstatus = 1 при зелёной сводке «4647 passed».

Сторож сработал ПРАВИЛЬНО и ровно за тем, зачем написан: пропуск без записи
неотличим от пройденной проверки. Его сообщение всё это время лежало в логе
на 1014-й строке, за две секунды до сводки, — я его не увидел, потому что
искал по английским «FAILED/ERROR» и смотрел хвост лога.

Почему проверку нельзя выполнить здесь (как требует шапка файла): EXPLAIN идёт
против КОПИИ ПРОДОВОЙ схемы через SSH-туннель, CI намеренно не задаёт
TEST_DATABASE_URL (комментарий в ci.yml у backend-tests). Где выполняется
вместо этого: вручную с туннелем — прогнан в этой ветке, 4 passed, и со
строкой из main падает 1 из 3.

Плюс backend/.gitignore: coverage.xml. Локальный прогон с --cov-report=xml
кладёт 1.2 МБ рядом с кодом; в этом заходе файл чуть не уехал в коммит и был
пойман только хуком check-added-large-files.

Refs #2464, #2871
2026-08-13 22:28:15 +05:00

98 lines
9.3 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Объявленные пропуски сьюта backend/.
#
# Пропуск, которого здесь нет, роняет прогон (хук в tests/conftest.py). Смысл: не
# запретить пропуски, а запретить НЕЗАМЕТНЫЕ. Проверка, которая тихо перестала
# исполняться, со временем расходится с кодом, и узнают об этом ровно тогда,
# когда на неё понадобилось опереться (#2722, #2729, #2740).
#
# Формат: один nodeid в строке, без «[параметров]»; `#` — комментарий.
# Прежде чем добавить строку, ответь: почему эту проверку нельзя выполнить ЗДЕСЬ
# и где она выполняется вместо этого. Нет ответа — это не пропуск, а дыра.
#
# Список — НАДмножество сред: на CI (ubuntu + libpango + postgres-сервис) часть
# записей не срабатывает, на ноутбуке без них — срабатывает. Запись, чей пропуск
# не случился, безвредна; пропуск без записи — нет.
# ── WeasyPrint: нужны native-либы (Pango/cairo/GObject) ───────────────────────
# В CI ЭТИ ТЕСТЫ ИДУТ: ci.yml ставит libcairo2/libpango-1.0-0/libpangoft2-1.0-0.
# Записи нужны только для macOS-dev, где libgobject-2.0-0 нет.
tests/api/v1/test_parcels_forecast.py::test_export_forecast_pdf_returns_pdf
tests/services/exporters/test_report_pdf.py::TestConfidenceSectionParity::test_dict_shaped_factor_produces_valid_pdf
tests/services/exporters/test_report_pdf.py::TestFullReportExport::test_accepts_as_dict_input
tests/services/exporters/test_report_pdf.py::TestFullReportExport::test_returns_non_trivial_length
tests/services/exporters/test_report_pdf.py::TestFullReportExport::test_returns_pdf_magic_bytes
tests/services/exporters/test_report_pdf.py::TestGracefulPartialReport::test_empty_report_still_valid_pdf
tests/services/exporters/test_report_pdf.py::TestGracefulPartialReport::test_garbage_input_does_not_crash
tests/services/exporters/test_report_pdf.py::TestGracefulPartialReport::test_partial_report_some_sections
tests/services/generative/test_exporters.py::test_pdf_export_produces_pdf_bytes
tests/test_layout_tz_pdf.py
# ── phantom-column gate: нужна КОПИЯ ПРОДОВОЙ схемы ───────────────────────────
# Смысл этих тестов — поймать колонку, которой нет в реальной БД, поэтому пустой
# сервис-контейнер их не заменяет: против пустой схемы они дали бы красноту, не
# относящуюся к делу. Условие: TEST_DATABASE_URL на SSH-туннель к проду
# (`ssh -N gendesign` → localhost:15432), см. tests/integration/conftest.py.
# ЗАПУСКАТЬ ВРУЧНУЮ после правок SQL-запросов в app/services/**.
tests/integration/test_analyze_parcels_sql.py::TestIrdOverlapSql::test_explain_ird_overlap
tests/integration/test_analyze_parcels_sql.py::TestVelocityCompetitorsSql::test_explain_competitors
tests/integration/test_analyze_parcels_sql.py::TestNeighborsSummarySql::test_explain_neighbors_summary
tests/integration/test_phantom_columns.py::TestCadGeoTables::test_parcel_centroid_query
tests/integration/test_phantom_columns.py::TestDomrfKnFlats::test_avg_price_query
tests/integration/test_phantom_columns.py::TestDomrfKnFlats::test_supply_batch_query
tests/integration/test_phantom_columns.py::TestDomrfKnObjects::test_competitors_full_cte_query
tests/integration/test_phantom_columns.py::TestDomrfKnObjects::test_competitors_radius_query
tests/integration/test_phantom_columns.py::TestDomrfKnObjects::test_velocity_competitor_query_columns
tests/integration/test_phantom_columns.py::TestEkburgConstructionPermits::test_permits_rns_columns
tests/integration/test_phantom_columns.py::TestEkburgConstructionPermits::test_permits_rve_columns
tests/integration/test_phantom_columns.py::TestEkburgConstructionPermits::test_recent_permits_query
tests/integration/test_phantom_columns.py::TestMvLayoutVelocity::test_velocity_by_room_bucket
tests/integration/test_phantom_columns.py::TestObjectiveTables::test_objective_corpus_room_month_columns
tests/integration/test_phantom_columns.py::TestObjectiveTables::test_objective_mapping_columns
tests/integration/test_phantom_columns.py::TestObjectiveTables::test_sold_count_query
# ── SQL-логика на живой Postgres ──────────────────────────────────────────────
# В CI ЭТИ ТЕСТЫ ИДУТ с #2745 (postgres-сервис в ci.yml); до него не бежали ни
# разу с момента написания. Схема не нужна — строят себе временные таблицы.
# Локально: docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=... postgres:16
tests/sql/test_ddu_price_indicator.py::test_basis_and_previous_index
tests/sql/test_ddu_price_indicator.py::test_packaged_deal_bucketed_by_per_unit_area
tests/sql/test_ddu_price_indicator.py::test_prev_period_value_skips_filtered_quarter
tests/sql/test_mv_layout_velocity_weighted_avg.py::TestWeightedAvgFormula::test_hand_computed_weighted_average
tests/sql/test_mv_layout_velocity_weighted_avg.py::TestWeightedAvgFormula::test_no_zero_months_weighted_equals_naive
tests/sql/test_mv_layout_velocity_weighted_avg.py::TestWeightedAvgFormula::test_nullif_prevents_division_by_zero
tests/sql/test_mv_layout_velocity_weighted_avg.py::TestWeightedAvgFormula::test_weighted_differs_from_naive_sparse_project
tests/sql/test_mv_layout_velocity_weighted_avg.py::TestWeightedAvgFormula::test_zero_deal_months_skew_naive_avg
tests/sql/test_velocity_alerts.py::test_lookback_anchors_to_latest_data_month
tests/sql/test_velocity_alerts.py::test_sharp_drop_is_flagged
# ── Живая сеть NSPD (nspd.gov.ru) ─────────────────────────────────────────────
# Ходят в внешний сервис: в гейте это флейк и зависимость от чужого аптайма.
# Запуск вручную: uv run pytest tests/scrapers/ -m slow / -m integration -s
tests/scrapers/test_nspd_bulk_client.py::test_list_objects_in_building_real
tests/scrapers/test_nspd_bulk_client.py::test_search_by_quarter_empty
tests/scrapers/test_nspd_bulk_client.py::test_search_by_quarter_real_ekb
tests/scrapers/test_nspd_bulk_client.py::test_wms_feature_info_real
tests/scrapers/test_nspd_grid_walk.py::test_live_nspd_grid_walk_skipped
# ── Образец, которого нет в git ───────────────────────────────────────────────
# ДОЛГ, а не норма. Было 8 записей; 2 из них (test_ekb_krt_registry.py::
# TestMultiSiteCountFromDump) сняты в #2778: дампа `krt_page_raw.html` не
# оказалось НИГДЕ — ни в репозитории, ни на дисках, ни на проде (в БД лежит
# `raw_block` = уже очищенный текст, вход парсера из него не восстановить), —
# зато свойство, которое они проверяли (несколько блоков на странице, уникальные
# site_name), выразимо без дампа и теперь проверяется на многоблочной странице,
# собранной из блоков, уже лежащих в том же тест-файле.
#
# Оставшиеся 6 так не лечатся: они проверяют извлечение таблиц из НАСТОЯЩЕГО PDF
# через pdfplumber, соседний класс TestParsePptTep уже мокает pdfplumber целиком.
# Нужен файл `ppt2018_22823_poyasnit_PPT.pdf` (или рабочий URL на ГИСОГД ЕКБ) —
# запрошен у Anton в #2778, там же список того, что оживёт. Причин не коммитить
# нет: официальный градостроительный документ, без персональных данных.
# После получения — положить в tests/fixtures/, поправить `_REAL_PDF_PATH`,
# убрать эти шесть строк.
tests/services/scrapers/test_ekb_ppt_tep_parser.py::TestParsePptTepRealPdf::test_phasing_has_area
tests/services/scrapers/test_ekb_ppt_tep_parser.py::TestParsePptTepRealPdf::test_phasing_has_rows
tests/services/scrapers/test_ekb_ppt_tep_parser.py::TestParsePptTepRealPdf::test_raw_tables_not_empty
tests/services/scrapers/test_ekb_ppt_tep_parser.py::TestParsePptTepRealPdf::test_tep_has_rows
tests/services/scrapers/test_ekb_ppt_tep_parser.py::TestParsePptTepRealPdf::test_zone_balance_has_itogo
tests/services/scrapers/test_ekb_ppt_tep_parser.py::TestParsePptTepRealPdf::test_zone_balance_has_rows