mirror of
https://github.com/kjanat/livedash-node.git
synced 2026-01-16 08:32:09 +01:00
Migrate database from SQLite to PostgreSQL
- Replace SQLite with PostgreSQL using Neon as provider - Add environment-based database URL configuration - Create separate test database setup with DATABASE_URL_TEST - Reset migration history and generate fresh PostgreSQL schema - Add comprehensive migration documentation - Include database unit tests for connection validation
This commit is contained in:
77
tests/unit/database.test.ts
Normal file
77
tests/unit/database.test.ts
Normal file
@ -0,0 +1,77 @@
|
||||
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
|
||||
describe('Database Configuration', () => {
|
||||
let prisma: PrismaClient;
|
||||
|
||||
beforeAll(() => {
|
||||
prisma = new PrismaClient();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
|
||||
it('should connect to the test database', async () => {
|
||||
// Verify we can connect to the database
|
||||
const result = await prisma.$queryRaw`SELECT 1 as test`;
|
||||
expect(result).toBeDefined();
|
||||
});
|
||||
|
||||
it('should use PostgreSQL as the database provider', async () => {
|
||||
// Query the database to verify it's PostgreSQL
|
||||
const result = await prisma.$queryRaw`SELECT version()` as any[];
|
||||
expect(result[0].version).toContain('PostgreSQL');
|
||||
});
|
||||
|
||||
it('should be using the test database URL', () => {
|
||||
// Verify that DATABASE_URL is set to the test database
|
||||
expect(process.env.DATABASE_URL).toBeDefined();
|
||||
expect(process.env.DATABASE_URL).toContain('postgresql://');
|
||||
|
||||
// If DATABASE_URL_TEST is set, DATABASE_URL should match it (from our test setup)
|
||||
if (process.env.DATABASE_URL_TEST) {
|
||||
expect(process.env.DATABASE_URL).toBe(process.env.DATABASE_URL_TEST);
|
||||
}
|
||||
});
|
||||
|
||||
it('should have all required tables', async () => {
|
||||
// Verify all our tables exist
|
||||
const tables = await prisma.$queryRaw`
|
||||
SELECT table_name
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = 'public'
|
||||
AND table_type = 'BASE TABLE'
|
||||
ORDER BY table_name
|
||||
` as any[];
|
||||
|
||||
const tableNames = tables.map(t => t.table_name);
|
||||
|
||||
expect(tableNames).toContain('Company');
|
||||
expect(tableNames).toContain('User');
|
||||
expect(tableNames).toContain('Session');
|
||||
expect(tableNames).toContain('SessionImport');
|
||||
expect(tableNames).toContain('Message');
|
||||
expect(tableNames).toContain('Question');
|
||||
expect(tableNames).toContain('SessionQuestion');
|
||||
expect(tableNames).toContain('AIProcessingRequest');
|
||||
});
|
||||
|
||||
it('should be able to create and query data', async () => {
|
||||
// Test basic CRUD operations
|
||||
const company = await prisma.company.create({
|
||||
data: {
|
||||
name: 'Test Company',
|
||||
csvUrl: 'https://example.com/test.csv',
|
||||
},
|
||||
});
|
||||
|
||||
expect(company.id).toBeDefined();
|
||||
expect(company.name).toBe('Test Company');
|
||||
|
||||
// Clean up
|
||||
await prisma.company.delete({
|
||||
where: { id: company.id },
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user