import { describe, it, expect, vi, beforeEach } from "vitest";
import { createTablesResource } from "../tables.js";
import type { MySQLAdapter } from "../../MySQLAdapter.js";
import {
createMockMySQLAdapter,
createMockRequestContext,
} from "../../../../__tests__/mocks/index.js";
interface TablesResult {
tables: unknown[];
count: number;
}
describe("Tables Resource", () => {
let mockAdapter: ReturnType<typeof createMockMySQLAdapter>;
let mockContext: ReturnType<typeof createMockRequestContext>;
beforeEach(() => {
vi.clearAllMocks();
mockAdapter = createMockMySQLAdapter();
mockContext = createMockRequestContext();
});
it("should call listTables adapter method", async () => {
const resource = createTablesResource(
mockAdapter as unknown as MySQLAdapter,
);
await resource.handler("mysql://tables", mockContext);
expect(mockAdapter.listTables).toHaveBeenCalled();
});
it("should return table list with count", async () => {
const resource = createTablesResource(
mockAdapter as unknown as MySQLAdapter,
);
const result = (await resource.handler(
"mysql://tables",
mockContext,
)) as TablesResult;
expect(result).toHaveProperty("tables");
expect(result).toHaveProperty("count");
expect(Array.isArray(result.tables)).toBe(true);
});
});