# Проверка локального контура

Эта страница описывает, как быстро убедиться, что локальные `backend`, `cabinet`, БД и тестовые данные работают корректно.

## Подготовка

Запустите локальный контур и соберите ассеты cabinet:

```bash
make local-up
make local-assets
```

Если нужно заново пересоздать тестовые данные:

```bash
make local-seed
```

## Автоматическая smoke-проверка

Основная команда проверки:

```bash
make local-smoke
```

Она проверяет:

- Swagger backend: `http://localhost:8081/docs`;
- Swagger cabinet: `http://localhost:8082/api/swagger`;
- backend авторизацию через JWT;
- backend справочники филиалов, отделений, врачей и прайса;
- cabinet страницу логина;
- cabinet авторизацию тестовым пользователем;
- cabinet главную страницу после логина;
- cabinet API баннера, прайса и врачей.

Успешный результат выглядит так:

```text
== Backend ==
OK   backend swagger UI (200)
OK   backend swagger JSON (200)
OK   backend login
OK   backend filial list
OK   backend department list
OK   backend specialist list
OK   backend price list

== Cabinet ==
OK   cabinet login page (200)
OK   cabinet swagger UI (200)
OK   cabinet swagger JSON (200)
OK   cabinet login response
OK   cabinet authenticated home (200)
OK   cabinet banner API
OK   cabinet price departments API
OK   cabinet doctors API

Local smoke test passed.
```

## Тестовые пользователи

Backend API:

- login: `local.backend@example.test`
- password: `local-password`
- uid: `100001`
- region: `91`
- роли: `ROLE_USER`, `ROLE_ADMIN`

Cabinet:

- login: `local.cabinet@example.test`
- password: `local-password`
- uid: `200001`
- роли: `ROLE_USER`, `ROLE_ADMIN`

## Ручная проверка в браузере

1. Откройте `http://localhost:8081/docs`.
   Должна открыться Swagger UI backend.

2. Откройте `http://localhost:8082/api/swagger`.
   Должна открыться Swagger UI cabinet.

3. Откройте `http://localhost:8082/login`.
   Должна открыться страница входа без ошибки `500`.

4. Войдите в cabinet:
   - email: `local.cabinet@example.test`;
   - password: `local-password`.

5. После входа должна открыться главная cabinet: `http://localhost:8082/`.

6. Откройте публичные API cabinet:
   - `http://localhost:8082/api/banner/91`;
   - `http://localhost:8082/api/pricelist/departments`;
   - `http://localhost:8082/api/doctors/91`.

## Ручная проверка backend API

Получить JWT:

```bash
TOKEN=$(curl -sS \
  -X POST http://localhost:8081/user/login \
  -H 'Content-Type: application/json' \
  --data '{"username":"local.backend@example.test","password":"local-password"}' \
  | python3 -c 'import sys,json; print(json.load(sys.stdin)["token"])')
```

Проверить текущего пользователя:

```bash
curl -sS http://localhost:8081/user/ \
  -H "Authorization: Bearer $TOKEN" \
  | python3 -m json.tool
```

Ожидаемый смысл ответа: `successful: true`, `uid: 100001`, `regionId: 91`.

Проверить филиалы:

```bash
curl -sS 'http://localhost:8081/filial/list?regionId=91' \
  | python3 -m json.tool
```

В ответе должен быть филиал `Сова Local`.

Проверить отделения:

```bash
curl -sS http://localhost:8081/department/list \
  | python3 -m json.tool
```

В ответе должно быть отделение `Терапия`.

Проверить врачей:

```bash
curl -sS 'http://localhost:8081/specialist/list?regionId=91' \
  | python3 -m json.tool
```

В ответе должен быть врач `Иванов Иван Иванович` с alias `ivanov-ivan`.

Проверить прайс:

```bash
curl -sS http://localhost:8081/pricelist/list \
  | python3 -m json.tool
```

В ответе должна быть услуга `Прием терапевта` с локальной ценой.

## Ручная проверка cabinet API

Проверить баннер региона:

```bash
curl -sS http://localhost:8082/api/banner/91 \
  | python3 -m json.tool
```

Ожидается JSON с `active: true`.

Проверить группы прайса:

```bash
curl -sS http://localhost:8082/api/pricelist/departments \
  | python3 -m json.tool
```

В ответе должна быть группа `Консультации`.

Проверить список врачей:

```bash
curl -sS http://localhost:8082/api/doctors/91 \
  | python3 -m json.tool
```

В ответе должен быть врач `Иванов Иван Иванович`, отзывы и прайс.

## Что делать при ошибках

Если `cabinet /login` отдает `500` с ошибкой про `public/build/entrypoints.json`, соберите ассеты:

```bash
make local-assets
```

Если API отдает пустые данные или ошибки типов, пересоздайте seed:

```bash
make local-seed
make local-smoke
```

Если контейнеры были пересозданы с нуля:

```bash
make local-up
make local-assets
make local-smoke
```
