#!/bin/sh # E2E: геокодирование на живом ВЕКТОРЕ set -e TOKEN=$(curl -s -m 8 -X POST localhost:8000/api/v1/auth/login \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data 'username=admin&password=pass123' \ | python3 -c 'import sys,json; print(json.load(sys.stdin)["access_token"])') echo "=== geocode «Минск, Ленина 10»:" curl -s -m 15 "localhost:8000/api/v1/geocode?q=%D0%9C%D0%B8%D0%BD%D1%81%D0%BA%2C%20%D0%9B%D0%B5%D0%BD%D0%B8%D0%BD%D0%B0%2010&limit=2" \ -H "Authorization: Bearer $TOKEN" | python3 -m json.tool | head -16 echo "=== без токена — должен быть 401/403:" curl -s -o /dev/null -w "%{http_code}\n" -m 15 "localhost:8000/api/v1/geocode?q=test" echo "=== потерянное время: карточка c lost_time сохраняет loss_time:" curl -s -m 15 -X POST localhost:8000/api/v1/cases \ -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \ -d '{"age_years": 8, "gender": "м", "lost_time": "2026-09-09T12:00:00", "last_known_place": "Минск, Ленина 10", "elapsed_hours": 3.5, "tnp_lat": 53.9, "tnp_lon": 27.56}' > /tmp/case-created.json python3 - <<'PY' import json d = json.load(open('/tmp/case-created.json')) cid = d.get('id') print('case created:', cid) assert cid open('/tmp/case-id.txt', 'w').write(cid) PY CID=$(cat /tmp/case-id.txt) curl -s -m 15 "localhost:8000/api/v1/cases/$CID" -H "Authorization: Bearer $TOKEN" | python3 -c ' import json, sys d = json.load(sys.stdin) lt = d.get("loss_time") or (d.get("result") or {}).get("loss_time") detail = d if "loss_time" in d else d print("loss_time сохранён:", lt) assert lt, "loss_time ПУСТОЙ — алиас не сработал!" print("LOST_TIME BUGFIX OK")'