codenuk_backend_mine/services/unified-tech-stack-service/test-user-integration.js
2025-10-10 08:56:39 +05:30

298 lines
8.8 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
/**
* Test script for unified tech stack recommendations with user authentication
* Tests both anonymous and authenticated user scenarios
*/
const axios = require('axios');
const UNIFIED_SERVICE_URL = 'http://localhost:8013';
const USER_AUTH_URL = 'http://localhost:8011';
const COMPREHENSIVE_ENDPOINT = '/api/unified/comprehensive-recommendations';
// Test data
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']
}
],
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'
}
]
},
projectName: 'E-commerce Platform',
projectType: 'E-commerce',
templateId: 'test-template-123',
budget: 15000,
domain: 'ecommerce',
includeClaude: true,
includeTemplateBased: true,
includeDomainBased: true
};
async function loginUser() {
try {
console.log('🔐 Logging in test user...');
const response = await axios.post(`${USER_AUTH_URL}/api/auth/login`, {
email: 'test@tech4biz.com',
password: 'admin123'
}, {
timeout: 10000,
headers: {
'Content-Type': 'application/json'
}
});
if (response.data.success) {
console.log('✅ User logged in successfully');
return response.data.data.access_token;
} else {
console.log('❌ Login failed:', response.data.message);
return null;
}
} catch (error) {
console.log('❌ Login error:', error.response?.data?.message || error.message);
return null;
}
}
async function testAnonymousRecommendations() {
console.log('\n🧪 Testing Anonymous Recommendations');
console.log('=' .repeat(50));
try {
const response = await axios.post(
`${UNIFIED_SERVICE_URL}${COMPREHENSIVE_ENDPOINT}`,
testRequest,
{
timeout: 60000,
headers: {
'Content-Type': 'application/json'
}
}
);
console.log('✅ Anonymous recommendations received successfully!');
console.log('📊 Response Status:', response.status);
if (response.data.success) {
console.log('✅ Success: true');
console.log('📝 Message:', response.data.message);
console.log('👤 User ID in response:', response.data.data?.metadata?.userId || 'null (anonymous)');
} else {
console.log('❌ Success: false');
console.log('Error:', response.data.error);
}
} catch (error) {
console.log('❌ Anonymous 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));
}
}
}
async function testAuthenticatedRecommendations(accessToken) {
console.log('\n🔐 Testing Authenticated User Recommendations');
console.log('=' .repeat(50));
try {
const response = await axios.post(
`${UNIFIED_SERVICE_URL}${COMPREHENSIVE_ENDPOINT}`,
testRequest,
{
timeout: 60000,
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`
}
}
);
console.log('✅ Authenticated recommendations received successfully!');
console.log('📊 Response Status:', response.status);
if (response.data.success) {
console.log('✅ Success: true');
console.log('📝 Message:', response.data.message);
console.log('👤 User ID in response:', response.data.data?.metadata?.userId || 'null');
} else {
console.log('❌ Success: false');
console.log('Error:', response.data.error);
}
} catch (error) {
console.log('❌ Authenticated 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));
}
}
}
async function testUserStats(accessToken) {
console.log('\n📊 Testing User Statistics');
console.log('=' .repeat(50));
try {
const response = await axios.get(
`${UNIFIED_SERVICE_URL}/api/unified/user/stats`,
{
timeout: 10000,
headers: {
'Authorization': `Bearer ${accessToken}`
}
}
);
console.log('✅ User stats retrieved successfully!');
console.log('📊 Response Status:', response.status);
if (response.data.success) {
console.log('✅ Success: true');
console.log('📊 Stats:', JSON.stringify(response.data.data, null, 2));
} else {
console.log('❌ Success: false');
console.log('Error:', response.data.error);
}
} catch (error) {
console.log('❌ User stats 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));
}
}
}
async function testUserHistory(accessToken) {
console.log('\n📚 Testing User Recommendation History');
console.log('=' .repeat(50));
try {
const response = await axios.get(
`${UNIFIED_SERVICE_URL}/api/unified/user/recommendations`,
{
timeout: 10000,
headers: {
'Authorization': `Bearer ${accessToken}`
}
}
);
console.log('✅ User history retrieved successfully!');
console.log('📊 Response Status:', response.status);
if (response.data.success) {
console.log('✅ Success: true');
console.log('📚 History count:', response.data.data?.length || 0);
} else {
console.log('❌ Success: false');
console.log('Error:', response.data.error);
}
} catch (error) {
console.log('❌ User history 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));
}
}
}
async function testServiceHealth() {
console.log('\n🏥 Testing Service Health');
console.log('=' .repeat(50));
try {
const response = await axios.get(`${UNIFIED_SERVICE_URL}/health`, { timeout: 5000 });
console.log('✅ Unified service is healthy');
console.log(` Status: ${response.data.status}`);
console.log(` Version: ${response.data.version}`);
// Test status endpoint
const statusResponse = await axios.get(`${UNIFIED_SERVICE_URL}/api/unified/status`, { timeout: 5000 });
console.log('✅ Service status endpoint working');
console.log(` Overall Status: ${statusResponse.data.data?.overallStatus}`);
console.log(` Template Manager: ${statusResponse.data.data?.templateManager?.status}`);
console.log(` Tech Stack Selector: ${statusResponse.data.data?.techStackSelector?.status}`);
console.log(` User Auth: ${statusResponse.data.data?.userAuth?.status}`);
} catch (error) {
console.log('❌ Service health check failed!');
console.log('Error:', error.message);
}
}
async function runAllTests() {
console.log('🧪 Testing Unified Tech Stack Service with User Authentication');
console.log('=' .repeat(70));
// Test service health first
await testServiceHealth();
// Test anonymous recommendations
await testAnonymousRecommendations();
// Login and test authenticated features
const accessToken = await loginUser();
if (accessToken) {
await testAuthenticatedRecommendations(accessToken);
await testUserStats(accessToken);
await testUserHistory(accessToken);
} else {
console.log('\n⚠ Skipping authenticated tests - login failed');
}
console.log('\n🏁 All tests completed!');
}
// Run the tests
if (require.main === module) {
runAllTests().catch(console.error);
}
module.exports = { runAllTests };