مثال بمحتوى افتراضي
تعديل برمجي صغير يمكنك مراجعته
ملف تغييرات لتحسين فحص بسيط للبريد الإلكتروني، مع اختبارات توضّح السلوك المتوقع.
checkout-fix.diffنزّل الملف التوضيحي
هذا ملف أُعدّ للتوضيح ويمكنك عرضه وتنزيله. محتواه افتراضي، ولم يُنتج بتنفيذ مهمة فعلية بالذكاء الاصطناعي.
ما الذي سيتغيّر؟
كان الفحص الأصلي يقبل أي نص يحتوي على الرمز @. يزيل التعديل المقترح المسافات المحيطة، ويرفض القيم غير النصية، ويتحقق من صيغة بسيطة لعنوان البريد.
- إزالة المسافات المحيطة قبل فحص العنوان.
- رفض القيم الفارغة وغير النصية والعناوين ذات الصيغة غير الصحيحة.
- إضافة اختبارات لحالات مقبولة وأخرى مرفوضة.
التغييرات المقترحة
diff --git a/src/email.mjs b/src/email.mjs
--- a/src/email.mjs
+++ b/src/email.mjs
@@ -1,3 +1,5 @@
export function isCheckoutEmail(value) {
- return typeof value === 'string' && value.includes('@');
+ if (typeof value !== 'string') return false;
+ const email = value.trim();
+ return /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email);
}
diff --git a/tests/email.test.mjs b/tests/email.test.mjs
new file mode 100644
--- /dev/null
+++ b/tests/email.test.mjs
@@ -0,0 +1,13 @@
+import test from 'node:test';
+import assert from 'node:assert/strict';
+import { isCheckoutEmail } from '../src/email.mjs';
+
+test('accepts basic addresses with surrounding spaces', () => {
+ assert.equal(isCheckoutEmail(' person@example.com '), true);
+});
+
+test('rejects malformed or non-text values', () => {
+ for (const value of ['', '@', 'person@', 'person@example', null]) {
+ assert.equal(isCheckoutEmail(value), false);
+ }
+});
هذا الفحص البسيط يوضّح طريقة مراجعة تعديل برمجي، وليس حلًا شاملًا للتحقق من عناوين البريد الإلكتروني.
كيف تفحص التعديل؟
أنشئ الملف src/email.mjs باستخدام الشيفرة الأصلية أدناه، وضع ملف التغييرات الذي نزّلته في مجلد المشروع. طبّق التغييرات ثم شغّل أمر الاختبار. تختبر هذه الحالات المثال الصغير، ولا تفحص نظام دفع كاملًا أو ترسل أي دفعة.
ملف المثال قبل التعديل · src/email.mjs
export function isCheckoutEmail(value) {
return typeof value === 'string' && value.includes('@');
}
git apply checkout-fix.diff
node --test tests/email.test.mjsفُحصت اختبارات المثال محليًا أثناء إعداد هذا الملف. فتح الصفحة لا يشغّل الشيفرة.