Skip to main content
Glama

OpenTK Model Context Protocol Server

by r-huijts
endpoint-integration.test.ts6.02 kB
import { ApiService } from '../services/api.js'; import { extractDocumentLink } from '../utils/html-parser.js'; // Define the base URL const BASE_URL = 'https://berthub.eu/tkconv'; // Create an instance of the API service const apiService = new ApiService(); // Skip these tests in CI environments const itLive = process.env.CI ? it.skip : it; // Set a longer timeout for these tests since they hit real endpoints // This test suite is for testing actual API endpoints // These tests will be skipped by default and should be run manually // when you want to check if the endpoints are working describe('Endpoint Integration Tests', () => { describe('ApiService Endpoints', () => { itLive('should fetch search results', async () => { const result = await apiService.search<{results: any[], error?: string}>('kunstmatige intelligentie'); // Check that we get a results array without an error expect(result).toHaveProperty('results'); expect(Array.isArray(result.results)).toBe(true); expect(result.error).toBeUndefined(); }, 30000); itLive('should handle complex search queries with multiple terms', async () => { const result = await apiService.search<{results: any[], error?: string}>('kunstmatige intelligentie AI'); // Check that we get search results without an error expect(result).toHaveProperty('results'); expect(Array.isArray(result.results)).toBe(true); expect(result.error).toBeUndefined(); }, 30000); itLive('should handle exact phrase search with quotes', async () => { const result = await apiService.search<{results: any[], error?: string}>("\"kunstmatige intelligentie\""); // Check that we get search results without an error expect(result).toHaveProperty('results'); expect(Array.isArray(result.results)).toBe(true); expect(result.error).toBeUndefined(); }, 30000); itLive('should fetch document HTML', async () => { const html = await apiService.fetchHtml('/document.html?nummer=2024D39058'); // Check that we get HTML and can extract a document link expect(typeof html).toBe('string'); expect(html).toContain('<!DOCTYPE html>'); const documentLink = extractDocumentLink(html); expect(documentLink).not.toBeNull(); }, 30000); itLive('should download a document', async () => { // First get the document page to extract the link const html = await apiService.fetchHtml('/document.html?nummer=2024D39058'); const documentLink = extractDocumentLink(html); if (!documentLink) { throw new Error('Could not extract document link'); } // Now download the actual document const { data, contentType } = await apiService.fetchBinary(`/${documentLink}`); // Check that we get binary data with the correct content type expect(data.byteLength).toBeGreaterThan(0); expect(contentType).toBe('application/pdf'); }, 30000); itLive('should fetch a sitemap', async () => { const urls = await apiService.fetchSitemap('sitemap-2024.txt'); // Check that we get an array of URLs expect(Array.isArray(urls)).toBe(true); expect(urls.length).toBeGreaterThan(0); expect(urls[0]).toMatch(/^https?:/); }, 30000); itLive('should resolve an external reference', async () => { const url = await apiService.resolveExternal('2024D39058'); // Check that we get a URL expect(typeof url).toBe('string'); expect(url.length).toBeGreaterThan(0); }, 30000); }); describe('Parliament Endpoints', () => { itLive('should fetch MPs from tkconv API', async () => { const persons = await apiService.getPersons(); // Check that we get an array of MPs expect(Array.isArray(persons)).toBe(true); expect(persons.length).toBeGreaterThan(0); // Check that each MP has the expected properties if (persons.length > 0) { const firstPerson = persons[0]; expect(firstPerson).toHaveProperty('Id'); expect(firstPerson).toHaveProperty('Fullname'); expect(firstPerson).toHaveProperty('Fractie'); } }, 30000); itLive('should fetch a single MP from tkconv API', async () => { // Try to fetch MP with ID 49108 (a valid ID) const person = await apiService.getPerson(49108); // Check that we get an object with expected properties if (person) { expect(typeof person).toBe('object'); expect(person).toHaveProperty('Id'); expect(person).toHaveProperty('Fullname'); } }, 30000); }); }); // Create a test report that can be used to check which endpoints are working describe('Endpoint Status Report', () => { // This test just generates a report and always passes it('generates a report of endpoint statuses', () => { const endpoints = [ { name: 'Search API', url: `${BASE_URL}/search`, method: 'POST' }, { name: 'Document HTML', url: `${BASE_URL}/document.html?nummer=2024D39058`, method: 'GET' }, { name: 'Document Download', url: `${BASE_URL}/getraw/2024D39058`, method: 'GET' }, { name: 'Sitemap', url: `${BASE_URL}/sitemap-2024.txt`, method: 'GET' }, { name: 'External Reference', url: `${BASE_URL}/op/2024D39058`, method: 'GET' }, { name: 'Parliament Members', url: `${BASE_URL}/kamerleden.html`, method: 'GET' }, { name: 'Single Parliament Member', url: `${BASE_URL}/persoon.html?nummer=49108`, method: 'GET' }, ]; console.error('\nEndpoint Status Report:'); console.error('====================='); console.error('To check if these endpoints are working, run the integration tests with:'); console.error('npm test -- -t "Endpoint Integration Tests" --testTimeout=30000'); console.error('\nEndpoints to test:'); endpoints.forEach(endpoint => { console.error(`- ${endpoint.name}: ${endpoint.method} ${endpoint.url}`); }); // This test always passes expect(true).toBe(true); }); });

Latest Blog Posts

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/r-huijts/opentk-mcp'

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