some improve
This commit is contained in:
1 parent
fa73a734a0
commit
2e5d0bcdd3
17 files changed
+1512
-226
No files matched your search
@@ -368,6 +368,25 @@ class AppointmentLifetimeSimulationTests(SimulationBase):
|
||||
make_action(self.customer, 'nasb', 'finish', action_dt=NOW, finish_dt=NOW)
|
||||
self.assertNotIn(self.customer.pk, manual_holds_map())
|
||||
|
||||
def test_same_microsecond_visit_still_kills_appointment(self):
|
||||
"""ثبت بازدید در همان لحظهٔ هماهنگی هم قرار را باطل میکند.
|
||||
|
||||
``createdDT`` روی SQLite/ویندوز دقت کافی ندارد و دو رکورد پشتسرهم میتوانند
|
||||
مقدار یکسان بگیرند؛ مقایسه با ``id`` بهعنوان مرز تساوی، این حالت را هم
|
||||
درست تشخیص میدهد (قبلاً تست به زمان اجرا وابسته و ناپایدار بود).
|
||||
"""
|
||||
from admin_panel.models import Action
|
||||
|
||||
self._hold_customer()
|
||||
visit = make_action(self.customer, 'bazdid', 'finish',
|
||||
action_dt=NOW, finish_dt=NOW)
|
||||
# هر دو رکورد همان createdDT را میگیرند (بازسازی شرط مسابقه).
|
||||
stamp = Action.objects.get(
|
||||
customer=self.customer, actionType='hamahangi',
|
||||
).createdDT
|
||||
Action.objects.filter(pk=visit.pk).update(createdDT=stamp)
|
||||
self.assertNotIn(self.customer.pk, manual_holds_map())
|
||||
|
||||
|
||||
class FollowupDaySimulationTests(SimulationBase):
|
||||
"""فهرست «نیازمند پیگیری امروز»: کارِ باقیمانده، نه آرشیو."""
|
||||
@@ -397,6 +416,45 @@ class FollowupDaySimulationTests(SimulationBase):
|
||||
make_action(self.customer, 'bazdid', 'finish', action_dt=NOW, finish_dt=NOW)
|
||||
self.assertIn(self.customer.pk, followups_on_date(yesterday))
|
||||
|
||||
# --- «نصب» هم مثل بازدید فهرست کار را میبندد ---
|
||||
# قاعدهٔ کسبوکار: نصب و بازدید هر دو چرخه را از نو شروع میکنند
|
||||
# (``_CYCLE_RESET_TYPES``) و قرار دستی را باطل میکنند؛ پس فهرست «نیازمند
|
||||
# پیگیری» هم باید با هر دو بسته شود.
|
||||
def test_install_done_today_clears_today_row(self):
|
||||
"""«نصبِ انجامشدهٔ امروز» هم ردیف امروز را میبندد (مثل بازدید)."""
|
||||
make_action(self.customer, 'hamahangi', 'finish',
|
||||
action_dt=NOW, finish_dt=NOW)
|
||||
self.assertIn(self.customer.pk, followups_on_date(timezone.localdate()))
|
||||
make_action(self.customer, 'nasb', 'finish', action_dt=NOW, finish_dt=NOW)
|
||||
self.assertNotIn(self.customer.pk, followups_on_date(timezone.localdate()))
|
||||
ids, _ = self.stale_ids('today')
|
||||
self.assertNotIn(self.customer.pk, ids)
|
||||
|
||||
def test_scheduled_install_hides_today_row(self):
|
||||
"""«نصب» با وضعیت waite و تاریخ **آینده** ⇒ ردیف امروز پنهان میشود."""
|
||||
make_action(self.customer, 'hamahangi', 'finish',
|
||||
action_dt=NOW, finish_dt=NOW)
|
||||
self.assertIn(self.customer.pk, followups_on_date(timezone.localdate()))
|
||||
make_action(self.customer, 'nasb', 'waite', action_dt=at(7))
|
||||
self.assertNotIn(self.customer.pk, followups_on_date(timezone.localdate()))
|
||||
ids, _ = self.stale_ids('today')
|
||||
self.assertNotIn(self.customer.pk, ids)
|
||||
|
||||
def test_old_pending_install_does_not_hide(self):
|
||||
"""نصبِ «در انتظار» با تاریخ گذشته قرار فعال نیست ⇒ ردیف میماند."""
|
||||
make_action(self.customer, 'hamahangi', 'finish',
|
||||
action_dt=NOW, finish_dt=NOW)
|
||||
make_action(self.customer, 'nasb', 'waite', action_dt=at(-30))
|
||||
self.assertIn(self.customer.pk, followups_on_date(timezone.localdate()))
|
||||
|
||||
def test_install_yesterday_does_not_clear_today_row(self):
|
||||
"""نصبِ دیروز، موعدِ امروز را نمیبندد (اگر موعد تازهای گذاشته شده)."""
|
||||
make_action(self.customer, 'hamahangi', 'finish',
|
||||
action_dt=NOW, finish_dt=NOW)
|
||||
make_action(self.customer, 'nasb', 'finish',
|
||||
action_dt=at(-1), finish_dt=at(-1))
|
||||
self.assertIn(self.customer.pk, followups_on_date(timezone.localdate()))
|
||||
|
||||
|
||||
class TaskListBoundaryTests(SimulationBase):
|
||||
"""«لیست وظایف امروز»: مرزهای روز به وقت محلی و aware.
|
||||
@@ -744,8 +802,9 @@ class MissedViewSimulationTests(SimulationBase):
|
||||
"""رفتار فهرست ``?view=today&missed=1`` پس از رفع باگ.
|
||||
|
||||
قاعدهٔ کسبوکار: این فهرست فقط «پیگیریهای واقعاً باقیمانده» را نشان میدهد.
|
||||
هر مشتری که (الف) بازدیدش از موعد به بعد انجام شده، یا (ب) قرار دستیِ معتبر
|
||||
دارد، یا (ج) بازدیدِ در انتظار از آن روز دارد، از فهرست خارج میشود.
|
||||
هر مشتری که (الف) بازدید یا نصبش از موعد به بعد انجام شده، یا (ب) قرار
|
||||
دستیِ معتبر دارد، یا (ج) بازدید/نصبِ در انتظار از آن روز دارد، از فهرست
|
||||
خارج میشود.
|
||||
"""
|
||||
|
||||
URL = '/panel/entezar/?view=today&missed=1'
|
||||
@@ -807,6 +866,25 @@ class MissedViewSimulationTests(SimulationBase):
|
||||
ids, _ = self.missed()
|
||||
self.assertNotIn(self.customer.pk, ids)
|
||||
|
||||
def test_pending_install_removes_from_missed(self):
|
||||
"""«نصبِ» در انتظار با تاریخ آینده هم مشتری را از missed خارج میکند."""
|
||||
make_action(self.customer, 'hamahangi', 'finish',
|
||||
action_dt=at(-3), finish_dt=at(-3))
|
||||
make_action(self.customer, 'nasb', 'waite', action_dt=at(5))
|
||||
ids, _ = self.missed()
|
||||
self.assertNotIn(self.customer.pk, ids)
|
||||
|
||||
def test_finished_install_after_coordination_is_not_listed(self):
|
||||
"""هماهنگی دیروز + نصب انجامشدهٔ امروز ⇒ نباید در missed بیاید."""
|
||||
make_action(self.customer, 'hamahangi', 'finish',
|
||||
action_dt=at(-1, -2), finish_dt=at(-1))
|
||||
make_action(self.customer, 'nasb', 'finish',
|
||||
action_dt=NOW, finish_dt=NOW)
|
||||
ids, response = self.missed()
|
||||
self.assertNotIn(self.customer.pk, ids)
|
||||
self.assertNotIn(self.customer.pk, overdue_followups())
|
||||
self.assertEqual(response.context['counts']['followup_overdue'], 0)
|
||||
|
||||
def test_old_pending_visit_does_not_remove(self):
|
||||
"""بازدیدِ در انتظارِ قدیمیتر از موعد، قرار فعال نیست ⇒ در missed میماند."""
|
||||
make_action(self.customer, 'hamahangi', 'finish',
|
||||
|
||||
Reference in new issue
Block a user