ai-forever / ai-forever/gigachat

Примеры юнит-тестов в CONTRIBUTING.md не работают при копировании

未关闭
#127 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Python
星标
168
派生
45
平均合并
1 分钟
30 天内合并 PR
1

描述

Примеры юнит-тестов из раздела Writing Unit Tests в CONTRIBUTING.md не
работают, если скопировать их как есть. Оба падают. Кроме того, раздел
Test Fixtures перечисляет фикстуры, которых в проекте нет.

Причина, судя по истории: CONTRIBUTING.md последний раз обновлялся в
b651704 (2025-12-26), а контракт клиента поменялся в 9281b1a (#119,
2026-07-24) — сменился хост по умолчанию и модель стала обязательной.
Примеры остались прежними.

### Воспроизведение

Проверено на 0b694b3, рабочее дерево чистое. Оба примера скопированы в
отдельные файлы вне репозитория, рядом положен pytest.ini с
asyncio_mode = auto.

```bash
uv run pytest /tmp/doccheck/test_doc_sync.py /tmp/doccheck/test_doc_async.py -q
```

```
E httpx.TimeoutException: No response can be found for POST request on
https://ngw.devices.sberbank.ru:9443/api/v2/oauth amongst:
E Match POST requests on https://gigachat.devices.sberbank.ru/api/v1/chat/completions
2 failed, 2 errors in 0.33s
```

### Что именно ломается

Дефекты проявляются по очереди, каждый следующий виден только после того,
как убран предыдущий:

1. Не замокан эндпоинт OAuth. С `credentials=` клиент сначала идёт за
токеном, поэтому оба примера падают ещё до обращения к чату.
2. Хост в моке устарел: примеры мокают gigachat.devices.sberbank.ru, а в
src/gigachat/settings.py сейчас `BASE_URL = "https://api.giga.chat/v1"`.
3. Не задан model — клиент кидает ModelNotSpecifiedError, модели по
умолчанию нет.
4. В теле ответа не хватает обязательных полей. ChatCompletion в
src/gigachat/models/chat.py требует created и object (алиас для
object_); в асинхронном примере нет ещё и index, finish_reason, model,
usage.

Отдельно: в разделе Test Fixtures написано, что в tests/unit/conftest.py
доступны base_url, auth_url и credentials. В этом файле определена только
автоиспользуемая фикстура _delenv, а поиск по дереву тестов ничего не
находит:

```bash
grep -rn "def base_url\|def auth_url\|def credentials" tests/ --include=*.py
```

Общие значения лежат в tests/constants.py.

### Ожидаемое поведение

Примеры из гайда для контрибьюторов проходят, если скопировать их как
написано, а перечисленные фикстуры существуют.

### Границы

Только документация, поведение библиотеки и набор тестов не затрагиваются.
Не проверялись и в этот отчёт не входят: остальная часть CONTRIBUTING.md,
пример интеграционного теста и примеры из README.md — при необходимости
можно завести отдельно.

### Окружение

gigachat 0.2.3 (0b694b3), Python 3.12.14, Linux (Ubuntu 22.04, WSL2).
Установка через `uv sync --all-extras --dev`, pytest 7.4.4,
pytest-httpx 0.26.0.

Существующие issues и PR проверены, дубликатов не нашёл. Патч готов,
пришлю PR со ссылкой на эту issue.

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。