test(booking): freeze slot-mode contract before service-mode work
Adds SlotModeFrozenTest (#[Group('slot-mode-frozen')]) locking three things
against the multi-resource booking phase:
- GET /api/v1/appointment-slots response shape
- GET /api/v1/appointment-settings/month-availability/{uuid} response shape
- public method signatures of SlotCalculatorService
Fixtures are structural, not raw snapshots: a fixed past date is rejected by
isWithinBookingWindow so an empty snapshot would prove nothing. Instead a
deterministic schedule on a computed near-future date, with epoch/uuid values
normalized to placeholders. What stays locked is the contract itself: keys,
ordering, types and local times.
No production code touched.
Task: docs/new_feture/taskes/task-00-service-mode-completion/
Slot-mode contract: unchanged (--group=slot-mode-frozen green, 3 tests)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# چکلیست — تسک ۰۰ (تکمیل نوبتدهی سرویسی در clinicpro)
|
||||
|
||||
**وضعیت کلی:** ⏳ شروع نشده
|
||||
**آخرین بازبینی:** —
|
||||
**وضعیت کلی:** 🔄 در حال انجام — قابلیت ۱ از ۱۰ (خط سرخ) تمام شد
|
||||
**آخرین بازبینی:** ۱۴۰۵/۰۵/۰۸
|
||||
|
||||
قواعد: [_shared/definition-of-done.md](../_shared/definition-of-done.md) ·
|
||||
خط سرخها: [_shared/red-lines.md](../_shared/red-lines.md) ·
|
||||
@@ -13,15 +13,16 @@ UI: [_shared/ui-conventions.md](../_shared/ui-conventions.md)
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۰.۱ | `SlotModeFrozenTest` + سه fixture ساخته شد **پیش از** هر تغییر کد | ⏳ | ترتیب مهم است |
|
||||
| ۰.۲ | fixture ها با تاریخ ثابتاند، نه `time()` | ⏳ | |
|
||||
| ۰.۳ | کامنت «read-only، هیچ تسکی بهروزش نمیکند» بالای هر سه fixture | ⏳ | |
|
||||
| ۰.۴ | هیچ متد موجود `SlotCalculatorService` ویرایش نشد | ⏳ | فقط پارامتر اختیاری `excludeAppointmentId` روی `getServiceStartTimes` |
|
||||
| ۰.۵ | `GET /appointment-slots` بیتبهبیت دستنخورده | ⏳ | |
|
||||
| ۰.۶ | `GET /month-availability/{doctorUuid}` دستنخورده | ⏳ | |
|
||||
| ۰.۷ | `active_slot_key` و `refreshActiveSlotKey()` دستنخورده | ⏳ | تنها استثنا: صدا زدنش در `setIsReserve` |
|
||||
| ۰.۸ | `isSlotTaken` امضا و معنا دستنخورده | ⏳ | |
|
||||
| ۰.۹ | `--group=slot-mode-frozen` در پایان سبز | ⏳ | |
|
||||
| ۰.۱ | `SlotModeFrozenTest` + سه fixture ساخته شد **پیش از** هر تغییر کد | ✅ | `tests/Appointment/SlotModeFrozenTest.php` + `tests/Appointment/fixtures/` — هیچ کد تولیدیای هنوز لمس نشده |
|
||||
| ۰.۲ | ~~fixture ها با تاریخ ثابتاند، نه `time()`~~ → fixture **ساختاری** است | ✅ | **انحراف عمدی از متن تسک.** تاریخ ثابتِ گذشته را `isWithinBookingWindow` رد میکند و snapshot خالی چیزی را تضمین نمیکند. بهجایش: برنامهٔ قطعی (هر ۷ روز یک شیفت ۰۹:۰۰–۱۱:۰۰/۳۰ دقیقه) روی `+3 days`، و epoch/uuid با placeholder نرمال میشوند. آنچه قفل میشود: کلیدها، ترتیب، نوعها، ساعتهای محلی |
|
||||
| ۰.۳ | کامنت «read-only، هیچ تسکی بهروزش نمیکند» بالای هر سه fixture | ✅ | کلید `_readme` در دو JSON (در loader حذف میشود) + docblock در فایل PHP |
|
||||
| ۰.۴ | هیچ متد موجود `SlotCalculatorService` ویرایش نشد | ⏳ | قابلیت ۴ — فقط پارامتر اختیاری `excludeAppointmentId` روی `getServiceStartTimes`؛ fixture امضا **یک بار** بهروز میشود (header خودش این را مجاز کرده) |
|
||||
| ۰.۵ | `GET /appointment-slots` بیتبهبیت دستنخورده | ⏳ | در پایان تسک تأیید میشود |
|
||||
| ۰.۶ | `GET /month-availability/{doctorUuid}` دستنخورده | ⏳ | در پایان تسک تأیید میشود |
|
||||
| ۰.۷ | `active_slot_key` و `refreshActiveSlotKey()` دستنخورده | ✅ | `setIsReserve()` **وجود ندارد**؛ toggle رزرو از قبل با `rescheduleTo($start,$end,$isReserve)` انجام میشود که خودش `refreshActiveSlotKey()` را صدا میزند ([Appointment.php:316](../../../src/Appointment/Entity/Appointment.php)). یادداشت قبلی چکلیست غلط بود |
|
||||
| ۰.۸ | `isSlotTaken` امضا و معنا دستنخورده | ⏳ | در پایان تسک تأیید میشود |
|
||||
| ۰.۹ | `--group=slot-mode-frozen` سبز | ✅ | `OK (3 tests, 8 assertions)` — نیازمند `#[Group]` attribute بود، نه `@group` (PHPUnit 12 annotation را حذف کرده) |
|
||||
| ۰.۱۰ | baseline: کل `tests/Appointment` پیش از تغییرات سبز | ✅ | `OK (166 tests, 382 assertions)` |
|
||||
|
||||
## ۱. بکاند
|
||||
|
||||
|
||||
Reference in New Issue
Block a user