update configuration and documentation

This commit is contained in:
2026-04-14 11:40:14 +03:00
parent 6a19b574b8
commit 0cd4e29d02
4 changed files with 93 additions and 29 deletions
+11
View File
@@ -0,0 +1,11 @@
DB_URL=jdbc:postgresql://<host>:<port>/<db>
DB_USER=<db_user>
DB_PASSWORD=<db_password>
WISHLISTS_USERNAME=<login_1>
WISHLISTS_PASSWORD=<password_1>
GIFTS_USERNAME=<login_2>
GIFTS_PASSWORD=<password_2>
RESERVATION_USERNAME=<login_3>
RESERVATION_PASSWORD=<password_3>
RESERVATION_OWNER=<login_owner>
+1
View File
@@ -5,3 +5,4 @@ build/
.DS_Store
allure-results/
logcat.txt
.env
+61 -19
View File
@@ -19,14 +19,6 @@
- `src/test/java` — только тестовые классы.
- `wiremock` — маппинги и APK.
## Тестовые аккаунты
- `user1us / user1us`
- `user2us / user2us`
- `user3us / user3us`
- `user4us / user4us`
`user4us` используется как владелец подарка в тесте резервирования.
## Запуск
1. Поднять окружение:
```bash
@@ -38,23 +30,73 @@ docker compose up -d
docker compose ps
```
3. Указать доступ к БД:
3. Подготовить переменные окружения (использовать один из вариантов):
Вариант A: через `.env`
- скопировать `.env.example` в `.env`;
- заполнить `.env` актуальными значениями вашей среды;
- загрузить `.env` в текущую shell-сессию.
PowerShell:
```powershell
$env:DB_URL="jdbc:postgresql://sql.otus.kartushin.su:5432/wishlist"
$env:DB_USER="student"
$env:DB_PASSWORD="student"
```
bash:
```bash
export DB_URL="jdbc:postgresql://sql.otus.kartushin.su:5432/wishlist"
export DB_USER="student"
export DB_PASSWORD="student"
Get-Content .env | Where-Object { $_ -match '^[^#].+=.+' } | ForEach-Object {
$name, $value = $_ -split '=', 2
[System.Environment]::SetEnvironmentVariable($name, $value, 'Process')
}
```
bash:
```bash
set -a
source .env
set +a
```
Вариант B: напрямую в shell-сессии
PowerShell:
```powershell
$env:DB_URL="jdbc:postgresql://<host>:<port>/<db>"
$env:DB_USER="<db_user>"
$env:DB_PASSWORD="<db_password>"
$env:WISHLISTS_USERNAME="<login_1>"
$env:WISHLISTS_PASSWORD="<password_1>"
$env:GIFTS_USERNAME="<login_2>"
$env:GIFTS_PASSWORD="<password_2>"
$env:RESERVATION_USERNAME="<login_3>"
$env:RESERVATION_PASSWORD="<password_3>"
$env:RESERVATION_OWNER="<login_owner>"
```
bash:
```bash
export DB_URL="jdbc:postgresql://<host>:<port>/<db>"
export DB_USER="<db_user>"
export DB_PASSWORD="<db_password>"
export WISHLISTS_USERNAME="<login_1>"
export WISHLISTS_PASSWORD="<password_1>"
export GIFTS_USERNAME="<login_2>"
export GIFTS_PASSWORD="<password_2>"
export RESERVATION_USERNAME="<login_3>"
export RESERVATION_PASSWORD="<password_3>"
export RESERVATION_OWNER="<login_owner>"
```
Оба варианта эквивалентны: тесты используют переменные окружения процесса.
Тесты запускаются параллельно по классам (2 потока) и распределяются по эмуляторам через очередь.
4. Запустить тесты:
```bash
mvn test
```
Тесты запускаются параллельно по классам (2 потока) и распределяются по эмуляторам через очередь.
Примечание: если нужен запуск только на одном эмуляторе, можно поднять только `wiremock` и `android-emulator-1`, а перед `mvn test` задать:
PowerShell:
```powershell
$env:MOBILE_EMULATORS="android-emulator-1|http://127.0.0.1:4723|Android Emulator"
```
bash:
```bash
export MOBILE_EMULATORS="android-emulator-1|http://127.0.0.1:4723|Android Emulator"
```
@@ -1,7 +1,7 @@
package ru.otus.mobile.config;
public enum TestAccount {
WISHLISTS("user1us", "user1us", """
WISHLISTS("WISHLISTS", "user1us", "user1us", """
WITH target_user AS (
SELECT id FROM users WHERE username = ?
),
@@ -14,7 +14,7 @@ public enum TestAccount {
)
SELECT 1;
"""),
GIFTS("user2us", "user2us", """
GIFTS("GIFTS", "user2us", "user2us", """
WITH target_user AS (
SELECT id FROM users WHERE username = ?
),
@@ -27,7 +27,7 @@ public enum TestAccount {
)
SELECT 1;
"""),
RESERVATION("user3us", "user3us", """
RESERVATION("RESERVATION", "user3us", "user3us", """
WITH owner_user AS (
SELECT id FROM users WHERE username = ?
),
@@ -59,25 +59,35 @@ public enum TestAccount {
FROM owner_wishlist;
""");
private final String username;
private final String password;
private final String envPrefix;
private final String defaultUsername;
private final String defaultPassword;
private final String resetSql;
TestAccount(String username, String password, String resetSql) {
this.username = username;
this.password = password;
TestAccount(String envPrefix, String defaultUsername, String defaultPassword, String resetSql) {
this.envPrefix = envPrefix;
this.defaultUsername = defaultUsername;
this.defaultPassword = defaultPassword;
this.resetSql = resetSql;
}
public String username() {
return username;
return resolve(envPrefix + "_USERNAME", defaultUsername);
}
public String password() {
return password;
return resolve(envPrefix + "_PASSWORD", defaultPassword);
}
public String resetSql() {
return resetSql;
}
private String resolve(String envKey, String defaultValue) {
String value = System.getenv(envKey);
if (value == null || value.isBlank()) {
return defaultValue;
}
return value;
}
}