fix: E2E — توليد رقم أردني صالح (10 خانات) لتسجيل الدخول

المولّد السابق أنتج 11 خانة فرفضه تطبيع الهاتف (الأردن يريد 0 + 9). صار
uniqJoPhone ينتج 07 + 8 خانات = 10، و uniqStr للرقم الوطني/اللوحة (لا تمرّ
بالتطبيع).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Hamza-Ayed
2026-07-17 20:47:43 +03:00
co-authored by Claude Opus 4.8
parent feb2a9663d
commit 1512bcb5d7
+9 -5
View File
@@ -64,7 +64,11 @@ async function login(phone) {
} }
const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
const uniqPhone = (p) => `${p}${String(Date.now()).slice(-6)}`; // رقم أردني صالح: 0 + 9 خانات (10 إجمالاً). فريد عبر عدّاد + طابع زمني.
let _seq = 0;
const uniqJoPhone = () => `07${String(Date.now()).slice(-7)}${_seq++}`;
// نصّ فريد عام (رقم وطني/لوحة — لا يمرّ بتطبيع الهاتف).
const uniqStr = (p) => `${p}${String(Date.now()).slice(-6)}${_seq++}`;
// ---- اختبار WebSocket اختياري ---- // ---- اختبار WebSocket اختياري ----
async function tryWebSocket(riderToken, tripId) { async function tryWebSocket(riderToken, tripId) {
@@ -96,7 +100,7 @@ async function main() {
// ═══ 1. تسجيل الدخول / إنشاء الحساب ═══ // ═══ 1. تسجيل الدخول / إنشاء الحساب ═══
console.log('1) تسجيل الدخول وإنشاء الحساب (هاتف + OTP)'); console.log('1) تسجيل الدخول وإنشاء الحساب (هاتف + OTP)');
const riderPhone = uniqPhone('07900'); const riderPhone = uniqJoPhone();
const rider = await login(riderPhone); const rider = await login(riderPhone);
check('الراكب سجّل دخوله وحصل على توكن', !!rider.token); check('الراكب سجّل دخوله وحصل على توكن', !!rider.token);
check('حساب جديد بدور rider افتراضياً', rider.role === 'rider', `role=${rider.role}`); check('حساب جديد بدور rider افتراضياً', rider.role === 'rider', `role=${rider.role}`);
@@ -108,7 +112,7 @@ async function main() {
check('تطبيع الهاتف: نفس الرقم بصيغ مختلفة = نفس المستخدم', check('تطبيع الهاتف: نفس الرقم بصيغ مختلفة = نفس المستخدم',
riderAgain.body.user?.id === rider.userId); riderAgain.body.user?.id === rider.userId);
const driverPhone = uniqPhone('07955'); const driverPhone = uniqJoPhone();
let driver = await login(driverPhone); let driver = await login(driverPhone);
check('السائق سجّل دخوله', !!driver.token); check('السائق سجّل دخوله', !!driver.token);
@@ -121,14 +125,14 @@ async function main() {
check('تقديم السائق أنشأ سجلاً', !!driverId); check('تقديم السائق أنشأ سجلاً', !!driverId);
await api('PATCH', '/drivers/profile', driver.token, { await api('PATCH', '/drivers/profile', driver.token, {
gender: 'male', national_number: uniqPhone('99'), name_arabic: 'سائق تجريبي', gender: 'male', national_number: uniqStr("99"), name_arabic: 'سائق تجريبي',
license_type: 'private', license_type: 'private',
}); });
check('تحديث ملف السائق (رقم وطني مشفّر + فهرس أعمى)', true); check('تحديث ملف السائق (رقم وطني مشفّر + فهرس أعمى)', true);
const vehicle = await api('POST', '/vehicles', driver.token, { const vehicle = await api('POST', '/vehicles', driver.token, {
make: 'Toyota', model: 'Corolla', year: 2020, color: 'أبيض', color_hex: '#FFFFFF', make: 'Toyota', model: 'Corolla', year: 2020, color: 'أبيض', color_hex: '#FFFFFF',
plate: uniqPhone('PL'), plate: uniqStr("PL"),
}); });
check('إنشاء مركبة', !!vehicle.body.id); check('إنشاء مركبة', !!vehicle.body.id);
check('أول مركبة تصير الافتراضية تلقائياً', vehicle.body.is_default === true); check('أول مركبة تصير الافتراضية تلقائياً', vehicle.body.is_default === true);