LinkDesk/frontend/verify-assignment-popover.js

164 lines
6.7 KiB
JavaScript

// Assignment Popover Verification Script
// Run this in the browser console on a shots table page
console.log('🧪 Starting Assignment Popover Verification...');
const verifyAssignmentPopover = {
// Check if EditableTaskStatus components are present
checkComponents() {
const components = document.querySelectorAll('[data-testid="editable-task-status"]');
console.log(`✅ Found ${components.length} EditableTaskStatus components`);
if (components.length === 0) {
console.log('❌ No EditableTaskStatus components found. Make sure you\'re on the shots table view.');
return false;
}
return components;
},
// Check if assignment buttons are present
checkAssignmentButtons() {
const buttons = document.querySelectorAll('[data-testid="editable-task-status"] button');
console.log(`✅ Found ${buttons.length} assignment buttons`);
buttons.forEach((btn, index) => {
const hasUserIcon = btn.querySelector('svg[data-lucide="user"]');
const hasAvatar = btn.querySelector('[class*="avatar"]');
console.log(` Button ${index + 1}: ${hasUserIcon ? '👤 User icon' : hasAvatar ? '🔵 Avatar' : '❓ Unknown'}`);
});
return buttons;
},
// Test popover opening
async testPopoverOpening(buttonIndex = 0) {
const buttons = this.checkAssignmentButtons();
if (buttons.length === 0) {
console.log('❌ No buttons found to test');
return false;
}
const button = buttons[buttonIndex];
console.log(`🖱️ Testing popover opening on button ${buttonIndex + 1}...`);
// Click the button
button.click();
// Wait a moment for popover to appear
await new Promise(resolve => setTimeout(resolve, 500));
// Check if popover appeared
const popovers = document.querySelectorAll('[data-radix-popper-content-wrapper]');
const popoverContent = document.querySelector('[role="dialog"]');
if (popovers.length > 0 || popoverContent) {
console.log('✅ Popover opened successfully!');
// Check popover content
const assignText = document.querySelector('*:contains("Assign Task")');
const debugInfo = document.querySelector('*:contains("Project ID:")');
const loadingText = document.querySelector('*:contains("Loading members")');
const membersList = document.querySelector('*:contains("Unassign")');
console.log('📋 Popover content check:');
console.log(` - Assign Task header: ${assignText ? '✅' : '❌'}`);
console.log(` - Debug info: ${debugInfo ? '✅' : '❌'}`);
console.log(` - Loading/Members: ${loadingText || membersList ? '✅' : '❌'}`);
return true;
} else {
console.log('❌ Popover did not open');
return false;
}
},
// Check for expected console messages
checkConsoleMessages() {
console.log('🔍 Expected console messages after clicking assignment button:');
console.log(' - "Popover state changed: true"');
console.log(' - "Loading project members when popover opens"');
console.log(' - "Loading project members for project: [ID]"');
console.log(' - "Loaded project members: [...]"');
console.log('');
console.log('💡 Click an assignment button and watch for these messages');
},
// Check network requests
checkNetworkRequests() {
console.log('🌐 Expected network requests:');
console.log(' - GET /projects/{id}/members (when popover opens)');
console.log(' - POST /shots/{id}/tasks (if task doesn\'t exist)');
console.log(' - PUT /tasks/{id}/assign (when assigning)');
console.log(' - PUT /tasks/{id} (when unassigning)');
console.log('');
console.log('💡 Open Network tab in DevTools to monitor these requests');
},
// Run full verification
async runFullVerification() {
console.log('🚀 Running full assignment popover verification...');
console.log('');
// Step 1: Check components
const components = this.checkComponents();
if (!components) return false;
// Step 2: Check buttons
const buttons = this.checkAssignmentButtons();
if (buttons.length === 0) return false;
// Step 3: Test popover opening
const popoverWorking = await this.testPopoverOpening();
// Step 4: Show expected messages and requests
console.log('');
this.checkConsoleMessages();
this.checkNetworkRequests();
// Summary
console.log('');
console.log('📊 Verification Summary:');
console.log(` - Components found: ✅ ${components.length}`);
console.log(` - Buttons found: ✅ ${buttons.length}`);
console.log(` - Popover opening: ${popoverWorking ? '✅' : '❌'}`);
if (popoverWorking) {
console.log('');
console.log('🎉 Assignment popover verification PASSED!');
console.log('✅ The implementation appears to be working correctly.');
console.log('');
console.log('🧪 Manual testing steps:');
console.log('1. Click assignment buttons to open popovers');
console.log('2. Verify project members load');
console.log('3. Test assignment by clicking a member');
console.log('4. Test unassignment by clicking "Unassign"');
console.log('5. Check for success toast notifications');
} else {
console.log('');
console.log('❌ Assignment popover verification FAILED');
console.log('🔧 Check browser console for errors and verify:');
console.log(' - You\'re on the shots table view');
console.log(' - No JavaScript errors are present');
console.log(' - Popover components are properly imported');
console.log(' - Backend is running and accessible');
}
return popoverWorking;
}
};
// Auto-run verification
verifyAssignmentPopover.runFullVerification();
// Make verification object available globally
window.verifyAssignmentPopover = verifyAssignmentPopover;
console.log('');
console.log('🛠️ Verification object available as: window.verifyAssignmentPopover');
console.log('📋 Available methods:');
console.log(' - checkComponents()');
console.log(' - checkAssignmentButtons()');
console.log(' - testPopoverOpening(buttonIndex)');
console.log(' - runFullVerification()');