# Реализуйте интеграционное тестирование работы анализатора (РЧ21).
Прежде чем проводить исследования на биоматериалах, нужно провести верификацию на наличие необходимых функций в коде.
Вам предстоит задача - разработать интеграционный тест для выполнения верификации программного обеспечения анализатора.
Для этого разработайте АПИ сервер анализатора, который содержит конечные точки (endpoints), и возвращает определенные ответы. Затем напишите интеграционный тест, который будет обращаться к этому АПИ, отправлять на него запросы и получать ответы, в зависимости от содержания запроса.
Логика работы анализатора:
- приём заказа
- обработка заказа (тут вы эмулируете какую-то задержку, ~~можете случайным образом,~~ можете в список услуг прописать)
- получение статуса: возвращаете прогресс, если заказ в работе. если заказ выполнен, то возвращаете результат и ОСВОБОЖДАЕТЕ анализатор
Есть два анализатора **Biorad** и **Ledetect** с пересекающимся набором услуг (т.е. есть услуги, которые можно выполнить на обоих анализаторах, но есть и такие, которые можно выполнить только на одном)
Коды и названия услуг и поддержка анализатором:
Код | Название | Доступные анализаторы
:--:|-----------|----------------------
619 | TSH | Ledetect, Biorad
311 | Амилаза | Ledetect
548 | Альбумин | Biorad
258 | Креатинин |Biorad, Ledetect
176 | Билирубин общий | Biorad
501 | Гепатит В | Ledetect
543 | Гепатит С | Ledetect, Biorad
229 | СПИД | Ledetect
415 | Кальций общий | Ledetect
323 | Глюкоза | Ledetect
855 | Ковид IgM | Biorad
346 | Общий белок | Ledetect
836 | Железо | Biorad
## Первая задача: разработать http-сервер для реализации АПИ анализатора
АПИ анализатора
1. Отправка заказа:
* метод: **POST**
* путь: `/api/analyzer/{{name}}`, где `{{name}}` - название анализатора
* тип данных: **JSON**
* Формат данных:
```json
{
"patient": 1, // id клиента
"services": [ // массив услуг
{ "serviceCode": 619 }, // код услуги
{ "serviceCode": 258 },
]
}
```
* возможные ответы:
Код ответа | Тело ответа (body) | Комментарий
:---------:|--------------------|------------
`200` | | заказ принят
`404` | $"Analyzer with name '{name}' not found" | Не найден анализатор с указанным именем
`400` | "Analyzer is busy" | Анализатор занят
`400` | "Analyzer can not do this order. May be order contains services which analyzer does not support." | На анализатор отправлена услуга, которую анализатор не может выполнить (услуги нет в списке поддерживаемых)
1. Проверка статуса заказа
* метод: **GET**
* путь: `/api/analyzer/{{name}}`
* возможные ответы (код и ответ в body):
Код ответа | Тело ответа (body) | Комментарий
:---------:|--------------------|------------
`200` | {"patient": 1,
"services": [
{ "сode": 619, "result": "" },
{ "code": 258, "result": "" }
]} | заказ готов
`200` | {"progress":50} | Заказ обрабатывается (прогресс в процентах)
`400` | "Analyzer is not working." | анализатор не выполняет никакой запрос
`404` | $"Analyzer with name '{name}' not found" | Не найден анализатор с указанным именем
## Вторая задача
Разработайте тестовые сценарии и unit-тесты для тестрования АПИ, реализованного в первой задаче