diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..e9b2765 --- /dev/null +++ b/.env.example @@ -0,0 +1,11 @@ +DB_URL=jdbc:postgresql://:/ +DB_USER= +DB_PASSWORD= + +WISHLISTS_USERNAME= +WISHLISTS_PASSWORD= +GIFTS_USERNAME= +GIFTS_PASSWORD= +RESERVATION_USERNAME= +RESERVATION_PASSWORD= +RESERVATION_OWNER= diff --git a/.gitignore b/.gitignore index de0d3d4..c0e477a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ build/ .DS_Store allure-results/ logcat.txt +.env diff --git a/README.md b/README.md index 74e773c..e85d501 100644 --- a/README.md +++ b/README.md @@ -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://:/" +$env:DB_USER="" +$env:DB_PASSWORD="" +$env:WISHLISTS_USERNAME="" +$env:WISHLISTS_PASSWORD="" +$env:GIFTS_USERNAME="" +$env:GIFTS_PASSWORD="" +$env:RESERVATION_USERNAME="" +$env:RESERVATION_PASSWORD="" +$env:RESERVATION_OWNER="" +``` + +bash: +```bash +export DB_URL="jdbc:postgresql://:/" +export DB_USER="" +export DB_PASSWORD="" +export WISHLISTS_USERNAME="" +export WISHLISTS_PASSWORD="" +export GIFTS_USERNAME="" +export GIFTS_PASSWORD="" +export RESERVATION_USERNAME="" +export RESERVATION_PASSWORD="" +export RESERVATION_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" +``` + diff --git a/src/main/java/ru/otus/mobile/config/TestAccount.java b/src/main/java/ru/otus/mobile/config/TestAccount.java index 8570952..a5ad00d 100644 --- a/src/main/java/ru/otus/mobile/config/TestAccount.java +++ b/src/main/java/ru/otus/mobile/config/TestAccount.java @@ -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; + } }