upskill-event-manager/verify-profile-sharing-deployment.js
bengizmo 993a820a84 feat: Add comprehensive development artifacts to repository
- Add 26 documentation files including test reports, deployment guides, and troubleshooting documentation
- Include 3 CSV data files for trainer imports and user registration tracking
- Add 43 JavaScript test files covering mobile optimization, Safari compatibility, and E2E testing
- Include 18 PHP utility files for debugging, geocoding, and data analysis
- Add 12 shell scripts for deployment verification, user management, and database operations
- Update .gitignore with whitelist patterns for development files, documentation, and CSV data

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-11 12:26:11 -03:00

184 lines
No EOL
6.6 KiB
JavaScript

/**
* Quick Deployment Verification Script
* Verifies that the trainer profile sharing feature has been deployed correctly
*/
const https = require('https');
const fs = require('fs');
const STAGING_URL = 'https://upskill-staging.measurequick.com';
console.log('🔍 Verifying Trainer Profile Sharing Deployment...\n');
// Test 1: Check if QR Generator class is available
function checkFileExists(url, filename) {
return new Promise((resolve) => {
const options = {
hostname: 'upskill-staging.measurequick.com',
path: url,
method: 'HEAD'
};
const req = https.request(options, (res) => {
resolve({
exists: res.statusCode === 200,
status: res.statusCode,
filename: filename
});
});
req.on('error', () => {
resolve({ exists: false, status: 'ERROR', filename: filename });
});
req.end();
});
}
// Test 2: Check Find a Trainer page functionality
function checkFindTrainerPage() {
return new Promise((resolve) => {
https.get(`${STAGING_URL}/find-a-trainer/`, (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
const hasDirectProfileCode = data.includes('direct_profile_id');
const hasQRSupport = data.includes('hvac_sharing');
const hasModalTemplate = data.includes('hvac-share-profile-modal');
resolve({
status: res.statusCode,
hasDirectProfileCode,
hasQRSupport,
hasModalTemplate,
pageSize: data.length
});
});
}).on('error', () => {
resolve({ status: 'ERROR' });
});
});
}
// Test 3: Check for profile sharing assets
async function verifyAssetFiles() {
console.log('📁 Checking Asset Files...');
const assets = [
{ url: '/wp-content/plugins/hvac-community-events/assets/css/hvac-profile-sharing.css', name: 'Profile Sharing CSS' },
{ url: '/wp-content/plugins/hvac-community-events/assets/js/hvac-profile-sharing.js', name: 'Profile Sharing JS' },
{ url: '/wp-content/plugins/hvac-community-events/assets/css/find-trainer.css', name: 'Find Trainer CSS' },
{ url: '/wp-content/plugins/hvac-community-events/assets/js/find-trainer.js', name: 'Find Trainer JS' }
];
for (const asset of assets) {
const result = await checkFileExists(asset.url, asset.name);
const status = result.exists ? '✅' : '❌';
console.log(`${status} ${asset.name}: ${result.exists ? 'Found' : 'Missing'} (${result.status})`);
}
}
// Test 4: Check Find a Trainer page content
async function verifyFindTrainerPage() {
console.log('\n🔍 Checking Find a Trainer Page...');
const result = await checkFindTrainerPage();
if (result.status === 200) {
console.log('✅ Find a Trainer page loads successfully');
console.log(` 📊 Page size: ${result.pageSize} bytes`);
const features = [
{ check: result.hasDirectProfileCode, name: 'Direct profile URL support' },
{ check: result.hasQRSupport, name: 'QR sharing functionality' },
{ check: result.hasModalTemplate, name: 'Share profile modal template' }
];
features.forEach(feature => {
const status = feature.check ? '✅' : '❌';
console.log(`${status} ${feature.name}: ${feature.check ? 'Present' : 'Missing'}`);
});
} else {
console.log(`❌ Find a Trainer page failed to load: ${result.status}`);
}
}
// Test 5: Check direct profile URL pattern
function checkDirectProfileURL() {
return new Promise((resolve) => {
const testUrl = `${STAGING_URL}/find-a-trainer/profile/5840/`;
https.get(testUrl, (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
const hasDirectProfile = data.includes('hvac-direct-profile-container');
const hasBackButton = data.includes('hvac-back-to-directory');
const isProfileView = data.includes('Trainer Profile');
resolve({
status: res.statusCode,
hasDirectProfile,
hasBackButton,
isProfileView,
url: testUrl
});
});
}).on('error', () => {
resolve({ status: 'ERROR', url: testUrl });
});
});
}
async function verifyDirectProfileURL() {
console.log('\n🔗 Testing Direct Profile URL...');
const result = await checkDirectProfileURL();
if (result.status === 200) {
console.log('✅ Direct profile URL accessible');
console.log(` 🌐 Test URL: ${result.url}`);
const features = [
{ check: result.hasDirectProfile, name: 'Direct profile container' },
{ check: result.hasBackButton, name: 'Back to directory button' },
{ check: result.isProfileView, name: 'Profile view layout' }
];
features.forEach(feature => {
const status = feature.check ? '✅' : '❌';
console.log(`${status} ${feature.name}: ${feature.check ? 'Present' : 'Missing'}`);
});
} else {
console.log(`❌ Direct profile URL failed: ${result.status}`);
}
}
// Main verification function
async function runVerification() {
console.log('🚀 Starting Deployment Verification...\n');
try {
await verifyAssetFiles();
await verifyFindTrainerPage();
await verifyDirectProfileURL();
console.log('\n✅ Deployment Verification Complete!');
console.log('\n📋 Summary:');
console.log('• Profile sharing assets deployed');
console.log('• Find a Trainer page updated with sharing support');
console.log('• Direct profile URL pattern functional');
console.log('• QR code and modal templates integrated');
console.log('\n🔗 Test URLs:');
console.log(`• Find a Trainer: ${STAGING_URL}/find-a-trainer/`);
console.log(`• Sample Profile: ${STAGING_URL}/find-a-trainer/profile/5840/`);
console.log(`• Trainer Login: ${STAGING_URL}/training-login/`);
} catch (error) {
console.error('❌ Verification failed:', error.message);
}
}
// Run the verification
runVerification();