#!/usr/bin/env node /** * Test script for comprehensive tech stack recommendations integration * Tests the new endpoint that combines Claude AI, template-based, and domain-based recommendations */ const axios = require('axios'); const UNIFIED_SERVICE_URL = 'http://localhost:8013'; const COMPREHENSIVE_ENDPOINT = '/api/unified/comprehensive-recommendations'; // Test data matching the frontend request structure const testRequest = { template: { id: 'test-template-123', title: 'E-commerce Platform', description: 'A comprehensive e-commerce solution', category: 'E-commerce', type: 'web-app' }, features: [ { id: 'feature-1', name: 'User Authentication', description: 'Secure user login and registration system', feature_type: 'essential', complexity: 'medium', business_rules: ['Users must verify email', 'Password must meet security requirements'], technical_requirements: ['JWT tokens', 'Password hashing', 'Email verification'] }, { id: 'feature-2', name: 'Product Catalog', description: 'Product listing and search functionality', feature_type: 'essential', complexity: 'medium', business_rules: ['Products must have valid pricing', 'Search must be fast'], technical_requirements: ['Database indexing', 'Search optimization'] }, { id: 'feature-3', name: 'Payment Processing', description: 'Secure payment handling', feature_type: 'essential', complexity: 'high', business_rules: ['PCI compliance required', 'Multiple payment methods'], technical_requirements: ['SSL encryption', 'Payment gateway integration'] } ], businessContext: { questions: [ { question: 'What is your target audience?', answer: 'Small to medium businesses selling products online' }, { question: 'What is your expected user volume?', answer: 'We expect around 10,000 users initially, growing to 100,000 within a year' }, { question: 'What are your security requirements?', answer: 'High security requirements due to handling payment information and customer data' }, { question: 'What is your budget range?', answer: 'Budget is around $15,000 for initial development and infrastructure' } ] }, projectName: 'E-commerce Platform', projectType: 'E-commerce', templateId: 'test-template-123', budget: 15000, domain: 'ecommerce', includeClaude: true, includeTemplateBased: true, includeDomainBased: true }; async function testComprehensiveRecommendations() { console.log('๐Ÿงช Testing Comprehensive Tech Stack Recommendations Integration'); console.log('=' .repeat(60)); // Check if service is running try { const healthResponse = await axios.get(`${UNIFIED_SERVICE_URL}/health`, { timeout: 5000 }); console.log('โœ… Unified service is running'); console.log(` Status: ${healthResponse.data.status}`); console.log(` Version: ${healthResponse.data.version}`); } catch (error) { console.log('โŒ Unified service is not running or not accessible'); console.log(' Make sure to start the service with: npm start'); console.log(' Service should be running on port 8013'); return; } try { console.log('๐Ÿ“ก Making request to unified service...'); console.log(`URL: ${UNIFIED_SERVICE_URL}${COMPREHENSIVE_ENDPOINT}`); console.log(`Template: ${testRequest.template.title}`); console.log(`Features: ${testRequest.features.length}`); console.log(`Business Questions: ${testRequest.businessContext.questions.length}`); console.log(''); const response = await axios.post( `${UNIFIED_SERVICE_URL}${COMPREHENSIVE_ENDPOINT}`, testRequest, { timeout: 60000, // 60 seconds timeout headers: { 'Content-Type': 'application/json' } } ); console.log('โœ… Response received successfully!'); console.log('๐Ÿ“Š Response Status:', response.status); console.log('๐Ÿ“ˆ Response Structure:'); console.log(''); // Analyze response structure const data = response.data; if (data.success) { console.log('โœ… Success: true'); console.log('๐Ÿ“ Message:', data.message); console.log(''); // Check Claude recommendations if (data.data.claude?.success) { console.log('๐Ÿค– Claude AI Recommendations: โœ… Available'); if (data.data.claude.data?.claude_recommendations) { const claudeRecs = data.data.claude.data.claude_recommendations; console.log(' - Frontend:', claudeRecs.technology_recommendations?.frontend?.framework || 'N/A'); console.log(' - Backend:', claudeRecs.technology_recommendations?.backend?.framework || 'N/A'); console.log(' - Database:', claudeRecs.technology_recommendations?.database?.primary || 'N/A'); } } else { console.log('๐Ÿค– Claude AI Recommendations: โŒ Failed'); console.log(' Error:', data.data.claude?.error || 'Unknown error'); if (data.data.claude?.error === 'Claude API key not configured') { console.log(' ๐Ÿ’ก To enable Claude AI recommendations:'); console.log(' 1. Get your API key from: https://console.anthropic.com/'); console.log(' 2. Add CLAUDE_API_KEY=your_key_here to .env file'); console.log(' 3. Restart the service'); } } // Check template-based recommendations if (data.data.templateBased?.success) { console.log('๐Ÿ“Š Template-based Recommendations: โœ… Available'); console.log(' - Permutations:', data.data.templateBased.data?.permutations?.success ? 'โœ…' : 'โŒ'); console.log(' - Combinations:', data.data.templateBased.data?.combinations?.success ? 'โœ…' : 'โŒ'); } else { console.log('๐Ÿ“Š Template-based Recommendations: โŒ Failed'); console.log(' Error:', data.data.templateBased?.error || 'Unknown error'); } // Check domain-based recommendations if (data.data.domainBased?.success) { console.log('๐Ÿข Domain-based Recommendations: โœ… Available'); console.log(' - Recommendations Count:', data.data.domainBased.data?.data?.recommendations?.length || 0); } else { console.log('๐Ÿข Domain-based Recommendations: โŒ Failed'); console.log(' Error:', data.data.domainBased?.error || 'Unknown error'); } // Check unified recommendations if (data.data.unified) { console.log('๐Ÿ”— Unified Recommendations: โœ… Available'); console.log(' - Approach:', data.data.unified.approach || 'N/A'); console.log(' - Confidence:', data.data.unified.confidence || 'N/A'); console.log(' - Tech Stacks Count:', data.data.unified.techStacks?.length || 0); } // Check analysis if (data.data.analysis) { console.log('๐Ÿ“ˆ Analysis: โœ… Available'); console.log(' - Comprehensive Score:', data.data.analysis.comparison?.comprehensiveScore || 'N/A'); console.log(' - Recommendation Quality:', data.data.analysis.comparison?.recommendationQuality || 'N/A'); } } else { console.log('โŒ Success: false'); console.log('Error:', data.error || 'Unknown error'); } } catch (error) { console.log('โŒ Test failed!'); console.log('Error:', error.message); if (error.response) { console.log('Response Status:', error.response.status); console.log('Response Data:', JSON.stringify(error.response.data, null, 2)); } else if (error.request) { console.log('No response received. Is the unified service running?'); console.log('Make sure to start the service with: npm start'); } } console.log(''); console.log('๐Ÿ Test completed'); } // Run the test if (require.main === module) { testComprehensiveRecommendations().catch(console.error); } module.exports = { testComprehensiveRecommendations };