Skip to main content
Glama

Playwright MCP Server

by pvinis
requests.test.ts6.96 kB
import { GetRequestTool, PostRequestTool, PutRequestTool, PatchRequestTool, DeleteRequestTool } from '../../../tools/api/requests.js'; import { ToolContext } from '../../../tools/common/types.js'; import { APIRequestContext } from 'playwright'; import { jest } from '@jest/globals'; // Mock response const mockStatus200 = jest.fn().mockReturnValue(200); const mockStatus201 = jest.fn().mockReturnValue(201); const mockStatus204 = jest.fn().mockReturnValue(204); const mockText = jest.fn().mockImplementation(() => Promise.resolve('{"success": true}')); const mockStatusText = jest.fn().mockReturnValue('OK'); const mockResponse = { status: mockStatus200, statusText: mockStatusText, text: mockText }; // Mock API context const mockGet = jest.fn().mockImplementation(() => Promise.resolve(mockResponse)); const mockPost = jest.fn().mockImplementation(() => Promise.resolve({...mockResponse, status: mockStatus201})); const mockPut = jest.fn().mockImplementation(() => Promise.resolve(mockResponse)); const mockPatch = jest.fn().mockImplementation(() => Promise.resolve(mockResponse)); const mockDelete = jest.fn().mockImplementation(() => Promise.resolve({...mockResponse, status: mockStatus204})); const mockDispose = jest.fn().mockImplementation(() => Promise.resolve()); const mockApiContext = { get: mockGet, post: mockPost, put: mockPut, patch: mockPatch, delete: mockDelete, dispose: mockDispose } as unknown as APIRequestContext; // Mock server const mockServer = { sendMessage: jest.fn() }; // Mock context const mockContext = { apiContext: mockApiContext, server: mockServer } as ToolContext; describe('API Request Tools', () => { let getRequestTool: GetRequestTool; let postRequestTool: PostRequestTool; let putRequestTool: PutRequestTool; let patchRequestTool: PatchRequestTool; let deleteRequestTool: DeleteRequestTool; beforeEach(() => { jest.clearAllMocks(); getRequestTool = new GetRequestTool(mockServer); postRequestTool = new PostRequestTool(mockServer); putRequestTool = new PutRequestTool(mockServer); patchRequestTool = new PatchRequestTool(mockServer); deleteRequestTool = new DeleteRequestTool(mockServer); }); describe('GetRequestTool', () => { test('should make a GET request', async () => { const args = { url: 'https://api.example.com' }; const result = await getRequestTool.execute(args, mockContext); expect(mockGet).toHaveBeenCalledWith('https://api.example.com'); expect(result.isError).toBe(false); expect(result.content[0].text).toContain('GET request to'); }); test('should handle GET request errors', async () => { const args = { url: 'https://api.example.com' }; // Mock a request error mockGet.mockImplementationOnce(() => Promise.reject(new Error('Request failed'))); const result = await getRequestTool.execute(args, mockContext); expect(mockGet).toHaveBeenCalledWith('https://api.example.com'); expect(result.isError).toBe(true); expect(result.content[0].text).toContain('API operation failed'); }); test('should handle missing API context', async () => { const args = { url: 'https://api.example.com' }; const result = await getRequestTool.execute(args, { server: mockServer } as ToolContext); expect(mockGet).not.toHaveBeenCalled(); expect(result.isError).toBe(true); expect(result.content[0].text).toContain('API context not initialized'); }); }); describe('PostRequestTool', () => { test('should make a POST request without token', async () => { const args = { url: 'https://api.example.com', value: '{"data": "test"}' }; const result = await postRequestTool.execute(args, mockContext); expect(mockPost).toHaveBeenCalledWith('https://api.example.com', { data: { data: "test" }, headers: { 'Content-Type': 'application/json' } }); expect(result.isError).toBe(false); expect(result.content[0].text).toContain('POST request to'); }); test('should make a POST request with Bearer token', async () => { const args = { url: 'https://api.example.com', value: '{"data": "test"}', token: 'test-token' }; const result = await postRequestTool.execute(args, mockContext); expect(mockPost).toHaveBeenCalledWith('https://api.example.com', { data: { data: "test" }, headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer test-token' } }); expect(result.isError).toBe(false); expect(result.content[0].text).toContain('POST request to'); }); test('should make a POST request with Bearer token and custom headers', async () => { const args = { url: 'https://api.example.com', value: '{"data": "test"}', token: 'test-token', headers: { 'X-Custom-Header': 'custom-value' } }; const result = await postRequestTool.execute(args, mockContext); expect(mockPost).toHaveBeenCalledWith('https://api.example.com', { data: { data: "test" }, headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer test-token', 'X-Custom-Header': 'custom-value' } }); expect(result.isError).toBe(false); expect(result.content[0].text).toContain('POST request to'); }); }); describe('PutRequestTool', () => { test('should make a PUT request', async () => { const args = { url: 'https://api.example.com', value: '{"data": "test"}' }; const result = await putRequestTool.execute(args, mockContext); expect(mockPut).toHaveBeenCalledWith('https://api.example.com', { data: args.value }); expect(result.isError).toBe(false); expect(result.content[0].text).toContain('PUT request to'); }); }); describe('PatchRequestTool', () => { test('should make a PATCH request', async () => { const args = { url: 'https://api.example.com', value: '{"data": "test"}' }; const result = await patchRequestTool.execute(args, mockContext); expect(mockPatch).toHaveBeenCalledWith('https://api.example.com', { data: args.value }); expect(result.isError).toBe(false); expect(result.content[0].text).toContain('PATCH request to'); }); }); describe('DeleteRequestTool', () => { test('should make a DELETE request', async () => { const args = { url: 'https://api.example.com/1' }; const result = await deleteRequestTool.execute(args, mockContext); expect(mockDelete).toHaveBeenCalledWith('https://api.example.com/1'); expect(result.isError).toBe(false); expect(result.content[0].text).toContain('DELETE request to'); }); }); });

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/pvinis/mcp-playwright-stealth'

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