Перейти к содержанию

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-миграции против тестовой БД перед тестами.