import { describe, it, expect, vi, beforeEach } from 'vitest';
import { createPoolResource } from '../pool.js';
import type { MySQLAdapter } from '../../MySQLAdapter.js';
import { createMockMySQLAdapter, createMockRequestContext } from '../../../../__tests__/mocks/index.js';
interface PoolResult {
poolStats?: { total: number; active: number; idle: number };
error?: string;
}
describe('Pool Resource', () => {
let mockAdapter: ReturnType<typeof createMockMySQLAdapter>;
let mockContext: ReturnType<typeof createMockRequestContext>;
beforeEach(() => {
vi.clearAllMocks();
mockAdapter = createMockMySQLAdapter();
mockContext = createMockRequestContext();
});
it('should return pool statistics when pool available', async () => {
(mockAdapter.getPool as ReturnType<typeof vi.fn>).mockReturnValue({
getStats: () => ({
total: 10,
active: 3,
idle: 7,
waiting: 0,
totalQueries: 500
})
});
const resource = createPoolResource(mockAdapter as unknown as MySQLAdapter);
const result = await resource.handler('mysql://pool', mockContext) as PoolResult;
expect(result).toHaveProperty('poolStats');
expect(result.poolStats).toHaveProperty('total', 10);
expect(result.poolStats).toHaveProperty('active', 3);
expect(result.poolStats).toHaveProperty('idle', 7);
});
it('should handle missing pool gracefully', async () => {
(mockAdapter.getPool as ReturnType<typeof vi.fn>).mockReturnValue(null);
const resource = createPoolResource(mockAdapter as unknown as MySQLAdapter);
const result = await resource.handler('mysql://pool', mockContext);
expect(result).toHaveProperty('error');
});
});