Files
shopify-ai-backup/chat/templates/headers and footers/pc-head-and-foot/FINAL-PLUGIN-TEST.php
2026-02-09 18:09:12 +00:00

454 lines
15 KiB
PHP

<?php
/**
* FINAL PLUGIN TEST - Tests everything from scratch
* This file tests all core functionality step by step
*/
// Bootstrap WordPress
$wp_load_path = dirname(__FILE__) . '/../../../../wp-load.php';
if (!file_exists($wp_load_path)) {
die('ERROR: WordPress not found. Please run this from a WordPress site.');
}
require_once $wp_load_path;
// Prevent caching
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Content-Type: text/html; charset=' . get_option('blog_charset'));
?>
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Final Plugin Test</title>
<style>
* { box-sizing: border-box; }
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
max-width: 900px; margin: 0 auto; padding: 20px; background: #f1f1f1; }
h1 { background: #23282d; color: white; padding: 20px; margin: -20px -20px 20px; border-radius: 0; }
h2 { color: #23282d; border-bottom: 2px solid #0073aa; padding-bottom: 10px; }
.test-section { background: white; padding: 20px; margin: 20px 0; border-radius: 5px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
.pass { background: #d4edda; color: #155724; padding: 10px; border-radius: 4px; margin: 5px 0; border-left: 4px solid #28a745; }
.fail { background: #f8d7da; color: #721c24; padding: 10px; border-radius: 4px; margin: 5px 0; border-left: 4px solid #dc3545; }
.info { background: #cce5ff; color: #004085; padding: 10px; border-radius: 4px; margin: 5px 0; border-left: 4px solid #0073aa; }
pre { background: #f8f9fa; padding: 10px; overflow-x: auto; border-radius: 4px; font-size: 12px; }
.summary { background: #23282d; color: white; padding: 30px; margin: 30px -20px -20px; text-align: center; border-radius: 0 0 5px 5px; }
.summary h2 { color: white; border: none; }
.pass-all { color: #28a745; font-size: 24px; }
.fail-any { color: #dc3545; font-size: 24px; }
table { width: 100%; border-collapse: collapse; margin: 10px 0; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background: #f5f5f5; }
</style>
</head>
<body <?php body_class(); ?>>
<h1>Headers & Footers Plugin - Complete Test</h1>
<?php
$results = array();
$all_pass = true;
$test_start = microtime(true);
// ==========================================
// STEP 1: Check if WordPress loaded
// ==========================================
echo '<div class="test-section">';
echo '<h2>Step 1: WordPress Environment</h2>';
$wp_version = get_bloginfo('version');
$php_version = PHP_VERSION;
$wp_url = get_bloginfo('url');
$wp_admin_url = admin_url();
echo '<table>';
echo '<tr><th>Component</th><th>Status</th></tr>';
echo '<tr><td>WordPress Version</td><td>' . $wp_version . '</td></tr>';
echo '<tr><td>PHP Version</td><td>' . $php_version . '</td></tr>';
echo '<tr><td>Site URL</td><td>' . $wp_url . '</td></tr>';
echo '</table>';
if (defined('ABSPATH')) {
echo '<p class="pass">ABSPATH defined: ' . ABSPATH . '</p>';
} else {
echo '<p class="fail">ABSPATH not defined!</p>';
$all_pass = false;
}
echo '</div>';
// ==========================================
// STEP 2: Check plugin files
// ==========================================
echo '<div class="test-section">';
echo '<h2>Step 2: Plugin Files</h2>';
$plugin_file = plugin_dir_path(__FILE__) . 'pc-headers-and-footers-and-ad-pixels-5ake.php';
$admin_file = dirname(__FILE__) . '/admin/class-admin.php';
$database_file = dirname(__FILE__) . '/includes/class-database.php';
$snippet_file = dirname(__FILE__) . '/includes/class-snippet.php';
$public_file = dirname(__FILE__) . '/public/class-public.php';
$files = array(
'Main plugin' => $plugin_file,
'Admin class' => $admin_file,
'Database class' => $database_file,
'Snippet class' => $snippet_file,
'Public class' => $public_file,
);
foreach ($files as $name => $path) {
if (file_exists($path)) {
$size = filesize($path);
echo "<p class='pass'>✓ $name ($size bytes)</p>";
} else {
echo "<p class='fail'>✗ $name NOT FOUND</p>";
$all_pass = false;
}
}
echo '</div>';
// ==========================================
// STEP 3: Include and test classes
// ==========================================
echo '<div class="test-section">';
echo '<h2>Step 3: Load Plugin Classes</h2>';
// Include classes
try {
require_once $database_file;
echo '<p class="info">Including class-database.php...</p>';
require_once $snippet_file;
echo '<p class="info">Including class-snippet.php...</p>';
echo '<p class="pass">✓ All classes included successfully</p>';
} catch (Exception $e) {
echo '<p class="fail">✗ Include error: ' . $e->getMessage() . '</p>';
$all_pass = false;
}
// Check classes exist
if (class_exists('PC_HFAP_Database')) {
echo '<p class="pass">✓ PC_HFAP_Database class exists</p>';
} else {
echo '<p class="fail">✗ PC_HFAP_Database class not found</p>';
$all_pass = false;
}
if (class_exists('PC_HFAP_Snippet')) {
echo '<p class="pass">✓ PC_HFAP_Snippet class exists</p>';
} else {
echo '<p class="fail">✗ PC_HFAP_Snippet class not found</p>';
$all_pass = false;
}
echo '</div>';
// ==========================================
// STEP 4: Test database table
// ==========================================
echo '<div class="test-section">';
echo '<h2>Step 4: Database Table</h2>';
global $wpdb;
try {
// Create tables
PC_HFAP_Database::create_tables();
// Get table name
$table_name = PC_HFAP_Database::get_table_name();
echo '<p class="info">Table name: ' . $table_name . '</p>';
// Check if table exists
$table_check = $wpdb->get_var($wpdb->prepare('SHOW TABLES LIKE %s', $table_name));
if ($table_name === $table_check) {
echo '<p class="pass">✓ Table exists: ' . $table_name . '</p>';
// Get table structure
$columns = $wpdb->get_results("DESCRIBE $table_name", ARRAY_A);
echo '<p>Table structure:</p>';
echo '<table><tr><th>Column</th><th>Type</th></tr>';
foreach ($columns as $col) {
echo '<tr><td>' . $col['Field'] . '</td><td>' . $col['Type'] . '</td></tr>';
}
echo '</table>';
// Count existing
$count = $wpdb->get_var("SELECT COUNT(*) FROM $table_name");
echo '<p class="info">Current snippets: ' . $count . '</p>';
} else {
echo '<p class="fail">✗ Table does NOT exist!</p>';
$all_pass = false;
}
} catch (Exception $e) {
echo '<p class="fail">✗ Database error: ' . $e->getMessage() . '</p>';
$all_pass = false;
}
echo '</div>';
// ==========================================
// STEP 5: Test CREATE operation
// ==========================================
echo '<div class="test-section">';
echo '<h2>Step 5: Create Snippet</h2>';
$test_snippet_id = 0;
$test_title = 'Test Snippet ' . date('Y-m-d H:i:s');
try {
$data = array(
'title' => $test_title,
'location' => 'header',
'code' => '<!-- Test header code -->'
);
$snippet = new PC_HFAP_Snippet($data);
$result = $snippet->save();
if ($result) {
$test_snippet_id = $result;
echo '<p class="pass">✓ Snippet created with ID: ' . $result . '</p>';
echo '<p>Title: ' . htmlspecialchars($test_title) . '</p>';
} else {
echo '<p class="fail">✗ Failed to create snippet</p>';
echo '<p>Error: ' . $wpdb->last_error . '</p>';
$all_pass = false;
}
} catch (Exception $e) {
echo '<p class="fail">✗ Create error: ' . $e->getMessage() . '</p>';
$all_pass = false;
}
echo '</div>';
// ==========================================
// STEP 6: Test READ operation
// ==========================================
echo '<div class="test-section">';
echo '<h2>Step 6: Read Snippet</h2>';
if ($test_snippet_id > 0) {
try {
$snippet = PC_HFAP_Snippet::get_by_id($test_snippet_id);
if ($snippet) {
echo '<p class="pass">✓ Snippet retrieved successfully</p>';
echo '<table>';
echo '<tr><td>ID</td><td>' . $snippet->get_id() . '</td></tr>';
echo '<tr><td>Title</td><td>' . htmlspecialchars($snippet->get_title()) . '</td></tr>';
echo '<tr><td>Location</td><td>' . $snippet->get_location() . '</td></tr>';
echo '<tr><td>Code</td><td><code>' . htmlspecialchars($snippet->get_code()) . '</code></td></tr>';
echo '</table>';
} else {
echo '<p class="fail">✗ Snippet not found!</p>';
$all_pass = false;
}
} catch (Exception $e) {
echo '<p class="fail">✗ Read error: ' . $e->getMessage() . '</p>';
$all_pass = false;
}
} else {
echo '<p class="fail">✗ Skipped (no test snippet)</p>';
$all_pass = false;
}
echo '</div>';
// ==========================================
// STEP 7: Test UPDATE operation
// ==========================================
echo '<div class="test-section">';
echo '<h2>Step 7: Update Snippet</h2>';
if ($test_snippet_id > 0) {
try {
$snippet = PC_HFAP_Snippet::get_by_id($test_snippet_id);
if ($snippet) {
$new_title = 'Updated ' . date('Y-m-d H:i:s');
$new_code = '<style>/* Updated CSS */</style>';
$snippet->set_title($new_title);
$snippet->set_code($new_code);
$update_result = $snippet->save();
if ($update_result !== false) {
// Verify update
$updated = PC_HFAP_Snippet::get_by_id($test_snippet_id);
if ($updated->get_title() === $new_title) {
echo '<p class="pass">✓ Title updated successfully</p>';
} else {
echo '<p class="fail">✗ Title not updated</p>';
$all_pass = false;
}
if ($updated->get_code() === $new_code) {
echo '<p class="pass">✓ Code updated successfully</p>';
} else {
echo '<p class="fail">✗ Code not updated</p>';
$all_pass = false;
}
} else {
echo '<p class="fail">✗ Update failed</p>';
echo '<p>Error: ' . $wpdb->last_error . '</p>';
$all_pass = false;
}
} else {
echo '<p class="fail">✗ Snippet not found for update</p>';
$all_pass = false;
}
} catch (Exception $e) {
echo '<p class="fail">✗ Update error: ' . $e->getMessage() . '</p>';
$all_pass = false;
}
} else {
echo '<p class="fail">✗ Skipped (no test snippet)</p>';
$all_pass = false;
}
echo '</div>';
// ==========================================
// STEP 8: Test get_all()
// ==========================================
echo '<div class="test-section">';
echo '<h2>Step 8: Get All Snippets</h2>';
try {
$snippets = PC_HFAP_Snippet::get_all();
echo '<p class="pass">✓ get_all() returned ' . count($snippets) . ' snippet(s)</p>';
if (!empty($snippets)) {
echo '<table><tr><th>ID</th><th>Title</th><th>Location</th></tr>';
foreach ($snippets as $s) {
echo '<tr>';
echo '<td>' . $s->get_id() . '</td>';
echo '<td>' . htmlspecialchars($s->get_title()) . '</td>';
echo '<td>' . $s->get_location() . '</td>';
echo '</tr>';
}
echo '</table>';
}
} catch (Exception $e) {
echo '<p class="fail">✗ get_all() error: ' . $e->getMessage() . '</p>';
$all_pass = false;
}
echo '</div>';
// ==========================================
// STEP 9: Test location methods
// ==========================================
echo '<div class="test-section">';
echo '<h2>Step 9: Location Methods</h2>';
try {
$headers = PC_HFAP_Snippet::get_headers();
$bodies = PC_HFAP_Snippet::get_bodies();
$footers = PC_HFAP_Snippet::get_footers();
echo '<p class="pass">✓ get_headers(): ' . count($headers) . ' snippets</p>';
echo '<p class="pass">✓ get_bodies(): ' . count($bodies) . ' snippets</p>';
echo '<p class="pass">✓ get_footers(): ' . count($footers) . ' snippets</p>';
} catch (Exception $e) {
echo '<p class="fail">✗ Location error: ' . $e->getMessage() . '</p>';
$all_pass = false;
}
echo '</div>';
// ==========================================
// STEP 10: Test DELETE operation
// ==========================================
echo '<div class="test-section">';
echo '<h2>Step 10: Delete Snippet</h2>';
if ($test_snippet_id > 0) {
try {
$snippet = PC_HFAP_Snippet::get_by_id($test_snippet_id);
if ($snippet) {
$delete_result = $snippet->delete();
if ($delete_result) {
// Verify deletion
$deleted = PC_HFAP_Snippet::get_by_id($test_snippet_id);
if (!$deleted) {
echo '<p class="pass">✓ Snippet deleted successfully</p>';
} else {
echo '<p class="fail">✗ Snippet still exists after delete</p>';
$all_pass = false;
}
} else {
echo '<p class="fail">✗ Delete operation returned false</p>';
echo '<p>Error: ' . $wpdb->last_error . '</p>';
$all_pass = false;
}
} else {
echo '<p class="fail">✗ Snippet not found for delete</p>';
$all_pass = false;
}
} catch (Exception $e) {
echo '<p class="fail">✗ Delete error: ' . $e->getMessage() . '</p>';
$all_pass = false;
}
} else {
echo '<p class="fail">✗ Skipped (no test snippet)</p>';
$all_pass = false;
}
echo '</div>';
// ==========================================
// FINAL SUMMARY
// ==========================================
$test_end = microtime(true);
$duration = round(($test_end - $test_start) * 1000, 2);
echo '<div class="summary">';
echo '<h2>FINAL RESULT</h2>';
echo '<p>Test completed in ' . $duration . 'ms</p>';
if ($all_pass) {
echo '<p class="pass-all">✓ ALL TESTS PASSED!</p>';
echo '<p>The plugin is working correctly.</p>';
} else {
echo '<p class="fail-any">✗ SOME TESTS FAILED</p>';
echo '<p>Please review the errors above.</p>';
}
echo '</div>';
// ==========================================
// NEXT STEPS
// ==========================================
echo '<div class="test-section">';
echo '<h2>Next Steps</h2>';
echo '<ul>';
echo '<li><a href="' . admin_url('admin.php?page=pc-hfap-snippets') . '">Go to Snippets Admin Page</a></li>';
echo '<li><a href="' . admin_url('admin.php?page=pc-hfap-add-snippet') . '">Add New Snippet</a></li>';
echo '<li><a href="' . home_url() . '">View Your Site</a></li>';
echo '</ul>';
echo '<h3>Troubleshooting</h3>';
echo '<ul>';
echo '<li>If tests failed, check WordPress debug log</li>';
echo '<li>Ensure plugin is properly uploaded</li>';
echo '<li>Try deactivating and reactivating the plugin</li>';
echo '</ul>';
echo '</div>';
echo '</body></html>';