Shot Bulk Status Consistency - Test Plan
๐ฏ Issue Fixed
The bulk task status change popover was showing only system statuses (TaskStatus enum values) while the individual EditableTaskStatus components showed both system and custom statuses from the task statuses store.
Root Cause:
- Bulk popover used
Object.values(TaskStatus) - only system statuses
- EditableTaskStatus used
taskStatusesStore.getAllStatusOptions() - system + custom statuses
- Store was being accessed incorrectly inside column definition (no Vue context)
๐ง Solution Implemented
Changes Made:
- Updated ShotColumnMeta interface to include getAllStatusOptions callback
- Modified ShotBrowser to provide status options from taskStatusesStore
- Added loadTaskStatuses() function to load custom statuses on project change
- Updated bulk popover to use same status source as EditableTaskStatus
- Ensured TaskStatusBadge component consistency across both interfaces
// Before (only system statuses):
Object.values(TaskStatus).map((status) => ...)
// After (system + custom statuses):
meta.getAllStatusOptions?.().map((statusOption) => ...)
๐งช Test Scenarios
Test 1: Status List Consistency
- Navigate to shot table with task columns visible
- Click on any individual task status dropdown (EditableTaskStatus)
- Note the available status options and their colors
- Close the dropdown
- Select multiple shots
- Click the bulk action button in the same task column header
- Compare the status options in the bulk popover
Expected: Both lists should be identical - same statuses, same colors, same order
Test 2: Custom Status Support
- Ensure the project has custom task statuses configured
- Verify individual EditableTaskStatus shows custom statuses
- Verify bulk popover also shows the same custom statuses
- Test bulk updating to a custom status
- Verify all selected shots update to the custom status
Expected: Custom statuses work in both individual and bulk operations
Test 3: Status Badge Appearance
- Compare status badge colors between individual and bulk interfaces
- Verify custom status colors are preserved
- Check that compact styling is consistent
- Test with different status types (system vs custom)
Expected: Identical visual appearance and colors across both interfaces
๐ Status Comparison
| Status Type |
Individual EditableTaskStatus |
Bulk Popover (Fixed) |
Source |
| System Statuses |
Not Started
In Progress
Submitted
Approved
Retake
|
Not Started
In Progress
Submitted
Approved
Retake
|
taskStatusesStore.getAllStatusOptions() |
| Custom Statuses |
Custom Status |
Custom Status |
taskStatusesStore.getAllStatusOptions() |
๐ Data Flow
Updated Architecture:
ShotBrowser Component:
โโโ taskStatusesStore.fetchProjectStatuses() // Load on project change
โโโ createStableMeta()
โ โโโ getAllStatusOptions: () => taskStatusesStore.getAllStatusOptions()
โโโ Shot Columns
โ โโโ EditableTaskStatus (individual)
โ โ โโโ Uses: taskStatusesStore.getAllStatusOptions()
โ โโโ Bulk Popover
โ โโโ Uses: meta.getAllStatusOptions() // Same source!
Key Benefits:
- Single source of truth for all task statuses
- Automatic custom status support in bulk operations
- Consistent colors and styling across interfaces
- Proper Vue reactivity and store integration
- Future-proof for new custom statuses
โ
Acceptance Criteria
- Bulk popover shows identical status list as individual EditableTaskStatus
- Custom task statuses appear in both individual and bulk interfaces
- Status colors and styling are consistent across both interfaces
- TaskStatusBadge component renders identically in both contexts
- Bulk operations work with both system and custom statuses
- Status list updates automatically when custom statuses change
- No console errors or warnings related to store access
๐ Ready for Testing
The shot bulk status change functionality now uses the same task status source as the individual EditableTaskStatus components, ensuring complete consistency between individual and bulk operations.
Key Improvement: Users will now see the same comprehensive list of task statuses (including custom ones) in both the individual dropdowns and bulk action popovers, providing a unified and consistent experience across the application.