feat: setup app review accounts and automated E2E simulation

This commit is contained in:
Hamza-Ayed
2026-07-18 21:08:42 +03:00
parent 836c77bb08
commit 79cb19d4f8
3 changed files with 61 additions and 79 deletions
+7 -4
View File
@@ -83,8 +83,10 @@ export class AuthService {
const ttl = this.config.get<number>('auth.otpTtl') ?? 300;
await this.redis.set(this.otpKey(tenant.id, canonical), code, 'EX', ttl);
if (this.devMode) {
this.logger.log(`OTP (dev) tenant=${tenant.slug} phone=${canonical} => ${code}`);
// أرقام مخصصة لاختبارات E2E ومراجعي Apple/Google (لا تستهلك رصيد).
const isAppReviewAccount = ['+962790000001', '+962790000002'].includes(canonical);
if (this.devMode || isAppReviewAccount) {
this.logger.log(`OTP (dev/review) tenant=${tenant.slug} phone=${canonical} => ${code}`);
return { success: true, message: 'OTP sent (dev)', dev_code: code };
}
@@ -105,8 +107,9 @@ export class AuthService {
// بصيغة مختلفة قليلاً عن مرة الإرسال (مثال المالك: "01" مقابل "1").
const canonical = this.phones.normalize(phone, tenant.countryPack);
// في وضع التطوير: الرمز الثابت 1234 يمرّ دائماً (تسهيل الاختبار).
const devBypass = this.devMode && code === '1234';
// في وضع التطوير أو حسابات مراجعة آبل/جوجل: الرمز الثابت 1234 يمرّ دائماً.
const isAppReviewAccount = ['+962790000001', '+962790000002'].includes(canonical);
const devBypass = (this.devMode || isAppReviewAccount) && code === '1234';
if (!devBypass) {
const attemptsKey = this.otpAttemptsKey(tenant.id, canonical);
const attempts = await this.redis.incr(attemptsKey);
@@ -35,6 +35,9 @@ export class DriversService {
userId: string,
data: Partial<Driver>,
): Promise<Driver> {
const user = await this.users.findById(tenantId, userId);
const isAppReview = ['+962790000001', '+962790000002'].includes(user?.phone ?? '');
let driver = await this.findByUser(tenantId, userId);
if (!driver) {
// حدّ الباقة يُفرض على السيرفر (docs/19 — K4): السائق رقم 501 يُرفض
@@ -55,7 +58,7 @@ export class DriversService {
vehicle_plate: data.vehicle_plate,
vehicle_color: data.vehicle_color,
docs: data.docs ?? {},
verification_status: 'pending',
verification_status: isAppReview ? 'approved' : 'pending',
});
driver = await this.repo.save(driver);
}