Integration
Integration тесты: покрытие, setup, известные проблемы.
Покрытие¶
| Папка | Что тестирует | Статус |
|---|---|---|
admin/ |
setEncryptPiiMode — переключение режима шифрования PII |
OK |
cleanup/ |
incompleteRegistrationCleanup — удаление незавершённых регистраций; userDeletionService — полное удаление пользователя |
OK |
consumer/ |
checkReferralCode — проверка реферального кода; saveCloseloopProfile — сохранение closeloop профиля |
OK |
merchant/ |
merchantInvoice — создание QR-инвойса мерчантом |
OK |
nfc/ |
Регистрация, ротация, отзыв меток; chargeByNfc; chip reset endpoint; криптография токенов; decommission window | Частично: listTags падает без v_tx_history |
payment/ |
HMAC клиент (pinned); TB account ID деривация (pinned); wallet creation service; wallet endpoint (getWallets нужен v_user_tb_accounts) |
Частично |
pii/ |
piiCryptoService encrypt/decrypt round-trip; piiHashService HMAC детерминированность; piiMaskService маскирование; piiProfileWriter full upsert |
OK |
| Корень | app_version_endpoint_test — проверка версии; greeting_endpoint_test — базовый smoke |
OK |
Итого: 10+ тестов падают из-за отсутствия v_tx_history / v_user_tb_accounts в тестовой БД.
Запуск с тестовой БД¶
Тестовая БД настроена в config/test.yaml: localhost:9090, база onewallet_base_test, user postgres.
# Убедиться что тестовая БД запущена
docker ps | grep postgres
# Запустить все integration тесты (concurrency=1 предотвращает гонки)
dart test --concurrency=1 test/integration/
# Запустить конкретную папку
dart test test/integration/pii/
dart test test/integration/nfc/
# Запустить с детальным выводом
dart test -v test/integration/payment/psp_hmac_client_test.dart
Test Database Views¶
Часть тестов требует views, создаваемых PM-миграциями в схеме pm.*. В тестовом контейнере эти views обычно отсутствуют.
-- Запускать в тестовой БД если тесты падают с:
-- "relation v_tx_history does not exist"
-- "relation v_user_tb_accounts does not exist"
-- "schema pm does not exist"
-- Создать схему pm если отсутствует
CREATE SCHEMA IF NOT EXISTS pm;
-- Stub: v_user_tb_accounts
-- Полная структура из pm.tb_account_map
CREATE TABLE IF NOT EXISTS pm.tb_account_map (
user_id bigint,
currency text,
tb_account_id uuid,
account_name text,
account_type text,
tb_ledger bigint
);
CREATE OR REPLACE VIEW public.v_user_tb_accounts AS
SELECT user_id, currency, tb_account_id, account_name, account_type, tb_ledger
FROM pm.tb_account_map;
-- Stub: v_tx_history
-- [PLAN] Уточнить структуру из payment-manager/migrations/ после реализации Phase 2B
CREATE OR REPLACE VIEW public.v_tx_history AS
SELECT NULL::bigint AS user_id,
NULL::uuid AS intent_id,
NULL::text AS status,
NULL::bigint AS amount_satang,
NULL::text AS currency,
NULL::timestamptz AS created_at
WHERE false;
Альтернатива: запустить PM Drizzle-миграции против тестовой БД перед тестами.