test-community-search.jsā¢4.57 kB
#!/usr/bin/env node
// Test script for the new community search functionality
// Tests both search and detailed post retrieval
import { searchCommunityBestMatch, getCommunityPostByUrl } from './dist/src/lib/communityBestMatch.js';
async function testCommunitySearch() {
console.log('š Testing SAP Community Search with HTML Scraping\n');
const testQueries = [
'odata cache',
// 'CAP authentication',
// 'odata binding',
// 'fiori elements'
];
for (const query of testQueries) {
console.log(`\nš Testing query: "${query}"`);
console.log('=' .repeat(50));
try {
const results = await searchCommunityBestMatch(query, {
includeBlogs: true,
limit: 5,
userAgent: 'SAP-Docs-MCP-Test/1.0'
});
if (results.length === 0) {
console.log('ā No results found');
continue;
}
console.log(`ā
Found ${results.length} results:`);
results.forEach((result, index) => {
console.log(`\n${index + 1}. ${result.title}`);
console.log(` URL: ${result.url}`);
console.log(` Author: ${result.author || 'Unknown'}`);
console.log(` Published: ${result.published || 'Unknown'}`);
console.log(` Likes: ${result.likes || 0}`);
console.log(` Snippet: ${result.snippet ? result.snippet.substring(0, 100) + '...' : 'No snippet'}`);
console.log(` Tags: ${result.tags?.join(', ') || 'None'}`);
console.log(` Post ID: ${result.postId || 'Not extracted'}`);
// Verify post ID extraction
if (result.postId) {
console.log(` ā
Post ID extracted: ${result.postId}`);
} else {
console.log(` ā ļø Post ID not extracted from URL: ${result.url}`);
}
});
// Test detailed post retrieval for the first result
if (results.length > 0) {
console.log(`\nš Testing detailed post retrieval for: "${results[0].title}"`);
console.log('-'.repeat(50));
try {
const postContent = await getCommunityPostByUrl(results[0].url, 'SAP-Docs-MCP-Test/1.0');
if (postContent) {
console.log('ā
Successfully retrieved full post content:');
console.log(postContent.substring(0, 500) + '...\n');
} else {
console.log('ā Failed to retrieve full post content');
}
} catch (error) {
console.log(`ā Error retrieving post content: ${error.message}`);
}
}
} catch (error) {
console.log(`ā Error searching for "${query}": ${error.message}`);
}
// Add delay between requests to be respectful
await new Promise(resolve => setTimeout(resolve, 2000));
}
}
async function testSpecificPost() {
console.log('\nšÆ Testing specific post retrieval');
console.log('=' .repeat(50));
// Test with the known SAP Community URL from your example
const testUrl = 'https://community.sap.com/t5/technology-blog-posts-by-sap/fiori-cache-maintenance/ba-p/13961398';
try {
console.log(`Testing URL: ${testUrl}`);
console.log(`Expected Post ID: 13961398`);
const content = await getCommunityPostByUrl(testUrl, 'SAP-Docs-MCP-Test/1.0');
if (content) {
console.log('ā
Successfully retrieved content:');
console.log(content.substring(0, 800) + '...');
// Verify the content contains expected elements
if (content.includes('FIORI Cache Maintenance')) {
console.log('ā
Title extraction successful');
}
if (content.includes('MarkNed')) {
console.log('ā
Author extraction successful');
}
if (content.includes('SMICM')) {
console.log('ā
Content extraction successful');
}
} else {
console.log('ā No content retrieved');
}
} catch (error) {
console.log(`ā Error: ${error.message}`);
}
}
async function main() {
console.log('š Starting SAP Community Search Tests');
console.log('=====================================');
try {
await testCommunitySearch();
await testSpecificPost();
console.log('\nā
All tests completed!');
} catch (error) {
console.error('ā Test suite failed:', error);
process.exit(1);
}
}
// Handle graceful shutdown
process.on('SIGINT', () => {
console.log('\nš Test interrupted by user');
process.exit(0);
});
// Run the tests
main().catch(error => {
console.error('š„ Unexpected error:', error);
process.exit(1);
});