優化應用 APP 新增、編輯邏輯
This commit is contained in:
155
scripts/test-edit-app-consistency.js
Normal file
155
scripts/test-edit-app-consistency.js
Normal file
@@ -0,0 +1,155 @@
|
||||
// 模擬前端類型映射函數
|
||||
const mapApiTypeToDisplayType = (apiType) => {
|
||||
const typeMap = {
|
||||
'productivity': '文字處理',
|
||||
'ai_model': '圖像生成',
|
||||
'automation': '程式開發',
|
||||
'data_analysis': '數據分析',
|
||||
'educational': '教育工具',
|
||||
'healthcare': '健康醫療',
|
||||
'finance': '金融科技',
|
||||
'iot_device': '物聯網',
|
||||
'blockchain': '區塊鏈',
|
||||
'ar_vr': 'AR/VR',
|
||||
'machine_learning': '機器學習',
|
||||
'computer_vision': '電腦視覺',
|
||||
'nlp': '自然語言處理',
|
||||
'robotics': '機器人',
|
||||
'cybersecurity': '網路安全',
|
||||
'cloud_service': '雲端服務',
|
||||
'other': '其他'
|
||||
};
|
||||
return typeMap[apiType] || '其他';
|
||||
};
|
||||
|
||||
// 模擬 handleEditApp 函數(修正後)
|
||||
const handleEditApp = (app) => {
|
||||
console.log('=== handleEditApp Debug ===');
|
||||
console.log('Input app:', app);
|
||||
console.log('app.type:', app.type);
|
||||
console.log('app.department:', app.department);
|
||||
console.log('app.creator:', app.creator);
|
||||
|
||||
// 處理類型轉換:如果類型是英文的,轉換為中文
|
||||
let displayType = app.type;
|
||||
if (app.type && !['文字處理', '圖像生成', '程式開發', '數據分析', '教育工具', '健康醫療', '金融科技', '物聯網', '區塊鏈', 'AR/VR', '機器學習', '電腦視覺', '自然語言處理', '機器人', '網路安全', '雲端服務', '其他'].includes(app.type)) {
|
||||
displayType = mapApiTypeToDisplayType(app.type);
|
||||
}
|
||||
|
||||
// 處理部門和創建者資料
|
||||
let department = app.department;
|
||||
let creator = app.creator;
|
||||
|
||||
// 如果 app.creator 是物件(來自詳細 API),提取名稱
|
||||
if (app.creator && typeof app.creator === 'object') {
|
||||
creator = app.creator.name || "";
|
||||
department = app.creator.department || app.department || "HQBU";
|
||||
}
|
||||
|
||||
const newAppData = {
|
||||
name: app.name,
|
||||
type: displayType,
|
||||
department: department || "HQBU",
|
||||
creator: creator || "",
|
||||
description: app.description,
|
||||
appUrl: app.appUrl || app.demoUrl || "",
|
||||
icon: app.icon || "Bot",
|
||||
iconColor: app.iconColor || "from-blue-500 to-purple-500",
|
||||
};
|
||||
|
||||
console.log('newAppData:', newAppData);
|
||||
return newAppData;
|
||||
};
|
||||
|
||||
async function testEditAppConsistency() {
|
||||
console.log('🧪 測試編輯應用功能一致性...\n');
|
||||
|
||||
// 1. 模擬列表中的應用資料(來自 loadApps)
|
||||
const listApp = {
|
||||
id: 'test123',
|
||||
name: '測試應用程式',
|
||||
description: '這是一個測試應用程式',
|
||||
type: '文字處理', // 已經轉換為中文
|
||||
department: 'HQBU',
|
||||
creator: '測試創建者',
|
||||
appUrl: 'https://example.com',
|
||||
icon: 'Bot',
|
||||
iconColor: 'from-blue-500 to-purple-500'
|
||||
};
|
||||
|
||||
// 2. 模擬詳細 API 返回的應用資料
|
||||
const detailApp = {
|
||||
id: 'test123',
|
||||
name: '測試應用程式',
|
||||
description: '這是一個測試應用程式',
|
||||
type: 'productivity', // 英文類型
|
||||
department: 'HQBU',
|
||||
creator: {
|
||||
id: 'user123',
|
||||
name: '測試創建者',
|
||||
email: 'test@example.com',
|
||||
department: 'HQBU',
|
||||
role: 'developer'
|
||||
},
|
||||
demoUrl: 'https://example.com',
|
||||
icon: 'Bot',
|
||||
iconColor: 'from-blue-500 to-purple-500'
|
||||
};
|
||||
|
||||
console.log('📋 測試列表中的編輯功能:');
|
||||
console.log('輸入資料:', listApp);
|
||||
const listResult = handleEditApp(listApp);
|
||||
console.log('處理結果:', listResult);
|
||||
|
||||
console.log('\n📋 測試詳細對話框中的編輯功能:');
|
||||
console.log('輸入資料:', detailApp);
|
||||
const detailResult = handleEditApp(detailApp);
|
||||
console.log('處理結果:', detailResult);
|
||||
|
||||
// 3. 驗證一致性
|
||||
console.log('\n✅ 一致性檢查:');
|
||||
const fieldsToCheck = ['name', 'type', 'department', 'creator', 'description', 'appUrl', 'icon', 'iconColor'];
|
||||
|
||||
fieldsToCheck.forEach(field => {
|
||||
const listValue = listResult[field];
|
||||
const detailValue = detailResult[field];
|
||||
const isConsistent = listValue === detailValue;
|
||||
console.log(` ${field}: ${listValue} vs ${detailValue} ${isConsistent ? '✅' : '❌'}`);
|
||||
});
|
||||
|
||||
// 4. 測試不同類型的轉換
|
||||
console.log('\n🔍 測試類型轉換:');
|
||||
const testTypes = [
|
||||
{ apiType: 'productivity', expected: '文字處理' },
|
||||
{ apiType: 'ai_model', expected: '圖像生成' },
|
||||
{ apiType: 'automation', expected: '程式開發' },
|
||||
{ apiType: 'data_analysis', expected: '數據分析' },
|
||||
{ apiType: 'educational', expected: '教育工具' },
|
||||
{ apiType: 'healthcare', expected: '健康醫療' },
|
||||
{ apiType: 'finance', expected: '金融科技' },
|
||||
{ apiType: 'iot_device', expected: '物聯網' },
|
||||
{ apiType: 'blockchain', expected: '區塊鏈' },
|
||||
{ apiType: 'ar_vr', expected: 'AR/VR' },
|
||||
{ apiType: 'machine_learning', expected: '機器學習' },
|
||||
{ apiType: 'computer_vision', expected: '電腦視覺' },
|
||||
{ apiType: 'nlp', expected: '自然語言處理' },
|
||||
{ apiType: 'robotics', expected: '機器人' },
|
||||
{ apiType: 'cybersecurity', expected: '網路安全' },
|
||||
{ apiType: 'cloud_service', expected: '雲端服務' },
|
||||
{ apiType: 'other', expected: '其他' }
|
||||
];
|
||||
|
||||
testTypes.forEach(({ apiType, expected }) => {
|
||||
const testApp = {
|
||||
...detailApp,
|
||||
type: apiType
|
||||
};
|
||||
const result = handleEditApp(testApp);
|
||||
const isCorrect = result.type === expected;
|
||||
console.log(` ${apiType} -> ${result.type} ${isCorrect ? '✅' : '❌'}`);
|
||||
});
|
||||
|
||||
console.log('\n✅ 編輯應用功能一致性測試完成!');
|
||||
}
|
||||
|
||||
testEditAppConsistency().catch(console.error);
|
Reference in New Issue
Block a user