import request from 'supertest';
import 'reflect-metadata';
import { createApp } from '../../src/app';
import { AppDataSource, initializeDatabase } from '../../src/models/index';
import { closeRedis } from '../../src/config/redis';

describe('API integration', () => {
  beforeAll(async () => {
    await initializeDatabase();
  });

  afterAll(async () => {
    if (AppDataSource.isInitialized) await AppDataSource.destroy();
    await closeRedis();
  });

  it('GET /v1/health returns ok', async () => {
    const app = createApp();
    const res = await request(app).get('/v1/health');
    expect(res.status).toBe(200);
    expect(res.body.status).toBe('ok');
  });

  it('GET /v1/health/db returns connected', async () => {
    const app = createApp();
    const res = await request(app).get('/v1/health/db');
    expect(res.status).toBe(200);
    expect(res.body.database).toBe('connected');
  });

  it('POST /v1/auth/register validates body', async () => {
    const app = createApp();
    const res = await request(app).post('/v1/auth/register').send({ email: 'bad' });
    expect(res.status).toBe(400);
    expect(res.body.error).toBe('validation_error');
  });
});
