test(formulas): GET formulas без доступа, спека приведена к коду (AURORA-1896, M-5)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-11-11 21:06:53 +04:00
parent e107fa418d
commit 54e60dcf8e
2 changed files with 16 additions and 1 deletions

View File

@ -206,6 +206,12 @@ def test_get_formulas_unknown_form_404(client, headers):
assert r.status_code == 404 assert r.status_code == 404
def test_get_formulas_no_form_access_404(client, isp_tokens, auth_headers):
# isp1 в оргединице формы 1 не состоит: форма для него «не найдена» (спека: как у GET листа).
r = client.get(f"{FORM}/sheet/AHR/formulas", headers=auth_headers(isp_tokens))
assert r.status_code == 404, r.text
# ---- Отчёты проектов (FORM_3) ---- # ---- Отчёты проектов (FORM_3) ----
import uuid import uuid
@ -459,3 +465,12 @@ def test_rf_project_report_line_trigger_direct_delete(client, headers):
left = {f["line_id"] for f in _project_formulas(client, headers, pid, year)} left = {f["line_id"] for f in _project_formulas(client, headers, pid, year)}
assert l1 not in left assert l1 not in left
assert l2 in left assert l2 in left
def test_project_formulas_report_no_access_400(client, headers, isp_tokens, auth_headers):
# Проект админа в филиале 1; isp1 доступа к нему не имеет: та же ошибка, что у PATCH отчёта.
year = datetime.now().year
pid = _create_project(client, headers, year)
r = client.get(f"{_report_url(pid, year)}/formulas", headers=auth_headers(isp_tokens))
assert r.status_code == 400, r.text
assert r.json().get("message") == "Отчёт не найден"

View File

@ -40,7 +40,7 @@
- **THEN** сохраняется выражение `100+50` - **THEN** сохраняется выражение `100+50`
### Requirement: Чтение формул листа ### Requirement: Чтение формул листа
Сервер SHALL отдавать все формулы листа: `GET /api/v1/form/{form_id}/sheet/{sheet}/formulas` и `GET /api/v1/projects/{project_id}/report/{year}/{report_type}/formulas`. Каждая запись SHALL содержать `line_id`, `column`, `expression`, `value`, `updated_by` (`id`, `full_name`) и `updated_at`. Доступ SHALL проверяться так же, как у GET листа (форма) или отчёта (проект): нет доступа к форме или проекту — 404. Сервер SHALL отдавать все формулы листа: `GET /api/v1/form/{form_id}/sheet/{sheet}/formulas` и `GET /api/v1/projects/{project_id}/report/{year}/{report_type}/formulas`. Каждая запись SHALL содержать `line_id`, `column`, `expression`, `value`, `updated_by` (`id`, `full_name`) и `updated_at`. Доступ SHALL проверяться так же, как у GET листа (форма) или отчёта (проект): нет доступа к форме или формы нет — 404 «Форма не найдена»; отчёт проекта не найден или нет доступа — та же ошибка, что у PATCH этого отчёта (400 «Отчёт не найден»).
#### Scenario: Формулы видны другому пользователю #### Scenario: Формулы видны другому пользователю
- **WHEN** пользователь А сохранил формулу, а пользователь Б с доступом к форме запрашивает формулы листа - **WHEN** пользователь А сохранил формулу, а пользователь Б с доступом к форме запрашивает формулы листа