- Add interactive modal popup for announcement 'Read More' functionality - Fix nonce conflict by creating separate hvac_announcements_ajax object - Implement secure AJAX handler with rate limiting and permission checks - Add comprehensive modal CSS with smooth animations and responsive design - Include accessibility features (ARIA, keyboard navigation, screen reader support) - Create detailed documentation in docs/ANNOUNCEMENT-MODAL-SYSTEM.md - Update API-REFERENCE.md with new modal endpoints and security details - Add automated Playwright E2E testing for modal functionality - All modal interactions working: click to open, X to close, ESC to close, outside click - Production-ready with full error handling and content sanitization 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
87 lines
No EOL
3.4 KiB
JavaScript
87 lines
No EOL
3.4 KiB
JavaScript
/**
|
|
* Test script to verify announcement pages are created properly
|
|
*/
|
|
|
|
const { chromium } = require('playwright');
|
|
|
|
async function testCreateAnnouncementPages() {
|
|
const browser = await chromium.launch({ headless: false });
|
|
const context = await browser.newContext();
|
|
const page = await context.newPage();
|
|
|
|
try {
|
|
console.log('🚀 Testing Announcement Pages Creation...');
|
|
|
|
// Navigate to login page
|
|
console.log('1. Navigating to login page...');
|
|
await page.goto('https://upskill-staging.measurequick.com/training-login/');
|
|
await page.waitForTimeout(2000);
|
|
|
|
// Login as test master trainer
|
|
console.log('2. Logging in as master trainer...');
|
|
await page.fill('[name="log"]', 'test_master');
|
|
await page.fill('[name="pwd"]', 'TestMaster123!');
|
|
await page.click('[type="submit"]');
|
|
await page.waitForTimeout(3000);
|
|
|
|
// Test Master Trainer Announcements page
|
|
console.log('3. Testing master trainer announcements page...');
|
|
await page.goto('https://upskill-staging.measurequick.com/master-trainer/announcements/');
|
|
await page.waitForTimeout(2000);
|
|
|
|
const announcementsTitle = await page.textContent('h1').catch(() => null);
|
|
console.log('Announcements page title:', announcementsTitle);
|
|
|
|
if (page.url().includes('404') || announcementsTitle?.includes('not found')) {
|
|
console.log('❌ Master announcements page does not exist');
|
|
} else {
|
|
console.log('✅ Master announcements page exists');
|
|
}
|
|
|
|
// Test Trainer Resources page
|
|
console.log('4. Testing trainer resources page...');
|
|
await page.goto('https://upskill-staging.measurequick.com/trainer/resources/');
|
|
await page.waitForTimeout(2000);
|
|
|
|
const resourcesTitle = await page.textContent('h1').catch(() => null);
|
|
console.log('Resources page title:', resourcesTitle);
|
|
|
|
if (page.url().includes('404') || resourcesTitle?.includes('not found')) {
|
|
console.log('❌ Trainer resources page does not exist');
|
|
} else {
|
|
console.log('✅ Trainer resources page exists');
|
|
}
|
|
|
|
// Test WordPress admin pages list
|
|
console.log('5. Checking WordPress admin pages list...');
|
|
await page.goto('https://upskill-staging.measurequick.com/wp-admin/edit.php?post_type=page');
|
|
await page.waitForTimeout(3000);
|
|
|
|
// Search for announcement pages
|
|
const searchBox = await page.$('#post-search-input');
|
|
if (searchBox) {
|
|
await searchBox.fill('announcements');
|
|
await page.click('#search-submit');
|
|
await page.waitForTimeout(2000);
|
|
|
|
const searchResults = await page.$$('.row-title');
|
|
console.log('Found announcement pages:', searchResults.length);
|
|
|
|
for (let i = 0; i < searchResults.length; i++) {
|
|
const title = await searchResults[i].textContent();
|
|
console.log(`- Page ${i+1}: ${title}`);
|
|
}
|
|
}
|
|
|
|
console.log('🎉 Test completed!');
|
|
|
|
} catch (error) {
|
|
console.error('❌ Test failed:', error.message);
|
|
console.error(error.stack);
|
|
} finally {
|
|
await browser.close();
|
|
}
|
|
}
|
|
|
|
// Run the test
|
|
testCreateAnnouncementPages().catch(console.error); |