shubraVeil/test_user_system.php
2024-12-25 13:05:50 +02:00

103 lines
4.1 KiB
PHP

<?php
require_once 'includes/config.php';
require_once 'includes/Security.php';
echo "=== اختبار نظام المستخدمين ===\n\n";
try {
// اختبار الاتصال بقاعدة البيانات
$conn = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
if ($conn->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();
}
}