Skip to main content
Glama

Low Cost Browsing MCP Server

by nightweb
navigation.test.ts•4.56 kB
import { describe, it, expect, beforeEach, afterEach, jest } from '@jest/globals'; import { NavigationTools } from '../../src/tools/navigation.js'; import { BrowserManager } from '../../src/core/browser-manager.js'; import { mockBrowser, mockContext, mockPage } from '../mocks/llm-providers.js'; // Mock BrowserManager jest.mock('../../src/core/browser-manager.js'); describe('NavigationTools', () => { let navigationTools: NavigationTools; let mockBrowserManager: jest.Mocked<BrowserManager>; beforeEach(() => { mockBrowserManager = { createPage: jest.fn(), getPage: jest.fn(), cleanup: jest.fn() } as any; navigationTools = new NavigationTools(mockBrowserManager); jest.clearAllMocks(); }); describe('navigateOpen', () => { it('should open URL successfully', async () => { mockBrowserManager.createPage.mockResolvedValue({ success: true, data: { pageId: 'test-page-id', url: 'https://example.com' } }); const result = await navigationTools.navigateOpen({ url: 'https://example.com', headless: true }); expect(result.success).toBe(true); if (result.success) { expect(result.data.pageId).toBe('test-page-id'); expect(result.data.url).toBe('https://example.com'); } expect(mockBrowserManager.createPage).toHaveBeenCalledWith({ url: 'https://example.com', headless: true, persistSessionKey: undefined, proxy: undefined }); }); it('should handle browser creation errors', async () => { mockBrowserManager.createPage.mockResolvedValue({ success: false, error: { code: 'nav_timeout', message: 'Navigation timeout' } }); const result = await navigationTools.navigateOpen({ url: 'https://invalid-url.com' }); expect(result.success).toBe(false); if (!result.success) { expect(result.error.code).toBe('nav_timeout'); } }); it('should pass session persistence parameters', async () => { mockBrowserManager.createPage.mockResolvedValue({ success: true, data: { pageId: 'test-page-id', url: 'https://example.com' } }); await navigationTools.navigateOpen({ url: 'https://example.com', persistSessionKey: 'test-session', proxy: 'http://proxy:8080' }); expect(mockBrowserManager.createPage).toHaveBeenCalledWith({ url: 'https://example.com', headless: undefined, persistSessionKey: 'test-session', proxy: 'http://proxy:8080' }); }); }); describe('navigateGoto', () => { beforeEach(() => { mockBrowserManager.getPage.mockReturnValue(mockPage); }); it('should navigate to URL successfully', async () => { const result = await navigationTools.navigateGoto({ pageId: 'test-page-id', url: 'https://example.com/page2' }); expect(result.success).toBe(true); if (result.success) { expect(result.data.url).toBe('https://example.com/page2'); } expect(mockPage.goto).toHaveBeenCalledWith('https://example.com/page2', { waitUntil: 'domcontentloaded', timeout: 30000 }); }); it('should handle page not found', async () => { mockBrowserManager.getPage.mockReturnValue(undefined); const result = await navigationTools.navigateGoto({ pageId: 'non-existent-page', url: 'https://example.com' }); expect(result.success).toBe(false); if (!result.success) { expect(result.error.code).toBe('page_not_found'); } }); it('should handle navigation timeout', async () => { mockPage.goto.mockRejectedValue(new Error('Navigation timeout')); const result = await navigationTools.navigateGoto({ pageId: 'test-page-id', url: 'https://slow-site.com' }); expect(result.success).toBe(false); if (!result.success) { expect(result.error.code).toBe('nav_timeout'); } }); it('should use custom timeout and wait strategy', async () => { await navigationTools.navigateGoto({ pageId: 'test-page-id', url: 'https://example.com', timeoutMs: 5000, waitUntil: 'networkidle' }); expect(mockPage.goto).toHaveBeenCalledWith('https://example.com', { waitUntil: 'networkidle', timeout: 5000 }); }); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nightweb/lc-browser-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server