connect_error) { throw new Exception("فشل الاتصال بقاعدة البيانات: " . $conn->connect_error); } echo "✓ تم الاتصال بقاعدة البيانات بنجاح\n"; // التحقق من وجود جدول المستخدمين $result = $conn->query("SHOW TABLES LIKE 'users'"); if ($result->num_rows > 0) { echo "✓ جدول المستخدمين موجود\n"; } else { throw new Exception("جدول المستخدمين غير موجود"); } // التحقق من وجود جدول إعادة تعيين كلمات المرور $result = $conn->query("SHOW TABLES LIKE 'password_resets'"); if ($result->num_rows > 0) { echo "✓ جدول إعادة تعيين كلمات المرور موجود\n"; } else { throw new Exception("جدول إعادة تعيين كلمات المرور غير موجود"); } // اختبار إنشاء مستخدم جديد $test_username = "test_user_" . time(); $test_email = "test_" . time() . "@example.com"; $test_password = "Test@123456"; $hashed_password = Security::hashPassword($test_password); $stmt = $conn->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)"); $stmt->bind_param("sss", $test_username, $test_email, $hashed_password); if ($stmt->execute()) { echo "✓ تم إنشاء مستخدم اختباري بنجاح\n"; $test_user_id = $stmt->insert_id; } else { throw new Exception("فشل في إنشاء مستخدم اختباري"); } // اختبار تسجيل الدخول $stmt = $conn->prepare("SELECT id, password FROM users WHERE email = ?"); $stmt->bind_param("s", $test_email); $stmt->execute(); $result = $stmt->get_result(); if ($row = $result->fetch_assoc()) { if (Security::verifyPassword($test_password, $row['password'])) { echo "✓ تم التحقق من كلمة المرور بنجاح\n"; } else { throw new Exception("فشل في التحقق من كلمة المرور"); } } else { throw new Exception("فشل في العثور على المستخدم"); } // اختبار إنشاء رمز إعادة تعيين كلمة المرور $token = bin2hex(random_bytes(32)); $expiry = date('Y-m-d H:i:s', strtotime('+1 hour')); $stmt = $conn->prepare("INSERT INTO password_resets (user_id, token, expiry) VALUES (?, ?, ?)"); $stmt->bind_param("iss", $test_user_id, $token, $expiry); if ($stmt->execute()) { echo "✓ تم إنشاء رمز إعادة تعيين كلمة المرور بنجاح\n"; } else { throw new Exception("فشل في إنشاء رمز إعادة تعيين كلمة المرور"); } // اختبار التحقق من رمز إعادة تعيين كلمة المرور $stmt = $conn->prepare("SELECT user_id FROM password_resets WHERE token = ? AND expiry > NOW() AND used = 0"); $stmt->bind_param("s", $token); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { echo "✓ تم التحقق من رمز إعادة تعيين كلمة المرور بنجاح\n"; } else { throw new Exception("فشل في التحقق من رمز إعادة تعيين كلمة المرور"); } // تنظيف البيانات الاختبارية $conn->query("DELETE FROM password_resets WHERE user_id = " . $test_user_id); $conn->query("DELETE FROM users WHERE id = " . $test_user_id); echo "✓ تم تنظيف البيانات الاختبارية بنجاح\n"; echo "\n=== تم اكتمال الاختبار بنجاح ===\n"; } catch (Exception $e) { echo "\n❌ خطأ: " . $e->getMessage() . "\n"; } finally { if (isset($conn)) { $conn->close(); } }