update configuration and documentation
This commit is contained in:
@@ -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>
|
||||||
@@ -5,3 +5,4 @@ build/
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
allure-results/
|
allure-results/
|
||||||
logcat.txt
|
logcat.txt
|
||||||
|
.env
|
||||||
|
|||||||
@@ -19,14 +19,6 @@
|
|||||||
- `src/test/java` — только тестовые классы.
|
- `src/test/java` — только тестовые классы.
|
||||||
- `wiremock` — маппинги и APK.
|
- `wiremock` — маппинги и APK.
|
||||||
|
|
||||||
## Тестовые аккаунты
|
|
||||||
- `user1us / user1us`
|
|
||||||
- `user2us / user2us`
|
|
||||||
- `user3us / user3us`
|
|
||||||
- `user4us / user4us`
|
|
||||||
|
|
||||||
`user4us` используется как владелец подарка в тесте резервирования.
|
|
||||||
|
|
||||||
## Запуск
|
## Запуск
|
||||||
1. Поднять окружение:
|
1. Поднять окружение:
|
||||||
```bash
|
```bash
|
||||||
@@ -38,23 +30,73 @@ docker compose up -d
|
|||||||
docker compose ps
|
docker compose ps
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Указать доступ к БД:
|
3. Подготовить переменные окружения (использовать один из вариантов):
|
||||||
|
|
||||||
|
Вариант A: через `.env`
|
||||||
|
- скопировать `.env.example` в `.env`;
|
||||||
|
- заполнить `.env` актуальными значениями вашей среды;
|
||||||
|
- загрузить `.env` в текущую shell-сессию.
|
||||||
|
|
||||||
PowerShell:
|
PowerShell:
|
||||||
```powershell
|
```powershell
|
||||||
$env:DB_URL="jdbc:postgresql://sql.otus.kartushin.su:5432/wishlist"
|
Get-Content .env | Where-Object { $_ -match '^[^#].+=.+' } | ForEach-Object {
|
||||||
$env:DB_USER="student"
|
$name, $value = $_ -split '=', 2
|
||||||
$env:DB_PASSWORD="student"
|
[System.Environment]::SetEnvironmentVariable($name, $value, 'Process')
|
||||||
```
|
}
|
||||||
bash:
|
|
||||||
```bash
|
|
||||||
export DB_URL="jdbc:postgresql://sql.otus.kartushin.su:5432/wishlist"
|
|
||||||
export DB_USER="student"
|
|
||||||
export DB_PASSWORD="student"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
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. Запустить тесты:
|
4. Запустить тесты:
|
||||||
```bash
|
```bash
|
||||||
mvn test
|
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;
|
package ru.otus.mobile.config;
|
||||||
|
|
||||||
public enum TestAccount {
|
public enum TestAccount {
|
||||||
WISHLISTS("user1us", "user1us", """
|
WISHLISTS("WISHLISTS", "user1us", "user1us", """
|
||||||
WITH target_user AS (
|
WITH target_user AS (
|
||||||
SELECT id FROM users WHERE username = ?
|
SELECT id FROM users WHERE username = ?
|
||||||
),
|
),
|
||||||
@@ -14,7 +14,7 @@ public enum TestAccount {
|
|||||||
)
|
)
|
||||||
SELECT 1;
|
SELECT 1;
|
||||||
"""),
|
"""),
|
||||||
GIFTS("user2us", "user2us", """
|
GIFTS("GIFTS", "user2us", "user2us", """
|
||||||
WITH target_user AS (
|
WITH target_user AS (
|
||||||
SELECT id FROM users WHERE username = ?
|
SELECT id FROM users WHERE username = ?
|
||||||
),
|
),
|
||||||
@@ -27,7 +27,7 @@ public enum TestAccount {
|
|||||||
)
|
)
|
||||||
SELECT 1;
|
SELECT 1;
|
||||||
"""),
|
"""),
|
||||||
RESERVATION("user3us", "user3us", """
|
RESERVATION("RESERVATION", "user3us", "user3us", """
|
||||||
WITH owner_user AS (
|
WITH owner_user AS (
|
||||||
SELECT id FROM users WHERE username = ?
|
SELECT id FROM users WHERE username = ?
|
||||||
),
|
),
|
||||||
@@ -59,25 +59,35 @@ public enum TestAccount {
|
|||||||
FROM owner_wishlist;
|
FROM owner_wishlist;
|
||||||
""");
|
""");
|
||||||
|
|
||||||
private final String username;
|
private final String envPrefix;
|
||||||
private final String password;
|
private final String defaultUsername;
|
||||||
|
private final String defaultPassword;
|
||||||
private final String resetSql;
|
private final String resetSql;
|
||||||
|
|
||||||
TestAccount(String username, String password, String resetSql) {
|
TestAccount(String envPrefix, String defaultUsername, String defaultPassword, String resetSql) {
|
||||||
this.username = username;
|
this.envPrefix = envPrefix;
|
||||||
this.password = password;
|
this.defaultUsername = defaultUsername;
|
||||||
|
this.defaultPassword = defaultPassword;
|
||||||
this.resetSql = resetSql;
|
this.resetSql = resetSql;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String username() {
|
public String username() {
|
||||||
return username;
|
return resolve(envPrefix + "_USERNAME", defaultUsername);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String password() {
|
public String password() {
|
||||||
return password;
|
return resolve(envPrefix + "_PASSWORD", defaultPassword);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String resetSql() {
|
public String resetSql() {
|
||||||
return resetSql;
|
return resetSql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String resolve(String envKey, String defaultValue) {
|
||||||
|
String value = System.getenv(envKey);
|
||||||
|
if (value == null || value.isBlank()) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user