test(vsp): красные тесты возврата ВСП в действующие (AURORA-1886, #329)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-11-12 11:23:21 +04:00
parent 744b71fbe7
commit 72b57a0c53
2 changed files with 93 additions and 2 deletions

View File

@ -353,3 +353,82 @@ def test_vsp_update_past_close_date_deactivates(client, admin_tokens, auth_heade
listing = client.get("/api/v1/dict/info", headers=auth_headers(admin_tokens))
assert listing.status_code == 200
assert vsp_id not in [item["id"] for item in listing.json()["result"]]
def _put_vsp(client, admin_tokens, auth_headers, vsp_id, **body):
response = client.put(
f"/api/v1/dict/info/{vsp_id}", json=body, headers=auth_headers(admin_tokens),
)
assert response.status_code == 200, response.text
return response.json()["result"]
def _closed_vsp(client, admin_tokens, auth_headers) -> int:
from datetime import date, timedelta
vsp_id = _create_vsp(client, admin_tokens, auth_headers, open_date="2020-01-01")
result = _put_vsp(
client, admin_tokens, auth_headers, vsp_id,
close_date=(date.today() - timedelta(days=1)).isoformat(),
)
assert result["is_active"] is False
return vsp_id
def test_vsp_update_clear_close_date_reopens(client, admin_tokens, auth_headers):
vsp_id = _closed_vsp(client, admin_tokens, auth_headers)
result = _put_vsp(client, admin_tokens, auth_headers, vsp_id, close_date=None)
assert result["close_date"] is None
assert result["is_active"] is True
listing = client.get("/api/v1/dict/info", headers=auth_headers(admin_tokens))
assert vsp_id in [item["id"] for item in listing.json()["result"]]
def test_vsp_update_future_close_date_reopens(client, admin_tokens, auth_headers):
from datetime import date, timedelta
vsp_id = _closed_vsp(client, admin_tokens, auth_headers)
future = (date.today() + timedelta(days=30)).isoformat()
result = _put_vsp(client, admin_tokens, auth_headers, vsp_id, close_date=future)
assert result["close_date"] == future
assert result["is_active"] is True
def test_vsp_update_without_close_date_keeps_it(client, admin_tokens, auth_headers):
from datetime import date, timedelta
vsp_id = _closed_vsp(client, admin_tokens, auth_headers)
yesterday = (date.today() - timedelta(days=1)).isoformat()
result = _put_vsp(client, admin_tokens, auth_headers, vsp_id, address="AURORA-1886 new")
assert result["close_date"] == yesterday
assert result["is_active"] is False
def test_vsp_clear_close_date_is_audited(client, admin_tokens, auth_headers, db_session):
from sqlalchemy import text
vsp_id = _closed_vsp(client, admin_tokens, auth_headers)
_put_vsp(client, admin_tokens, auth_headers, vsp_id, close_date=None)
async def _last_changes():
row = (
await db_session.execute(
text(
"SELECT event_data->'changes' FROM v3.audit_log "
"WHERE event = 'VSP_UPDATE' AND (event_data->>'vsp_id')::int = :id "
"ORDER BY id DESC LIMIT 1"
),
{"id": vsp_id},
)
).first()
return row[0]
changes = client.portal.call(_last_changes)
assert changes["closed_at"]["before"] is not None
assert changes["closed_at"]["after"] is None

View File

@ -34,7 +34,7 @@ async def test_update_past_close_date_sets_inactive():
assert data["is_active"] is False
async def test_update_future_close_date_keeps_active_key_absent():
async def test_update_future_close_date_sets_active():
vsp = MagicMock(closed_at=None)
service = _service(vsp)
payload = VSPUpdate(close_date=date.today() + timedelta(days=30))
@ -42,4 +42,16 @@ async def test_update_future_close_date_keeps_active_key_absent():
await service.update(vsp_id=1, payload=payload, user=_admin())
data = service.vsp_repo.update.await_args.kwargs["data"]
assert "is_active" not in data
assert data["is_active"] is True
async def test_update_null_close_date_sets_active():
vsp = MagicMock(closed_at=date.today() - timedelta(days=1))
service = _service(vsp)
payload = VSPUpdate(close_date=None)
await service.update(vsp_id=1, payload=payload, user=_admin())
data = service.vsp_repo.update.await_args.kwargs["data"]
assert data["closed_at"] is None
assert data["is_active"] is True