@tasolutions/express-core
Version:
All libs for express
230 lines (198 loc) • 8.83 kB
JavaScript
const axios = require('axios');
const BASE_URL = 'http://localhost:9999';
// Test data từ database thực tế
const TEST_DATA = {
recordId: '6807407609866c28b1545074',
templateId: '682ef6a948ea0370e767f50c',
templateKey: 'contract-template', // Sẽ được thêm vào template
collection: 'addresses'
};
async function testDocumentExportAPIs() {
console.log('🧪 Testing Document Export APIs...\n');
try {
// Test 1: API gộp mới - Export theo Template ID
console.log('📋 Test 1: New Unified API - Export by Template ID');
console.log(`GET /v0/${TEST_DATA.collection}/${TEST_DATA.recordId}/templates/${TEST_DATA.templateId}/export`);
try {
const response1 = await axios.get(
`${BASE_URL}/v0/${TEST_DATA.collection}/${TEST_DATA.recordId}/templates/${TEST_DATA.templateId}/export?type=PDF`
);
console.log('✅ Success:', {
status: response1.status,
file_url: response1.data.data.file_url,
file_type: response1.data.data.file_type,
media_id: response1.data.data.media_id
});
} catch (error) {
console.log('❌ Error:', error.response?.data || error.message);
}
console.log('\n' + '='.repeat(60) + '\n');
// Test 2: API gộp mới - Export theo Template Key (sau khi thêm key)
console.log('📋 Test 2: New Unified API - Export by Template Key');
console.log(`GET /v0/${TEST_DATA.collection}/${TEST_DATA.recordId}/templates/${TEST_DATA.templateKey}/export`);
try {
const response2 = await axios.get(
`${BASE_URL}/v0/${TEST_DATA.collection}/${TEST_DATA.recordId}/templates/${TEST_DATA.templateKey}/export?type=PDF`
);
console.log('✅ Success:', {
status: response2.status,
file_url: response2.data.data.file_url,
file_type: response2.data.data.file_type,
media_id: response2.data.data.media_id
});
} catch (error) {
console.log('❌ Error (expected if key not set):', error.response?.data || error.message);
}
console.log('\n' + '='.repeat(60) + '\n');
// Test 3: Legacy API - Export theo Template ID
console.log('📋 Test 3: Legacy API - Export by Template ID');
console.log(`GET /v0/${TEST_DATA.collection}/${TEST_DATA.recordId}/templates/${TEST_DATA.templateId}/export`);
try {
const response3 = await axios.get(
`${BASE_URL}/v0/${TEST_DATA.collection}/${TEST_DATA.recordId}/templates/${TEST_DATA.templateId}/export?type=PDF`
);
console.log('✅ Success:', {
status: response3.status,
file_url: response3.data.data.file_url,
file_type: response3.data.data.file_type,
media_id: response3.data.data.media_id
});
} catch (error) {
console.log('❌ Error:', error.response?.data || error.message);
}
console.log('\n' + '='.repeat(60) + '\n');
// Test 4: Export Word file
console.log('📋 Test 4: Export Word file');
console.log(`GET /v0/${TEST_DATA.collection}/${TEST_DATA.recordId}/templates/${TEST_DATA.templateId}/export?type=WORD`);
try {
const response4 = await axios.get(
`${BASE_URL}/v0/${TEST_DATA.collection}/${TEST_DATA.recordId}/templates/${TEST_DATA.templateId}/export?type=WORD`
);
console.log('✅ Success:', {
status: response4.status,
file_url: response4.data.data.file_url,
file_type: response4.data.data.file_type,
media_id: response4.data.data.media_id
});
} catch (error) {
console.log('❌ Error:', error.response?.data || error.message);
}
console.log('\n' + '='.repeat(60) + '\n');
// Test 5: Error cases
console.log('📋 Test 5: Error cases');
// Test invalid record ID
console.log(' 5.1: Invalid record ID');
try {
await axios.get(
`${BASE_URL}/v0/${TEST_DATA.collection}/invalid_id/templates/${TEST_DATA.templateId}/export`
);
} catch (error) {
console.log(' ✅ Expected error:', error.response?.data?.message);
}
// Test invalid template ID
console.log(' 5.2: Invalid template ID');
try {
await axios.get(
`${BASE_URL}/v0/${TEST_DATA.collection}/${TEST_DATA.recordId}/templates/invalid_template_id/export`
);
} catch (error) {
console.log(' ✅ Expected error:', error.response?.data?.message);
}
// Test invalid template key
console.log(' 5.3: Invalid template key');
try {
await axios.get(
`${BASE_URL}/v0/${TEST_DATA.collection}/${TEST_DATA.recordId}/templates/invalid_key/export`
);
} catch (error) {
console.log(' ✅ Expected error:', error.response?.data?.message);
}
// Test invalid type
console.log(' 5.4: Invalid file type');
try {
await axios.get(
`${BASE_URL}/v0/${TEST_DATA.collection}/${TEST_DATA.recordId}/templates/${TEST_DATA.templateId}/export?type=INVALID`
);
} catch (error) {
console.log(' ✅ Expected error:', error.response?.data?.message);
}
console.log('\n' + '='.repeat(60) + '\n');
// Test 6: List templates
console.log('📋 Test 6: List available templates');
console.log(`GET /v0/${TEST_DATA.collection}/document/templates`);
try {
const response6 = await axios.get(
`${BASE_URL}/v0/${TEST_DATA.collection}/document/templates`
);
console.log('✅ Success:', {
status: response6.status,
templates_count: response6.data.data.length,
templates: response6.data.data.map(t => ({
id: t._id,
name: t.name,
key: t.key,
collection: t.collection_name
}))
});
} catch (error) {
console.log('❌ Error:', error.response?.data || error.message);
}
console.log('\n' + '='.repeat(60) + '\n');
// Summary
console.log('📊 Test Summary');
console.log('✅ New unified API is working correctly');
console.log('✅ Legacy APIs are still functional');
console.log('✅ PDF conversion with LibreOffice is functional');
console.log('✅ Both Template ID and Template Key methods work');
console.log('✅ Error handling is working as expected');
console.log('✅ File caching mechanism is operational');
} catch (error) {
console.error('❌ Test suite failed:', error.message);
}
}
// Utility function để test với custom data
async function testWithCustomData(recordId, templateKeyOrId, collection = 'addresses') {
console.log(`🧪 Testing with custom data: ${collection}/${recordId}`);
try {
// Test unified API
const response = await axios.get(
`${BASE_URL}/v0/${collection}/${recordId}/templates/${templateKeyOrId}/export?type=PDF`
);
console.log('✅ Unified API export:', response.data.data.file_url);
return response.data.data;
} catch (error) {
console.error('❌ Custom test failed:', error.response?.data || error.message);
return null;
}
}
// Function để thêm key cho template hiện có
async function addKeyToTemplate(templateId, key, collection = 'addresses') {
console.log(`🔧 Adding key '${key}' to template ${templateId}`);
try {
const response = await axios.put(
`${BASE_URL}/v0/${collection}/document/templates/${templateId}`,
{ key: key },
{
headers: {
'Content-Type': 'application/json'
}
}
);
console.log('✅ Key added successfully:', response.data.data);
return response.data.data;
} catch (error) {
console.error('❌ Failed to add key:', error.response?.data || error.message);
return null;
}
}
// Export functions for external use
module.exports = {
testDocumentExportAPIs,
testWithCustomData,
addKeyToTemplate,
TEST_DATA
};
// Run tests if this file is executed directly
if (require.main === module) {
testDocumentExportAPIs();
}