WIP
This commit is contained in:
127
backend/tests/testDatabase.js
Normal file
127
backend/tests/testDatabase.js
Normal file
@ -0,0 +1,127 @@
|
||||
const { Pool } = require('pg');
|
||||
|
||||
class TestDatabase {
|
||||
constructor() {
|
||||
this.pool = null;
|
||||
this.isConnected = false;
|
||||
}
|
||||
|
||||
async connect() {
|
||||
if (this.isConnected) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
this.pool = new Pool({
|
||||
host: process.env.DB_HOST || 'localhost',
|
||||
port: process.env.DB_PORT || 5432,
|
||||
database: process.env.DB_NAME || 'bookmark_manager_test',
|
||||
user: process.env.DB_USER || 'postgres',
|
||||
password: process.env.DB_PASSWORD || 'password',
|
||||
max: 5, // Smaller pool for tests
|
||||
idleTimeoutMillis: 30000,
|
||||
connectionTimeoutMillis: 2000,
|
||||
});
|
||||
|
||||
// Test connection
|
||||
const client = await this.pool.connect();
|
||||
client.release();
|
||||
|
||||
this.isConnected = true;
|
||||
console.log('Test database connected successfully');
|
||||
} catch (error) {
|
||||
console.error('Test database connection failed:', error.message);
|
||||
this.isConnected = false;
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async query(text, params = []) {
|
||||
if (!this.isConnected || !this.pool) {
|
||||
throw new Error('Test database not connected');
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await this.pool.query(text, params);
|
||||
return result;
|
||||
} catch (error) {
|
||||
console.error('Test database query error:', error.message);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async disconnect() {
|
||||
if (this.pool) {
|
||||
await this.pool.end();
|
||||
this.pool = null;
|
||||
this.isConnected = false;
|
||||
console.log('Test database disconnected');
|
||||
}
|
||||
}
|
||||
|
||||
async setupTables() {
|
||||
if (!this.isConnected) {
|
||||
throw new Error('Database not connected');
|
||||
}
|
||||
|
||||
try {
|
||||
// Create users table
|
||||
await this.query(`
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
email VARCHAR(255) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
is_verified BOOLEAN DEFAULT FALSE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
last_login TIMESTAMP,
|
||||
verification_token VARCHAR(255),
|
||||
reset_token VARCHAR(255),
|
||||
reset_expires TIMESTAMP
|
||||
)
|
||||
`);
|
||||
|
||||
// Create bookmarks table
|
||||
await this.query(`
|
||||
CREATE TABLE IF NOT EXISTS bookmarks (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
title VARCHAR(500) NOT NULL,
|
||||
url TEXT NOT NULL,
|
||||
folder VARCHAR(255) DEFAULT '',
|
||||
add_date TIMESTAMP NOT NULL,
|
||||
last_modified TIMESTAMP,
|
||||
icon TEXT,
|
||||
status VARCHAR(20) DEFAULT 'unknown',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
`);
|
||||
|
||||
// Create indexes
|
||||
await this.query('CREATE INDEX IF NOT EXISTS idx_users_email ON users(email)');
|
||||
await this.query('CREATE INDEX IF NOT EXISTS idx_bookmarks_user_id ON bookmarks(user_id)');
|
||||
|
||||
console.log('Test database tables created successfully');
|
||||
} catch (error) {
|
||||
console.error('Failed to setup test database tables:', error.message);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async cleanupTables() {
|
||||
if (!this.isConnected) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await this.query('DELETE FROM bookmarks');
|
||||
await this.query('DELETE FROM users');
|
||||
console.log('Test database tables cleaned up');
|
||||
} catch (error) {
|
||||
console.error('Failed to cleanup test database tables:', error.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new TestDatabase();
|
||||
Reference in New Issue
Block a user