Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
acf6a49
refactor: [devjaes] update transaction date validation and enhance tr…
devjaes Oct 11, 2025
f353858
feat: enhance reporting features with new transaction and budget reports
devjaes Oct 11, 2025
8c2e8a8
feat: add comprehensive project documentation and enhance reporting s…
devjaes Oct 12, 2025
1adeb93
refactor: update debt and user repository methods for consistency and…
devjaes Oct 12, 2025
3dadd70
Update src/shared/utils/date.utils.ts
devjaes Oct 13, 2025
20a3acb
Update src/features/transactions/infrastructure/adapters/transaction.…
devjaes Oct 13, 2025
a2782b9
Merge pull request #4 from devjaes/feat/dashboard-improvements
devjaes Oct 13, 2025
8c0f50d
Merge pull request #5 from devjaes/feat/reports
devjaes Oct 13, 2025
deced8f
Merge pull request #6 from devjaes/feat/user-profile
devjaes Oct 13, 2025
5afc6f0
Merge remote-tracking branch 'origin' into develop
devjaes Nov 6, 2025
5fcd985
feat: implement active goal retrieval and enhance contribution recalc…
devjaes Nov 6, 2025
fafbdb6
feat: add password recovery functionality with email notifications
devjaes Nov 25, 2025
12ddb6f
feat: [phase-4] introduce recommendations feature with user-specific …
devjaes Nov 25, 2025
3d0d7a5
Merge pull request #7 from devjaes/feature/recover-password
devjaes Nov 25, 2025
9022b30
feat: add subs
Leninner Nov 14, 2025
c4d3d86
feat: update subs
Leninner Nov 26, 2025
c1a0632
Merge pull request #8 from devjaes/feat/subs
Leninner Nov 26, 2025
ac941c6
feat: add tests
Leninner Nov 26, 2025
b3c3c23
feat: add tests
Leninner Nov 27, 2025
b69c90d
chore: update
Leninner Nov 27, 2025
c18fced
feat: recomendations fase 7
devjaes Nov 27, 2025
e7224a5
refactor: enhance contribution recalculation cron job
devjaes Nov 28, 2025
d73af70
Merge remote-tracking branch 'origin/develop' into feature/recomendat…
devjaes Nov 28, 2025
d8409a5
feat: Implement comprehensive unit and integration testing, add a new…
devjaes Nov 28, 2025
f9c0cde
feat: Enhance environment configuration with JWT and frontend URL, an…
devjaes Nov 28, 2025
b2eb59c
feat: add tests
Leninner Nov 28, 2025
79ebef6
Merge remote-tracking branch 'origin/develop' into feature/recomendat…
devjaes Nov 28, 2025
d9a38b6
chore: add new line to test files for consistency
devjaes Nov 28, 2025
b69b1b9
Merge pull request #9 from devjaes/feature/recomendations
devjaes Nov 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .cursorignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
!.env
!.env.test
!.env.docker
!.env.test
33 changes: 27 additions & 6 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,17 +1,38 @@
# Environment Configuration Example
# Copy this file to .env and update with your actual values

# Application Environment
NODE_ENV=development

# Server Configuration
PORT=3005

# Logging
LOG_LEVEL=debug

# Database Configuration
DATABASE_CONTAINER_NAME=container
DATABASE_PORT=5432
DATABASE_PORT=5438
DATABASE_NAME=database
DATABASE_USERNAME=username
DATABASE_PASSWORD=passwd

# Database URL (can use environment variables)
DATABASE_URL=postgresql://${DATABASE_USERNAME}:${DATABASE_PASSWORD}@localhost:${DATABASE_PORT}/${DATABASE_NAME}

DATABASE_AUTH_TOKEN=when-on-production
# Alternative: Direct database URL (if not using individual variables above)
# DATABASE_URL=postgresql://username:passwd@localhost:5438/database

# Email configuration
BREVO_API_KEY=your-brevo-api-key
EMAIL_FROM_ADDRESS=no-reply@example.com
EMAIL_FROM_NAME=App Name
# JWT Secret (must be at least 32 characters long)
JWT_SECRET=your-secret-key-here-must-be-at-least-32-characters-long

# Email Configuration (Brevo/Sendinblue)
BREVO_API_KEY=your-brevo-api-key-here
EMAIL_FROM_ADDRESS=your-email@example.com
EMAIL_FROM_NAME=Foppy AI

# Frontend URL for email links
FRONTEND_URL=http://localhost:3001

# Database Auth Token (required in production)
DATABASE_AUTH_TOKEN=when-on-production
39 changes: 39 additions & 0 deletions .env.test.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Environment Configuration for Tests
# Copy this file to .env.test and update with your test database values

# IMPORTANT: Use a DIFFERENT database than your main database
# The database name MUST contain "test" to prevent accidental data loss

NODE_ENV=test

# Server Configuration (usually not needed for tests)
PORT=3005

# Logging
LOG_LEVEL=error

# Test Database Configuration
# Option 1: Use individual variables
DATABASE_CONTAINER_NAME=container
DATABASE_PORT=5438
DATABASE_NAME=database_test
DATABASE_USERNAME=username
DATABASE_PASSWORD=passwd

# Option 2: Use TEST_DATABASE_URL (recommended)
# This should point to a DIFFERENT database than your main one
TEST_DATABASE_URL=postgresql://username:passwd@localhost:5438/database_test

# JWT Secret for tests (must be at least 32 characters long)
JWT_SECRET=test-secret-key-for-jwt-testing-minimum-32-characters-long

# Email Configuration (optional for tests, can use dummy values)
BREVO_API_KEY=
EMAIL_FROM_ADDRESS=test@example.com
EMAIL_FROM_NAME=Foppy AI Test

# Frontend URL for email links (optional for tests)
FRONTEND_URL=http://localhost:3001

# Database Auth Token (not needed for tests)
# DATABASE_AUTH_TOKEN=
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ on:
- main

jobs:
build:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- run: bun install
- run: npm run build
- run: bun run test
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22.14.0
167 changes: 167 additions & 0 deletions TESTING_PLAN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
# Plan de Testing - Fopymes Backend

## Objetivo
Implementar tests unitarios y de integración para las funcionalidades más importantes del sistema de finanzas personales.

## Stack de Testing
- **Framework**: Bun Test (nativo de Bun)
- **Base de datos de pruebas**: PostgreSQL (contenedor Docker separado o base de datos de test)
- **Mocks**: Bun test mocking capabilities

## Estructura de Tests

```
tests/
├── unit/
│ ├── utils/
│ │ ├── crypto.util.test.ts
│ │ ├── jwt.util.test.ts
│ │ └── date.utils.test.ts
│ ├── services/
│ │ ├── auth.service.test.ts
│ │ ├── transaction.service.test.ts
│ │ ├── goal.service.test.ts
│ │ └── goal-contribution.service.test.ts
│ └── cron/
│ └── recalculate-contribution-amount.test.ts
├── integration/
│ ├── auth.test.ts
│ ├── transactions.test.ts
│ ├── goals.test.ts
│ └── recommendations.test.ts
└── helpers/
├── test-db.ts
├── test-helpers.ts
└── mocks.ts
```

## Features a Probar (Prioridad)

### Alta Prioridad
1. **Autenticación (Auth)**
- Login con credenciales válidas/inválidas
- Registro de usuarios
- Recuperación de contraseña
- Validación de tokens JWT

2. **Transacciones**
- Crear transacción (ingreso/gasto)
- Actualizar transacción
- Filtrar transacciones por fecha, tipo, categoría
- Validación de métodos de pago

3. **Metas de Ahorro (Goals)**
- Crear meta
- Crear contribución a meta
- Actualizar progreso de meta
- Generar calendario de contribuciones
- Recalcular monto de contribución (cron job)

4. **Recomendaciones**
- Obtener recomendaciones pendientes
- Marcar como vista/descartada/actuada

### Media Prioridad
5. **Presupuestos (Budgets)**
- Crear presupuesto
- Validar límites de presupuesto

6. **Deudas (Debts)**
- Crear deuda
- Registrar pago de deuda

## Tests Unitarios

### 1. Utilidades (Utils)
- **crypto.util.test.ts**
- `hash()`: Debe generar hash válido
- `verify()`: Debe verificar password correcto/incorrecto

- **jwt.util.test.ts**
- `generateToken()`: Debe generar token JWT válido
- `verifyToken()`: Debe verificar token válido/inválido/expirado

### 2. Servicios (Services)
- **auth.service.test.ts**
- Login exitoso
- Login con credenciales inválidas
- Registro exitoso
- Registro con email duplicado
- Recuperación de contraseña

- **transaction.service.test.ts**
- Crear transacción válida
- Validar método de pago
- Filtrar transacciones
- Actualizar transacción

- **goal.service.test.ts**
- Crear meta válida
- Validar usuario compartido
- Calcular progreso

- **goal-contribution.service.test.ts**
- Crear contribución
- Actualizar progreso de meta
- Notificaciones de hitos

### 3. Cron Jobs
- **recalculate-contribution-amount.test.ts**
- Recalcular monto para metas inactivas
- Generar notificaciones de recálculo
- Evitar duplicados

## Tests de Integración

### 1. Auth Endpoints
- `POST /auth/login` - 200, 400
- `POST /auth/register` - 201, 400
- `POST /auth/forgot-password` - 200, 404

### 2. Transaction Endpoints
- `POST /transactions` - 201, 400, 404
- `GET /transactions?userId=X` - 200
- `PUT /transactions/:id` - 200, 404

### 3. Goal Endpoints
- `POST /goals` - 201, 400, 404
- `GET /goals?userId=X` - 200
- `POST /goal-contributions` - 201, 400, 404

### 4. Recommendation Endpoints
- `GET /recommendations/pending?userId=X` - 200, 401
- `PUT /recommendations/:id/viewed` - 200, 404
- `PUT /recommendations/:id/dismissed` - 200, 404

## Configuración

### Variables de Entorno de Test
```env
NODE_ENV=test
DATABASE_URL=postgresql://user:password@localhost:5432/fopymes_test
JWT_SECRET=test-secret-key
```

### Scripts en package.json
```json
{
"test": "bun test",
"test:unit": "bun test tests/unit",
"test:integration": "bun test tests/integration",
"test:watch": "bun test --watch"
}
```

## Cobertura Objetivo
- **Cobertura mínima**: 60% de código crítico
- **Cobertura ideal**: 80% de código crítico
- **Enfoque**: Servicios de negocio, utilidades críticas, endpoints principales

## Notas de Implementación
- Usar base de datos de test separada
- Limpiar datos entre tests
- Usar factories para crear datos de prueba
- Mockear servicios externos (email, etc.)
- Verificar cada suite de tests antes de continuar


Loading
Loading