rwadurian/backend/services/backup-service/test
hailin 747e4ae8ef refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing
- Remove Address field from PartyEndpoint (parties connect to router themselves)
- Update K8s Discovery to only manage PartyID and Role labels
- Add Party registration and SessionEvent protobuf definitions
- Implement PartyRegistry and SessionEventBroadcaster domain logic
- Add RegisterParty and SubscribeSessionEvents gRPC handlers
- Prepare infrastructure for party-driven MPC coordination

This is the first phase of migrating from coordinator-driven to party-driven
architecture following international MPC system design patterns.
2025-12-05 08:11:28 -08:00
..
e2e refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
integration refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
setup refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
unit refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
utils refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
README.md refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
jest-e2e-db.json refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
jest-e2e-mock.json refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
jest-e2e.json refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
tsconfig.json refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00

README.md

Backup Service Tests

Test Structure

test/
├── unit/                          # Unit tests (no external dependencies)
│   ├── api/                       # Controller tests
│   ├── application/               # Handler tests
│   ├── domain/                    # Entity and value object tests
│   ├── infrastructure/            # Service tests
│   └── shared/                    # Guard, filter, interceptor tests
├── integration/                   # Integration tests (mocked DB)
├── e2e/                          # End-to-end tests
│   ├── backup-share-mock.e2e-spec.ts  # Mock DB E2E tests
│   └── backup-share.e2e-spec.ts       # Real DB E2E tests
├── setup/                        # Test setup files
│   ├── global-setup.ts           # DB container setup
│   ├── global-teardown.ts        # DB container cleanup
│   ├── jest-e2e-setup.ts         # Real DB test setup
│   ├── jest-mock-setup.ts        # Mock test setup
│   └── test-database.helper.ts   # DB helper utilities
└── utils/                        # Test utilities
    ├── mock-prisma.service.ts    # Mock Prisma service
    └── test-utils.ts             # Helper functions

Running Tests

Unit Tests

npm run test:unit

Runs 37 unit tests. No external dependencies required.

Mock E2E Tests

npm run test:e2e:mock
# or
npm run test:e2e

Runs 21 E2E tests with mocked database. No Docker or PostgreSQL required.

All Tests (Unit + Mock E2E)

npm run test:all

Runs all 58 tests that don't require a real database.

Real Database E2E Tests

Option 1: With Docker Desktop

# Ensure Docker Desktop is running
npm run test:e2e:db

This will:

  1. Start PostgreSQL container (port 5434)
  2. Push Prisma schema
  3. Run 32 E2E tests
  4. Stop and cleanup container

Option 2: With Existing PostgreSQL

# 1. Create a test database
psql -c "CREATE DATABASE rwa_backup_test;"

# 2. Update DATABASE_URL in .env.test
# DATABASE_URL="postgresql://user:password@localhost:5432/rwa_backup_test"

# 3. Setup database schema
npm run db:test:setup

# 4. Run tests
npm run test:e2e:db:manual

Test Commands

Command Description
npm run test Run all Jest tests
npm run test:unit Run unit tests only
npm run test:e2e Run mock E2E tests
npm run test:e2e:mock Run mock E2E tests
npm run test:e2e:db Run real DB E2E tests (Docker)
npm run test:e2e:db:manual Run real DB E2E tests (existing DB)
npm run test:all Run unit + mock E2E tests
npm run test:cov Run tests with coverage
npm run db:test:up Start test DB container
npm run db:test:down Stop test DB container
npm run db:test:setup Setup existing DB for tests

Test Environment Variables

Located in .env.test:

DATABASE_URL="postgresql://postgres:testpassword@localhost:5434/rwa_backup_test"
APP_PORT=3003
APP_ENV="test"
SERVICE_JWT_SECRET="test-super-secret-service-jwt-key-for-e2e-testing"
ALLOWED_SERVICES="identity-service,recovery-service"
BACKUP_ENCRYPTION_KEY="0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
BACKUP_ENCRYPTION_KEY_ID="test-key-v1"

Test Utilities

generateServiceToken(service, secret?)

Generates a JWT service token for testing authenticated endpoints.

createStoreSharePayload(overrides?)

Creates a valid store share request payload.

createRetrieveSharePayload(overrides?)

Creates a valid retrieve share request payload.

createRevokeSharePayload(overrides?)

Creates a valid revoke share request payload.

MockPrismaService

Full mock implementation of PrismaService for testing without a database.

Coverage Report

Generate coverage report:

npm run test:cov

Coverage output in ./coverage/ directory.