Skip to main content
Glama

Playwright MCP Server

by BhanuTJ93
output.test.ts3.64 kB
import { SaveAsPdfTool } from '../../../tools/browser/output.js'; import { ToolContext } from '../../../tools/common/types.js'; import { Page, Browser } from 'playwright'; import { jest } from '@jest/globals'; import * as path from 'path'; // Mock path.resolve to test path handling jest.mock('path', () => ({ resolve: jest.fn().mockImplementation((dir, file) => `${dir}/${file}`) })); // Mock page functions const mockPdf = jest.fn().mockImplementation(() => Promise.resolve()); const mockIsClosed = jest.fn().mockReturnValue(false); // Mock the Page object with proper typing const mockPage = { pdf: mockPdf, isClosed: mockIsClosed } as unknown as Page; // Mock the browser const mockIsConnected = jest.fn().mockReturnValue(true); const mockBrowser = { isConnected: mockIsConnected } as unknown as Browser; // Mock the server const mockServer = { sendMessage: jest.fn() }; // Mock context const mockContext = { page: mockPage, browser: mockBrowser, server: mockServer } as ToolContext; describe('Browser Output Tools', () => { let saveAsPdfTool: SaveAsPdfTool; beforeEach(() => { jest.clearAllMocks(); saveAsPdfTool = new SaveAsPdfTool(mockServer); // Reset browser and page mocks mockIsConnected.mockReturnValue(true); mockIsClosed.mockReturnValue(false); }); describe('SaveAsPdfTool', () => { test('should save page as PDF with default options', async () => { const args = { outputPath: '/downloads' }; const result = await saveAsPdfTool.execute(args, mockContext); expect(mockPdf).toHaveBeenCalledWith({ path: '/downloads/page.pdf', format: 'A4', printBackground: true, margin: { top: '1cm', right: '1cm', bottom: '1cm', left: '1cm' } }); expect(result.isError).toBe(false); expect(result.content[0].text).toContain('Saved page as PDF'); }); test('should save page as PDF with custom options', async () => { const args = { outputPath: '/downloads', filename: 'custom.pdf', format: 'Letter', printBackground: false, margin: { top: '2cm', right: '2cm', bottom: '2cm', left: '2cm' } }; const result = await saveAsPdfTool.execute(args, mockContext); expect(mockPdf).toHaveBeenCalledWith({ path: '/downloads/custom.pdf', format: 'Letter', printBackground: false, margin: { top: '2cm', right: '2cm', bottom: '2cm', left: '2cm' } }); expect(result.isError).toBe(false); expect(result.content[0].text).toContain('Saved page as PDF'); }); test('should handle PDF generation errors', async () => { const args = { outputPath: '/downloads' }; // Mock PDF generation error mockPdf.mockImplementationOnce(() => Promise.reject(new Error('PDF generation failed'))); const result = await saveAsPdfTool.execute(args, mockContext); expect(mockPdf).toHaveBeenCalled(); expect(result.isError).toBe(true); expect(result.content[0].text).toContain('Operation failed'); }); test('should handle missing page', async () => { const args = { outputPath: '/downloads' }; const result = await saveAsPdfTool.execute(args, { server: mockServer } as ToolContext); expect(mockPdf).not.toHaveBeenCalled(); expect(result.isError).toBe(true); expect(result.content[0].text).toContain('Browser page not initialized'); }); }); });

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/BhanuTJ93/MCP'

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