Skip to main content
Glama
page.svelte.test.ts5.08 kB
import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { render, screen } from '@testing-library/svelte' import Page from './+page.svelte' // Mock the global fetch function const mockFetch = vi.fn() // Mock the logging functions to prevent noise in test output vi.mock('$lib/log', () => ({ logErrorAlways: vi.fn(), logAlways: vi.fn(), log: vi.fn() })) // Mock preset sizes data for tests const mockPresetSizes = { 'svelte-complete': Promise.resolve({ key: 'svelte-complete', sizeKb: 120 }), 'svelte-small': Promise.resolve({ key: 'svelte-small', sizeKb: 50 }), 'svelte-medium': Promise.resolve({ key: 'svelte-medium', sizeKb: 80 }), 'sveltekit-complete': Promise.resolve({ key: 'sveltekit-complete', sizeKb: 100 }), 'sveltekit-small': Promise.resolve({ key: 'sveltekit-small', sizeKb: 40 }), 'sveltekit-medium': Promise.resolve({ key: 'sveltekit-medium', sizeKb: 70 }), 'svelte-distilled': Promise.resolve({ key: 'svelte-distilled', sizeKb: 30 }), 'sveltekit-distilled': Promise.resolve({ key: 'sveltekit-distilled', sizeKb: 25 }), 'svelte-complete-distilled': Promise.resolve({ key: 'svelte-complete-distilled', sizeKb: 45 }) } // Mock distilled versions data for tests const mockDistilledVersions = { 'svelte-complete': Promise.resolve({ key: 'svelte-complete', versions: [] }), 'svelte-small': Promise.resolve({ key: 'svelte-small', versions: [] }), 'svelte-medium': Promise.resolve({ key: 'svelte-medium', versions: [] }), 'sveltekit-complete': Promise.resolve({ key: 'sveltekit-complete', versions: [] }), 'sveltekit-small': Promise.resolve({ key: 'sveltekit-small', versions: [] }), 'sveltekit-medium': Promise.resolve({ key: 'sveltekit-medium', versions: [] }), 'svelte-distilled': Promise.resolve({ key: 'svelte-distilled', versions: [ { filename: 'svelte-distilled-2024-01-15.md', date: '2024-01-15', path: '/api/preset-content/svelte-distilled/2024-01-15', sizeKb: 30 } ] }), 'sveltekit-distilled': Promise.resolve({ key: 'sveltekit-distilled', versions: [ { filename: 'sveltekit-distilled-2024-01-15.md', date: '2024-01-15', path: '/api/preset-content/sveltekit-distilled/2024-01-15', sizeKb: 25 } ] }), 'svelte-complete-distilled': Promise.resolve({ key: 'svelte-complete-distilled', versions: [ { filename: 'svelte-complete-distilled-2024-01-15.md', date: '2024-01-15', path: '/api/preset-content/svelte-complete-distilled/2024-01-15', sizeKb: 45 } ] }) } // Complete mock data object that matches the new PageData type const mockPageData = { isOldHost: false, // Add the missing isOldHost property presetSizes: mockPresetSizes, distilledVersions: mockDistilledVersions } describe('/+page.svelte', () => { beforeEach(() => { // Mock fetch globally vi.stubGlobal('fetch', mockFetch) // Mock successful responses for distilled versions API by default mockFetch.mockResolvedValue({ ok: true, json: () => Promise.resolve([]) // Return empty array for distilled versions }) }) afterEach(() => { vi.restoreAllMocks() }) test('should render main heading', () => { render(Page, { data: mockPageData }) expect(screen.getByRole('heading', { level: 1 })).toHaveTextContent( 'Svelte & SvelteKit documentation for AI assistants' ) }) test('should render MCP section', () => { render(Page, { data: mockPageData }) expect(screen.getByText('MCP Server')).toBeInTheDocument() }) test('should render preset sections', () => { render(Page, { data: mockPageData }) expect(screen.getByText('Combined presets')).toBeInTheDocument() expect(screen.getByText('Svelte 5')).toBeInTheDocument() expect(screen.getByText('SvelteKit')).toBeInTheDocument() }) test('should handle distilled versions loading gracefully', async () => { // Mock the fetch to return some mock distilled versions mockFetch.mockResolvedValueOnce({ ok: true, json: () => Promise.resolve([ { filename: 'svelte-complete-distilled-2024-01-15.md', date: '2024-01-15', path: '/api/preset-content/svelte-complete-distilled/2024-01-15', sizeKb: 150 } ]) }) render(Page, { data: mockPageData }) // The component should render without throwing errors expect(screen.getByText('Combined presets')).toBeInTheDocument() }) test('should handle failed distilled versions API calls gracefully', async () => { // Create mock data with failed promises const mockPageDataWithFailures = { isOldHost: false, // Add the missing isOldHost property here too presetSizes: mockPresetSizes, distilledVersions: { ...mockDistilledVersions, 'svelte-complete-distilled': Promise.reject(new Error('API Error')) } } render(Page, { data: mockPageDataWithFailures }) // The component should still render even if API calls fail expect(screen.getByText('Combined presets')).toBeInTheDocument() expect(screen.getByText('Svelte 5')).toBeInTheDocument() expect(screen.getByText('SvelteKit')).toBeInTheDocument() }) })

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/khromov/llmctx'

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