const { test, describe, before } = require('node:test'); const assert = require('node:assert'); const request = require('supertest'); const app = require('../src/index.js'); const { Pool } = require('pg'); // Setup database connection for tests const pool = new Pool({ host: process.env.DB_HOST || 'postgres', port: process.env.DB_PORT || 5432, user: process.env.DB_USER || 'postgres', password: process.env.DB_PASSWORD || 'homelab_postgres_2026', database: process.env.DB_NAME || 'gravl' }); describe('Phase 06 - Recovery Tracking & Swap System', () => { let authToken; let userId; // Setup: Create test user before(async () => { const res = await request(app) .post('/api/auth/register') .send({ email: `test-${Date.now()}@test.com`, password: 'testpass123' }); authToken = res.body.token; userId = res.body.user.id; }); describe('06-02: Muscle Group Recovery Tracking', () => { test('GET /api/recovery/muscle-groups - should return recovery status', async () => { const res = await request(app) .get('/api/recovery/muscle-groups') .set('Authorization', `Bearer ${authToken}`); assert.strictEqual(res.status, 200); assert.ok('userId' in res.body, 'response should have userId'); assert.ok('muscleGroups' in res.body, 'response should have muscleGroups'); assert.ok(Array.isArray(res.body.muscleGroups), 'muscleGroups should be an array'); }); test('GET /api/recovery/most-recovered - should return top recovered groups', async () => { const res = await request(app) .get('/api/recovery/most-recovered?limit=3') .set('Authorization', `Bearer ${authToken}`); assert.strictEqual(res.status, 200); assert.ok('recovered' in res.body, 'response should have recovered'); assert.strictEqual(res.body.limit, 3); }); }); describe('06-03: Smart Workout Recommendations', () => { test('GET /api/recommendations/smart-workout - should return recommendations', async () => { const res = await request(app) .get('/api/recommendations/smart-workout') .set('Authorization', `Bearer ${authToken}`); assert.strictEqual(res.status, 200); assert.ok('recommendations' in res.body, 'response should have recommendations'); assert.ok(Array.isArray(res.body.recommendations), 'recommendations should be an array'); }); }); describe('06-01: Workout Swap System', () => { test('GET /api/workouts/available - should return available exercises', async () => { const res = await request(app) .get('/api/workouts/available') .set('Authorization', `Bearer ${authToken}`); assert.strictEqual(res.status, 200); assert.ok('exercises' in res.body, 'response should have exercises'); assert.ok(Array.isArray(res.body.exercises), 'exercises should be an array'); }); }); });