Files
autotest/HISTORY/2026-07-24-session-2.md
T

47 lines
3.7 KiB
Markdown
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.
# 2026-07-24 — Отладка API-тестов dummy
## Общая логика (как проверено)
Поток: пользователь выбирает сервис → видит операции → выбирает операцию → задаёт параметры → жмёт «Тест» → сервер выполняет → результат.
### Цепочка вызовов (полная трассировка)
1. **GET /api/services** → список сервисов (только dummy пока)
2. **GET /api/operations/1** → операции dummy + инстансы пользователя
- Нет инстансов → только `create` активна
3. **GET /api/params/18** → параметры create (12 шт, 4 обязательных)
4. **POST /api/test** `{serviceId:1, operation:"create", ...}`
5. **POST /instances** `{serviceId:1, displayName:"autotest-1"}` → 201 + Location header
6. **GET /instances** (поллинг) → ждём `operationIsInProgress=false`, статус не "creating"
7. Возврат результата → фронт обновляет UI
## Баги (найдены и исправлены)
### Баг 1: `HttpClient.post` не существовал (v1.0.7)
- **Симптом:** `'HttpClient' object has no attribute 'post'`
- **Причина:** в `http_client.py` был только метод `get()`. Новый `api_test.py` использовал `client.post()`.
- **Исправление:** добавлен метод `post()` в `HttpClient`.
### Баг 2: `r.json()` падал на пустом ответе (v1.0.8)
- **Симптом:** `'str' object has no attribute 'get'`
- **Причина:** POST /instances возвращает 201 с пустым телом. `r.json()` на пустой строке падает, а не возвращает dict.
- **Исправление:** `try: r.json() except: return {}`. Плюс Location header сохраняется в `result["_location"]`.
### Баг 3: instanceUid не извлекался (v1.0.9)
- **Симптом:** `_find_uid(resp)` не находил UUID
- **Причина:** POST /instances возвращает instanceUid в заголовке `Location`, не в теле. `_find_uid` искал UUID в значениях dict, но там была только строка пути.
- **Исправление:** парсинг Location: `loc.rstrip("/").split("/")[-1]` → UUID.
### Баг 4: cfsParams отправлялись в POST /instances (v1.0.10)
- **Симптом:** параметры не применялись, возможна ошибка API
- **Причина:** cfsParams — отдельный шаг после создания инстанса (POST /instanceOperations). Нельзя передавать их в POST /instances.
- **Исправление:** create шлёт только `{serviceId, displayName}`. Параметры пока не устанавливаются (будут позже через modify).
## Что ещё поверено
- `get_instances()``client.get("/instances", params={"pageSize":200})``requests.Session.get()` принимает `params` + `timeout` одновременно — корректно.
- Поллинг: цикл `while time.time() < deadline` с `time.sleep(5)` — корректно.
- После успешного create: `selectService(svcId)` перезагружает инстансы → create становится серым, другие операции активируются.
- `reconcile` исключён из списка операций (не тестируемая операция).
- Все сервисы кроме dummy скрыты.