tools.test.tsโข5.2 kB
import { createToolDefinitions, BROWSER_TOOLS, API_TOOLS } from '../tools';
describe('Tool Definitions', () => {
const toolDefinitions = createToolDefinitions();
test('should return an array of tool definitions', () => {
expect(Array.isArray(toolDefinitions)).toBe(true);
expect(toolDefinitions.length).toBeGreaterThan(0);
});
test('each tool definition should have required properties', () => {
toolDefinitions.forEach(tool => {
expect(tool).toHaveProperty('name');
expect(tool).toHaveProperty('description');
expect(tool).toHaveProperty('inputSchema');
expect(tool.inputSchema).toHaveProperty('type');
expect(tool.inputSchema).toHaveProperty('properties');
});
});
test('BROWSER_TOOLS should contain browser-related tool names', () => {
expect(Array.isArray(BROWSER_TOOLS)).toBe(true);
expect(BROWSER_TOOLS.length).toBeGreaterThan(0);
BROWSER_TOOLS.forEach(toolName => {
expect(toolDefinitions.some(tool => tool.name === toolName)).toBe(true);
});
});
test('API_TOOLS should be empty array (removed from web inspector)', () => {
expect(Array.isArray(API_TOOLS)).toBe(true);
expect(API_TOOLS.length).toBe(0);
});
test('should validate navigate tool schema', () => {
const navigateTool = toolDefinitions.find(tool => tool.name === 'navigate');
expect(navigateTool).toBeDefined();
expect(navigateTool!.inputSchema.properties).toHaveProperty('url');
expect(navigateTool!.inputSchema.properties).toHaveProperty('waitUntil');
expect(navigateTool!.inputSchema.properties).toHaveProperty('timeout');
expect(navigateTool!.inputSchema.properties).toHaveProperty('width');
expect(navigateTool!.inputSchema.properties).toHaveProperty('height');
expect(navigateTool!.inputSchema.properties).toHaveProperty('headless');
expect(navigateTool!.inputSchema.required).toEqual(['url']);
});
test('should validate go_back tool schema', () => {
const goBackTool = toolDefinitions.find(tool => tool.name === 'go_back');
expect(goBackTool).toBeDefined();
expect(goBackTool!.inputSchema.properties).toEqual({});
expect(goBackTool!.inputSchema.required).toEqual([]);
});
test('should validate go_forward tool schema', () => {
const goForwardTool = toolDefinitions.find(tool => tool.name === 'go_forward');
expect(goForwardTool).toBeDefined();
expect(goForwardTool!.inputSchema.properties).toEqual({});
expect(goForwardTool!.inputSchema.required).toEqual([]);
});
test('should validate drag tool schema', () => {
const dragTool = toolDefinitions.find(tool => tool.name === 'drag');
expect(dragTool).toBeDefined();
expect(dragTool!.inputSchema.properties).toHaveProperty('sourceSelector');
expect(dragTool!.inputSchema.properties).toHaveProperty('targetSelector');
expect(dragTool!.inputSchema.required).toEqual(['sourceSelector', 'targetSelector']);
});
test('should validate press_key tool schema', () => {
const pressKeyTool = toolDefinitions.find(tool => tool.name === 'press_key');
expect(pressKeyTool).toBeDefined();
expect(pressKeyTool!.inputSchema.properties).toHaveProperty('key');
expect(pressKeyTool!.inputSchema.properties).toHaveProperty('selector');
expect(pressKeyTool!.inputSchema.required).toEqual(['key']);
});
test('should validate upload_file tool schema', () => {
const uploadFileTool = toolDefinitions.find(tool => tool.name === 'upload_file');
expect(uploadFileTool).toBeDefined();
expect(uploadFileTool!.inputSchema.properties).toHaveProperty('selector');
expect(uploadFileTool!.inputSchema.properties).toHaveProperty('filePath');
expect(uploadFileTool!.inputSchema.required).toEqual(['selector', 'filePath']);
});
test('should have 25 tools in BROWSER_TOOLS export', () => {
expect(BROWSER_TOOLS.length).toBe(25);
});
test('should have all tool definitions available (41 total including non-exported)', () => {
// All tools are still defined in createToolDefinitions(), but only 25 are exported via BROWSER_TOOLS
expect(toolDefinitions.length).toBe(41);
});
test('BROWSER_TOOLS should only contain web inspection tools', () => {
const expectedTools = [
'navigate', 'go_back', 'go_forward', 'screenshot', 'close',
'inspect_dom', 'get_test_ids', 'query_selector', 'find_by_text',
'check_visibility', 'get_position', 'compare_positions', 'element_exists',
'get_styles', 'get_text', 'get_html', 'get_console_logs',
'click', 'fill', 'hover', 'select', 'upload_file', 'drag', 'press_key',
'evaluate'
];
expect(BROWSER_TOOLS.sort()).toEqual(expectedTools.sort());
});
test('should not export removed tools in BROWSER_TOOLS', () => {
const removedTools = ['get', 'post', 'put', 'patch', 'delete', 'save_pdf',
'start_codegen_session', 'end_codegen_session',
'iframe_click', 'iframe_fill', 'click_and_switch_tab',
'expect_response', 'assert_response', 'set_user_agent'];
removedTools.forEach(toolName => {
expect(BROWSER_TOOLS.includes(toolName)).toBe(false);
});
});
});