166 lines
5.6 KiB
JavaScript
166 lines
5.6 KiB
JavaScript
// Test script to verify department pre-fill issue in handleEditApp
|
|
console.log('Testing department pre-fill issue...')
|
|
|
|
// Simulate the loadApps function processing
|
|
function processApps(apiApps) {
|
|
return apiApps.map(app => ({
|
|
id: app.id,
|
|
name: app.name,
|
|
type: app.type,
|
|
creator: typeof app.creator === 'object' ? app.creator.name : app.creator,
|
|
department: typeof app.creator === 'object' ? app.creator.department : app.department,
|
|
description: app.description,
|
|
appUrl: app.appUrl || app.demoUrl || '',
|
|
icon: app.icon || 'Bot',
|
|
iconColor: app.iconColor || 'from-blue-500 to-purple-500',
|
|
status: app.status,
|
|
views: app.views || 0,
|
|
likes: app.likes || 0,
|
|
rating: app.rating || 0,
|
|
reviews: app.reviews || 0,
|
|
createdAt: app.createdAt ? new Date(app.createdAt).toLocaleDateString() : '未知'
|
|
}))
|
|
}
|
|
|
|
// Simulate the handleEditApp function
|
|
function handleEditApp(app) {
|
|
console.log('📝 Editing app:', app.name)
|
|
console.log('📋 App object structure:', {
|
|
name: app.name,
|
|
creator: app.creator,
|
|
department: app.department,
|
|
hasCreatorObject: typeof app.creator === 'object',
|
|
hasCreatorProperty: 'creator' in app,
|
|
hasDepartmentProperty: 'department' in app
|
|
})
|
|
|
|
const newApp = {
|
|
name: app.name,
|
|
type: app.type,
|
|
department: app.creator?.department || app.department || "HQBU", // This is the problematic line
|
|
creator: app.creator?.name || app.creator || "",
|
|
description: app.description,
|
|
appUrl: app.appUrl || app.demoUrl || "",
|
|
icon: app.icon || "Bot",
|
|
iconColor: app.iconColor || "from-blue-500 to-purple-500",
|
|
}
|
|
|
|
console.log('📝 Form populated with app data:', newApp)
|
|
return newApp
|
|
}
|
|
|
|
// Test scenario 1: App with creator as object (from API)
|
|
console.log('\n=== Test Scenario 1: Creator as Object ===')
|
|
const apiAppWithCreatorObject = {
|
|
id: "1",
|
|
name: "Test AI App",
|
|
type: "圖像生成",
|
|
creator: {
|
|
id: "user1",
|
|
name: "John Doe",
|
|
department: "ITBU"
|
|
},
|
|
department: "HQBU", // This should be ignored when creator is object
|
|
description: "A test AI application",
|
|
appUrl: "https://example.com",
|
|
icon: "Brain",
|
|
iconColor: "from-purple-500 to-pink-500",
|
|
status: "published",
|
|
views: 100,
|
|
likes: 50,
|
|
rating: 4.5,
|
|
reviews: 10,
|
|
createdAt: "2024-01-15"
|
|
}
|
|
|
|
console.log('1. Original API app with creator object:')
|
|
console.log(apiAppWithCreatorObject)
|
|
|
|
console.log('\n2. Processed by loadApps:')
|
|
const processedApp1 = processApps([apiAppWithCreatorObject])[0]
|
|
console.log(processedApp1)
|
|
|
|
console.log('\n3. handleEditApp result:')
|
|
const editResult1 = handleEditApp(processedApp1)
|
|
console.log('Department in form:', editResult1.department)
|
|
|
|
// Test scenario 2: App with creator as string (from API)
|
|
console.log('\n=== Test Scenario 2: Creator as String ===')
|
|
const apiAppWithCreatorString = {
|
|
id: "2",
|
|
name: "Another Test App",
|
|
type: "語音辨識",
|
|
creator: "Jane Smith", // String creator
|
|
department: "MBU1", // This should be used when creator is string
|
|
description: "Another test application",
|
|
appUrl: "https://test2.com",
|
|
icon: "Mic",
|
|
iconColor: "from-green-500 to-teal-500",
|
|
status: "draft",
|
|
views: 50,
|
|
likes: 25,
|
|
rating: 4.0,
|
|
reviews: 5,
|
|
createdAt: "2024-01-20"
|
|
}
|
|
|
|
console.log('1. Original API app with creator string:')
|
|
console.log(apiAppWithCreatorString)
|
|
|
|
console.log('\n2. Processed by loadApps:')
|
|
const processedApp2 = processApps([apiAppWithCreatorString])[0]
|
|
console.log(processedApp2)
|
|
|
|
console.log('\n3. handleEditApp result:')
|
|
const editResult2 = handleEditApp(processedApp2)
|
|
console.log('Department in form:', editResult2.department)
|
|
|
|
// Test scenario 3: Fix the handleEditApp function
|
|
console.log('\n=== Test Scenario 3: Fixed handleEditApp ===')
|
|
function handleEditAppFixed(app) {
|
|
console.log('📝 Editing app (FIXED):', app.name)
|
|
console.log('📋 App object structure:', {
|
|
name: app.name,
|
|
creator: app.creator,
|
|
department: app.department,
|
|
hasCreatorObject: typeof app.creator === 'object',
|
|
hasCreatorProperty: 'creator' in app,
|
|
hasDepartmentProperty: 'department' in app
|
|
})
|
|
|
|
const newApp = {
|
|
name: app.name,
|
|
type: app.type,
|
|
department: app.department || "HQBU", // FIXED: Use app.department directly
|
|
creator: app.creator || "",
|
|
description: app.description,
|
|
appUrl: app.appUrl || app.demoUrl || "",
|
|
icon: app.icon || "Bot",
|
|
iconColor: app.iconColor || "from-blue-500 to-purple-500",
|
|
}
|
|
|
|
console.log('📝 Form populated with app data (FIXED):', newApp)
|
|
return newApp
|
|
}
|
|
|
|
console.log('1. Test with processed app 1 (creator was object):')
|
|
const fixedResult1 = handleEditAppFixed(processedApp1)
|
|
console.log('Department in form (FIXED):', fixedResult1.department)
|
|
|
|
console.log('\n2. Test with processed app 2 (creator was string):')
|
|
const fixedResult2 = handleEditAppFixed(processedApp2)
|
|
console.log('Department in form (FIXED):', fixedResult2.department)
|
|
|
|
// Verify the fix
|
|
console.log('\n=== Verification ===')
|
|
const expectedDepartment1 = "ITBU" // Should be from creator.department
|
|
const expectedDepartment2 = "MBU1" // Should be from app.department
|
|
|
|
console.log('Scenario 1 - Expected:', expectedDepartment1, 'Got:', fixedResult1.department, '✅', fixedResult1.department === expectedDepartment1 ? 'PASS' : 'FAIL')
|
|
console.log('Scenario 2 - Expected:', expectedDepartment2, 'Got:', fixedResult2.department, '✅', fixedResult2.department === expectedDepartment2 ? 'PASS' : 'FAIL')
|
|
|
|
if (fixedResult1.department === expectedDepartment1 && fixedResult2.department === expectedDepartment2) {
|
|
console.log('\n🎉 All tests passed! The department pre-fill fix is working correctly.')
|
|
} else {
|
|
console.log('\n❌ Some tests failed. Check the handleEditApp function.')
|
|
}
|