This test validates that the TaskBrowser component has been optimized to:
Requirements Met:
// Separate API call for tasks
const response = await taskService.getTasks({ projectId: props.projectId })
tasks.value = response
// Get both shots and assets with embedded task data (two optimized backend calls)
const [shots, assets] = await Promise.all([
shotService.getShots({ projectId: props.projectId }),
assetService.getAssets(props.projectId)
])
// Extract tasks from embedded data - no separate task API calls needed!
const shotTasks = shots.flatMap(shot =>
(shot.task_details || []).map(taskDetail => ({
id: taskDetail.task_id || 0,
name: `${shot.name} - ${taskDetail.task_type}`,
// ... other task properties
}))
)
const assetTasks = assets.flatMap(asset =>
(asset.task_details || []).map(taskDetail => ({
id: taskDetail.task_id || 0,
name: `${asset.name} - ${taskDetail.task_type}`,
// ... other task properties
}))
)
// Combine all tasks from embedded data
tasks.value = [...shotTasks, ...assetTasks]
Expected Data Structure:
Shot Response:
{
id: 1,
name: "shot_001",
task_details: [
{
task_id: 101,
task_type: "layout",
status: "in_progress",
assigned_user_id: 5
},
{
task_id: 102,
task_type: "animation",
status: "not_started",
assigned_user_id: null
}
]
}
Asset Response:
{
id: 1,
name: "character_hero",
task_details: [
{
task_id: 201,
task_type: "modeling",
status: "completed",
assigned_user_id: 3
}
]
}
The TaskBrowser component has been successfully optimized according to all requirements:
Requirements Satisfied: