@queryleaf/postgres-server
Version:
PostgreSQL wire-compatible server for QueryLeaf
92 lines (75 loc) • 2.35 kB
text/typescript
import { MongoClient } from 'mongodb';
import { PostgresServer } from '../../src/pg-server';
import { Client } from 'pg';
import { MongoMemoryServer } from 'mongodb-memory-server';
// Create a test database
let mongoServer: MongoMemoryServer;
let mongoClient: MongoClient;
let pgServer: any;
const TEST_PORT = 5433;
const TEST_HOST = '127.0.0.1';
const TEST_DB = 'test_db';
// Set a longer timeout for all tests in this file
jest.setTimeout(120000);
describe('PostgreSQL Server', () => {
beforeAll(async () => {
// Start MongoDB memory server
mongoServer = await MongoMemoryServer.create();
const mongoUri = mongoServer.getUri();
// Connect to MongoDB
mongoClient = new MongoClient(mongoUri);
await mongoClient.connect();
// Create test data
const db = mongoClient.db(TEST_DB);
await db.collection('users').insertMany([
{ name: 'Alice', age: 30 },
{ name: 'Bob', age: 25 },
{ name: 'Charlie', age: 35 },
]);
// Start PostgreSQL server
pgServer = new PostgresServer(mongoClient, TEST_DB, {
port: TEST_PORT,
host: TEST_HOST,
maxConnections: 10,
});
// Explicitly start the server
await pgServer.listen(TEST_PORT, TEST_HOST);
// Wait a bit for the server to fully initialize
await new Promise(resolve => setTimeout(resolve, 2000));
}, 30000);
afterAll(async () => {
// Clean up
await mongoClient.close();
await mongoServer.stop();
// Shutdown server
if (pgServer) {
await pgServer.shutdown();
}
});
it('should connect to the server', async () => {
const client = new Client({
host: TEST_HOST,
port: TEST_PORT,
database: TEST_DB,
user: 'test',
password: 'test',
});
await client.connect();
await client.end();
}, 60000);
it('should execute a simple query', async () => {
const client = new Client({
host: TEST_HOST,
port: TEST_PORT,
database: TEST_DB,
user: 'test',
password: 'test',
});
await client.connect();
const result = await client.query('SELECT * FROM users');
expect(result.rows).toHaveLength(3);
expect(result.rows[0]).toHaveProperty('name');
expect(result.rows[0]).toHaveProperty('age');
await client.end();
}, 60000);
});