# OTUS Homework 7: Mobile Testing

Проект содержит мобильные UI-тесты для приложения Wishlist на базе `selenide-appium`.

Реализованы сценарии:
- создание и редактирование списка желаний;
- создание и редактирование подарка;
- изменение статуса резервирования подарка другого пользователя.

## Архитектура
- `Guice` для DI.
- `JUnit 5 Extension` вместо базового тестового класса.
- `AbsPageObject` -> `AbsBasePage` / `BaseMobileComponent`.
- `BlockingQueue` для распределения тестов по эмуляторам.
- код инфраструктуры и page object находится в `src/main/java`;
- в `src/test/java` находятся только тестовые классы.

## Инфраструктура
`docker-compose.yml` поднимает:
- `wiremock` для раздачи `wishlist.apk`;
- `android-emulator-1` (Android 13, Appium `:4723`, VNC `:6080`);
- `android-emulator-2` (Android 12, Appium `:4725`, VNC `:6081`).

Приложение не маунтится в эмулятор и не ставится через ADB.
APK скачивается Appium по capability `app`.
Источник APK для Wiremock: файл `wishlist-349317-5fd795.apk` в корне проекта.
Эмулятор запускается без `privileged`, доступ к аппаратной виртуализации передается через `/dev/kvm`.

## Тестовые аккаунты
Тесты используют заранее созданные аккаунты:
- `user1us / user1us`
- `user2us / user2us`
- `user3us / user3us`
- `user4us / user4us`

`user4us` используется как владелец подарка в тесте резервирования.

## Подготовка
Нужно задать доступ к БД, иначе `mvn test` завершится ошибкой:

```powershell
$env:DB_URL="jdbc:postgresql://sql.otus.kartushin.su:5432/wishlist"
$env:DB_USER="student"
$env:DB_PASSWORD="student"
```

## Запуск
1. Поднять окружение:

```bash
docker compose up -d
```

2. Дождаться статуса `healthy` у `wiremock`, `android-emulator-1`, `android-emulator-2`:

```bash
docker compose ps
```

Тесты не ждут загрузку эмулятора сами. Готовность окружения проверяется на уровне Docker Compose.

3. Запустить тесты:

```bash
mvn test
```

По умолчанию тесты запускаются параллельно на уровне классов (2 потока), а сессии распределяются по эмуляторам через `BlockingQueue`.

Опционально можно явно задать пул эмуляторов:

```powershell
$env:MOBILE_EMULATORS="android-emulator-1|http://localhost:4723|Android Emulator,android-emulator-2|http://localhost:4725|Android Emulator"
```

## Логи
После выполнения тестов logcat сохраняется в файл `logcat.txt` в корне проекта через Selenium/Appium logs API.
