# بدون دوره فعال ✔ بدون دوره: adjust خطا ✔ بدون دوره: صفحه هشدار می‌دهد ✔ دوره ساخته شد: اعتبار ۳۰۰$ # دسترسی و UI ✔ دکمه‌ی تغییر مقدار در صفحه‌ی بونوس ✔ ادمین غیر ارشد رد می‌شود ✔ ارشد: صفحه‌ی راهنما با اعتبار فعلی # ورودی نامعتبر ✔ رد: بدون علامت (50 دلیل) ✔ رد: بدون دلیل (+50) ✔ رد: دلیل کوتاه (+50 ab) ✔ رد: صفر (+0 دلیل خوب) ✔ رد: غیرعدد (+abc دلیل) ✔ رد: سه رقم اعشار (+50.555 دلیل) ✔ رد: بیش از سقف (-1000000 دلیل) ✔ کاهش که اعتبار را زیر ۱$ ببرد رد می‌شود # افزایش ✔ صفحه‌ی تأیید: تغییر، اعتبار قبل/بعد، دلیل ✔ تا تأیید هیچ چیز عوض نشده ✔ بعد از تأیید: موجودی +۵۰$ ✔ اعتبار دوره هم +۵۰$ شد ✔ یک ردیف دفتر کل bonus_adjust با balance_after درست ✔ ردیف تاریخچه با دلیل و ادمین ✔ پیام به کاربر با دلیل ✔ وضعیت ادمین پاک شد؛ دوبار زدن دکمه اثری ندارد ✔ تأیید تکراری اعمال نمی‌شود ✔ صفحه‌ی بونوس آخرین تغییر را نشان می‌دهد ✔ audit ثبت شد # کاهش ✔ کاهش: موجودی و اعتبار ۳۲۰$ ✔ پیام کاهش به کاربر # سود دوره دست‌نخورده می‌ماند (مهم‌ترین تست) ✔ پیش از تغییر: سود = ۴۰$ ✔ بعد از افزایش ۱۰۰$: سود هنوز ۴۰$ ✔ بعد از کاهش ۲۰$: سود هنوز ۴۰$ ✔ تسویه: سود واریزی دقیقاً ۴۰$ (نه ۱۰۰$ یا ۲۰$ اضافه/کم) ✔ حساب بونوس بعد از تسویه صفر # محافظ‌ها ✔ دلیل خالی/کوتاه در موتور رد می‌شود ✔ مبلغ صفر رد ✔ مبلغ بیش از سقف رد ✔ کاهش زیر ۱$ رد ✔ کاهش بیش از مارجین آزاد وقتی معامله باز است رد می‌شود ✔ کاهش در حد مارجین آزاد با معامله‌ی باز مجاز است ✔ رد شدن، هیچ اثری باقی نمی‌گذارد (اتمیک) ✔ افزایش با معامله‌ی باز مجاز است ✔ کاربر دوره‌ی دیگری ندارد: ادمین فقط دوره‌ی فعال همان کاربر ✔ زنجیره‌ی balance_after دفتر کل سازگار است # پیام کاربر (زبان‌ها) ✔ انگلیسی: دلیل انگلیسی نشان داده می‌شود ✔ آلمانی: دلیل فارسی پنهان و متن آلمانی OK=44 BAD=0