eletrotupi / tcc / api/tests/test-helper.ts master
1.5 KB Raw
import { PrismaClient } from '@prisma/client';
import { PrismaPg } from '@prisma/adapter-pg';
import 'dotenv/config';

let prismaTestClient: PrismaClient | null = null;

export function getTestPrisma(): PrismaClient {
  if (!prismaTestClient) {
    // Use test database URL
    const connectionString = process.env.DATABASE_URL || 'postgres://user:password@localhost:5430/orbit_test';
    const adapter = new PrismaPg({ connectionString });
    prismaTestClient = new PrismaClient({ adapter });
  }
  return prismaTestClient;
}

export async function cleanupTestDb() {
  const prisma = getTestPrisma();

  // Delete in correct order due to foreign keys
  // Add more tables as they're added to schema
  try {
    // When we add more models, delete them here in reverse order of dependencies
    await prisma.user.deleteMany({});
  } catch (err) {
    console.error('Error cleaning test DB:', err);
  }
}

export async function disconnectTestDb() {
  if (prismaTestClient) {
    await prismaTestClient.$disconnect();
    prismaTestClient = null;
  }
}

// Helper to create test users
export async function createTestUser(data?: {
  email?: string;
  firstName?: string;
  lastName?: string;
  encryptedPassword?: string;
}) {
  const prisma = getTestPrisma();
  return await prisma.user.create({
    data: {
      email: data?.email || 'test@example.com',
      firstName: data?.firstName || 'Test',
      lastName: data?.lastName || 'User',
      encryptedPassword: data?.encryptedPassword || '$2a$10$test'
    }
  });
}