gendesign/backend/tests/services
bot-backend c3c8674b3c
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 9s
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 2m4s
CI / backend-tests (pull_request) Successful in 17m21s
docs(ptica): две докстроки обещали то, чего в коде нет (#2464)
1. `QuarterDump` (nspd_client): «Default = только core, чтобы не сжигать
   rate-limit на 17 запросов». Фактический дефолт `search_by_quarter` —
   `include_zouit=True`, то есть 5 ЗОУИТ-слоёв входят в дефолтный вызов.
   Числа 17 тоже нет: territorial_zones/red_lines/engineering и все ЗОУИТ
   идут через grid-walk при grid_n=7, по 49 запросов КАЖДЫЙ — дефолтный
   дамп это сотни запросов. Экономит rate-limit только include_risks=False.
   Докстрока самого метода 640 строками ниже говорит верно («Default
   True») — правильный образец лежал рядом с дефектом.

2. `find_active_on_demand_job` (cadastre_fetch): «Если в БД есть FAILED
   on-demand за последние 60 секунд — тоже None». В SQL нет ни слова
   'failed', ни какого-либо временного фильтра. Обещание вдвойне вредно:
   подразумевало, что неуспешная джоба СТАРШЕ минуты вернётся как
   активная (не вернётся), и отправляло отлаживающего искать окно,
   которого нет.

Гейты сверяют утверждение докстроки с кодом, а не читаемость текста:
обещание «только core» требует `include_zouit=False` в сигнатуре;
обещание минутного окна требует временного фильтра в теле.

Двусторонне: против origin/main три гейта красные с конкретными
сообщениями. Контроли зелёные с обеих сторон — характеризующий фиксирует
фактические три статуса в SQL, а test_docstrings_state_the_actual_behaviour
ловит «починку» через вычёркивание неудобной фразы.

Два подводных камня, на которые наступил и оставил защиту:
- гейт ищет обещание по тексту, поэтому старые формулировки в докстроках
  ПЕРЕСКАЗАНЫ, а не процитированы — иначе он не отличает цитату от
  утверждения (оговорено прямо в тексте докстроки);
- тело функции нельзя брать как последний кусок разбиения по тройным
  кавычкам: SQL сам в них обёрнут, и проверка шла бы по огрызку после
  запроса. Из-за этого один гейт проходил по случайности. Вынесен
  хелпер `_body`.

pytest backend/tests/services/ — 3199 passed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 23:43:40 +05:00
..
analysis_runs feat(parcels): typed AnalyzeResponse + run-history read endpoints (#961) 2026-06-06 18:13:34 +00:00
cadastre fix(ptica): WAF-блок прерывает backfill_parcel_geom, а не гонит его дальше по кварталам (#2464) (#2969) 2026-08-20 10:34:26 +00:00
chat feat(chat): tool get_parcel_info — курируемый градрегламент/ЗОУИТ/ЕГРН в контекст чата (#2366) 2026-07-04 01:24:42 +00:00
exporters fix(ptica): число ЗОУИТ перестаёт подписываться как число типов (#2464) (#2961) 2026-08-20 09:17:06 +00:00
forecasting docs(ptica): фактор уверенности называл не ту величину (#2464-H) (#2878) 2026-08-13 21:21:38 +00:00
generative fix(generative): устаревший VAT/office caveat в concept PDF (#2445-C1) (#2455) 2026-07-05 19:40:30 +00:00
llm feat(chat): tool get_parcel_info — курируемый градрегламент/ЗОУИТ/ЕГРН в контекст чата (#2366) 2026-07-04 01:24:42 +00:00
scrapers fix(ptica): download_binary переживает транзиентный ответ, как и get_json (#2464) 2026-08-20 18:24:43 +00:00
site_finder fix(ptica): невозможные параметры регламента не превращаются в деньги (#2464) 2026-08-20 23:14:38 +05:00
__init__.py feat(cadastre): bulk_harvest worker + grid-walker + admin API (#168 PR3/5) (#171) 2026-05-15 13:31:32 +03:00
test_2464_docs_match_code.py docs(ptica): шесть мест, где документация расходилась с кодом (#2464) (#2968) 2026-08-20 10:25:22 +00:00
test_2464_docstring_matches_code.py docs(ptica): две докстроки обещали то, чего в коде нет (#2464) 2026-08-20 23:43:40 +05:00
test_2464_kn_lock_key.py fix(ptica): ключ синглтон-лока kn-свипа зависит от множества, а не от порядка (#2464) (#2970) 2026-08-20 10:34:30 +00:00
test_2464a_job_settings_savepoint.py fix(ptica): job_settings не отравляет чужую сессию при сбое БД (#2464 кластер A) (#2937) 2026-08-19 15:42:39 +00:00
test_2464h_timing_overlap_formula.py docs(ptica): три комментария, утверждавших не то, что делает код (#2464 кластер H) (#2943) 2026-08-19 17:09:24 +00:00
test_analytics_queries_domrf_dedup.py fix(analytics): de-inflate domrf_kn snapshot counts (8.49×) + backfill UPSERT columns (#2464) (#2470) 2026-07-08 07:30:12 +00:00
test_cadastre_bulk.py fix(ptica): бан НСПД по WAF больше не глотается сборщиком кварталов (#2464-A) (#2881) 2026-08-14 06:00:10 +00:00
test_dadata_client.py fix(ptica): дрейф формы ответа DaData не роняет весь гео-проход (#2464) (#2942) 2026-08-19 16:59:49 +00:00
test_ekburg_permits.py feat(sf): geocode geom для ekburg_construction_permits из МСК-66 (#1124) 2026-06-07 11:16:45 +00:00
test_forecast_request_cache.py perf(forecast): per-request memoization cache for §22 cold build (#1129) 2026-06-08 05:26:27 +00:00
test_functional_zone_lookup.py fix(ptica): шесть lookup'ов /analyze глотали ошибку БД без SAVEPOINT (#2464) (#2951) 2026-08-20 07:38:23 +00:00
test_granddoc_lookup.py fix(ptica): шесть lookup'ов /analyze глотали ошибку БД без SAVEPOINT (#2464) (#2951) 2026-08-20 07:38:23 +00:00
test_ird_analyze.py fix(site_finder): SAVEPOINT-isolate gate-lookup db.execute swallows (#2464 Wave 2) (#2468) 2026-07-08 06:46:03 +00:00
test_ird_overlay_lookup.py fix(ptica): шесть lookup'ов /analyze глотали ошибку БД без SAVEPOINT (#2464) (#2951) 2026-08-20 07:38:23 +00:00
test_job_settings.py fix(admin-jobs): UPSERT в PUT /admin/jobs/settings — не терять изменения (#1223) 2026-06-13 08:36:23 +00:00
test_krt_lookup.py fix(site_finder): SAVEPOINT-isolate gate-lookup db.execute swallows (#2464 Wave 2) (#2468) 2026-07-08 06:46:03 +00:00
test_mapping_review.py feat: ревью-инструмент авто-маппингов Объектив↔ДОМ.РФ (/admin/mapping-review) (#2278) 2026-07-03 07:59:13 +00:00
test_newbuilding_crossload.py fix(sf): psql stdin-bootstrap пароля gendesign_reader + COALESCE-protect внешних id (review fixup, #976) 2026-06-12 11:26:40 +03:00
test_nspd_denorm.py fix(week-review): backend-аудит v2 — 82 фиксов (#1660) 2026-06-17 17:13:38 +00:00
test_obj_class_backfill.py feat(etl): housing-class normalization fallback via yandex_realty trigram match (#38) (#1911) 2026-06-26 07:44:25 +00:00
test_objective_backfill.py fix(ptica): гео-проход не тратит геокод на занятых кандидатов и не «подтверждает» их (#2464) (#2929) 2026-08-19 11:52:07 +00:00
test_own_developer_ids_config.py feat(site-finder): own-portfolio data source for §25.3 cannibalization (#1169 PR1) 2026-06-08 16:21:53 +05:00
test_planning_lookup.py fix(ptica): шесть lookup'ов /analyze глотали ошибку БД без SAVEPOINT (#2464) (#2951) 2026-08-20 07:38:23 +00:00
test_ppt_tep_lookup.py fix(site_finder): SAVEPOINT-isolate gate-lookup db.execute swallows (#2464 Wave 2) (#2468) 2026-07-08 06:46:03 +00:00
test_quarter_dump_lookup.py fix(site-finder): true-counts вместо молча-усечённых len(list) в connection-points/utility (#2445-A1/A2) (#2450) 2026-07-05 18:54:49 +00:00
test_recommend_mix_velocity.py fix(analytics): recommend_mix success-boost regression from view 172 (#1955) 2026-06-27 15:49:40 +05:00
test_reservation_lookup.py fix(ptica): шесть lookup'ов /analyze глотали ошибку БД без SAVEPOINT (#2464) (#2951) 2026-08-20 07:38:23 +00:00
test_utility_characteristics.py feat(site-finder): теплотрассы из OSM в слой инженерной инфраструктуры (Фаза C1) (#2280) 2026-07-03 08:05:44 +00:00
test_weather_cache.py fix(ptica): «0 мм осадков» перестаёт означать «данных нет» (#2464) (#2947) 2026-08-20 07:00:01 +00:00
test_zone_regulation_backfill.py fix(site_finder): SAVEPOINT-isolate DB errors across cluster A (#2464) (#2465) 2026-07-07 12:50:11 +00:00
test_zone_regulation_extract.py feat(sf): zone_regulation_cache — ПЗЗ-регламент по zone_index + числовой экстракт (#1099) 2026-06-06 19:31:28 +00:00
test_zone_regulation_memo.py fix(site-finder): optimize zone-regulation resolve in /analyze (#1850) 2026-06-25 09:12:41 +00:00
test_zone_regulation_write_session.py fix(site-finder): isolate zone-regulation cache write off the request session (#1850 item 4) 2026-06-25 11:16:26 +00:00