Skip to main content
Glama
joelmnz

Article Manager MCP Server

by joelmnz
test-error-handling.tsβ€’5.26 kB
#!/usr/bin/env bun /** * Test script to verify database error handling and constraint validation */ import { handleDatabaseError, DatabaseServiceError, DatabaseErrorType, PG_ERROR_CODES } from '../src/backend/services/databaseErrors.js'; import { databaseConstraintService } from '../src/backend/services/databaseConstraints.js'; import { DatabaseError } from 'pg'; async function testErrorHandling() { console.log('πŸ§ͺ Testing Database Error Handling...\n'); // Test 1: Handle PostgreSQL unique violation console.log('Test 1: PostgreSQL Unique Violation'); try { const pgError = new DatabaseError('duplicate key value violates unique constraint "articles_slug_key"', 0, 'error'); pgError.code = PG_ERROR_CODES.UNIQUE_VIOLATION; pgError.constraint = 'articles_slug_key'; const handled = handleDatabaseError(pgError); console.log('βœ“ Error Type:', handled.type); console.log('βœ“ User Message:', handled.userMessage); console.log('βœ“ Code:', handled.code); } catch (error) { console.error('βœ— Test 1 failed:', error); } console.log('\n' + '='.repeat(50) + '\n'); // Test 2: Validate article data console.log('Test 2: Article Data Validation'); try { // Test valid data await databaseConstraintService.validateArticleData({ title: 'Test Article', slug: 'test-article', content: 'This is test content.', folder: 'test-folder' }); console.log('βœ“ Valid article data passed validation'); // Test invalid slug try { await databaseConstraintService.validateArticleData({ slug: 'INVALID_SLUG_WITH_CAPS' }); console.error('βœ— Invalid slug should have failed validation'); } catch (error) { if (error instanceof DatabaseServiceError) { console.log('βœ“ Invalid slug correctly rejected:', error.userMessage); } else { console.error('βœ— Unexpected error type:', error); } } // Test empty title try { await databaseConstraintService.validateArticleData({ title: '' }); console.error('βœ— Empty title should have failed validation'); } catch (error) { if (error instanceof DatabaseServiceError) { console.log('βœ“ Empty title correctly rejected:', error.userMessage); } else { console.error('βœ— Unexpected error type:', error); } } } catch (error) { console.error('βœ— Test 2 failed:', error); } console.log('\n' + '='.repeat(50) + '\n'); // Test 3: Validate version data console.log('Test 3: Version Data Validation'); try { // Test invalid version ID try { await databaseConstraintService.validateVersionData({ versionId: -1 }); console.error('βœ— Invalid version ID should have failed validation'); } catch (error) { if (error instanceof DatabaseServiceError) { console.log('βœ“ Invalid version ID correctly rejected:', error.userMessage); } else { console.error('βœ— Unexpected error type:', error); } } // Test long message try { await databaseConstraintService.validateVersionData({ message: 'x'.repeat(1001) // Exceeds 1000 character limit }); console.error('βœ— Long message should have failed validation'); } catch (error) { if (error instanceof DatabaseServiceError) { console.log('βœ“ Long message correctly rejected:', error.userMessage); } else { console.error('βœ— Unexpected error type:', error); } } } catch (error) { console.error('βœ— Test 3 failed:', error); } console.log('\n' + '='.repeat(50) + '\n'); // Test 4: Validate embedding data console.log('Test 4: Embedding Data Validation'); try { // Test valid vector await databaseConstraintService.validateEmbeddingData({ chunkId: 'test-chunk', chunkIndex: 0, textContent: 'Test content', vector: new Array(512).fill(0.1) // Valid 512-dimension vector }); console.log('βœ“ Valid embedding data passed validation'); // Test invalid vector dimension try { await databaseConstraintService.validateEmbeddingData({ vector: new Array(100).fill(0.1) // Invalid dimension }); console.error('βœ— Invalid vector dimension should have failed validation'); } catch (error) { if (error instanceof DatabaseServiceError) { console.log('βœ“ Invalid vector dimension correctly rejected:', error.userMessage); } else { console.error('βœ— Unexpected error type:', error); } } // Test empty chunk ID try { await databaseConstraintService.validateEmbeddingData({ chunkId: '' }); console.error('βœ— Empty chunk ID should have failed validation'); } catch (error) { if (error instanceof DatabaseServiceError) { console.log('βœ“ Empty chunk ID correctly rejected:', error.userMessage); } else { console.error('βœ— Unexpected error type:', error); } } } catch (error) { console.error('βœ— Test 4 failed:', error); } console.log('\nπŸŽ‰ Error handling and constraint validation tests completed!'); } // Run tests testErrorHandling().catch(console.error);

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/joelmnz/mcp-markdown-manager'

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