import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import { DatabaseManager } from '../src/database/manager.js';
import { QueryValidator } from '../src/utils/validator.js';
describe('QueryValidator', () => {
it('should allow SELECT queries', () => {
const result = QueryValidator.validateQuery('SELECT * FROM users');
expect(result.allowed).toBe(true);
});
it('should block INSERT queries by default', () => {
const result = QueryValidator.validateQuery('INSERT INTO users VALUES (1, "test")');
expect(result.allowed).toBe(false);
expect(result.reason).toContain('INSERT operations are not allowed');
});
it('should allow SHOW queries', () => {
const result = QueryValidator.validateQuery('SHOW TABLES');
expect(result.allowed).toBe(true);
});
it('should detect read-only queries correctly', () => {
expect(QueryValidator.isReadOnlyQuery('SELECT * FROM users')).toBe(true);
expect(QueryValidator.isReadOnlyQuery('SHOW TABLES')).toBe(true);
expect(QueryValidator.isReadOnlyQuery('DESCRIBE users')).toBe(true);
expect(QueryValidator.isReadOnlyQuery('INSERT INTO users')).toBe(false);
});
});
describe('DatabaseManager', () => {
let db: DatabaseManager;
beforeAll(() => {
db = DatabaseManager.getInstance();
});
it('should be a singleton', () => {
const db2 = DatabaseManager.getInstance();
expect(db).toBe(db2);
});
// Add more database tests here when you have a test database set up
});