jadwal distribusi multi-hari Rabu & Sabtu (V44/T49): DISTRIBUTE_WEEKDAY=wed,sat (CSV), next_boundary pilih hari terdekat, banner BERITA SETIAP RABU & SABTU ; image web+dist rebuild + push
This commit is contained in:
1 parent
bdb5923097
commit
a6db3be436
10 files changed
+173
-70
No files matched your search
+57
-2
@@ -1,9 +1,10 @@
|
||||
"""Oracle jadwal distribusi mingguan (V37): next_boundary + parser.
|
||||
"""Oracle jadwal distribusi (V37/V44): next_boundary + parser.
|
||||
|
||||
Murni logika kalender — ⊥ jaringan/DB. Verifikasi: first_run one-off diambil
|
||||
bila lebih dekat dari mingguan; batas dihitung ulang tiap iterasi loop
|
||||
(distribute_loop.main loop tak pernah keluar); first_run yang sudah lewat
|
||||
dibuang → hanya jadwal mingguan.
|
||||
dibuang → hanya jadwal mingguan; V44: jadwal multi-hari (CSV `wed,sat`) — event
|
||||
terdekat di antara hari-hari yang terdaftar, tetap hormati gating first_run.
|
||||
"""
|
||||
|
||||
from datetime import datetime
|
||||
@@ -36,6 +37,24 @@ def main():
|
||||
pass
|
||||
check('parse_weekday invalid raise', True)
|
||||
|
||||
# parse_weekdays (V44): satu hari atau CSV → list int unik terurut
|
||||
check('parse_weekdays sat', dl.parse_weekdays('sat') == [5])
|
||||
check('parse_weekdays wed,sat', dl.parse_weekdays('wed,sat') == [2, 5])
|
||||
check('parse_weekdays kebalikan', dl.parse_weekdays('sat,wed') == [2, 5])
|
||||
check('parse_weekdays duplikat', dl.parse_weekdays('wed,sat,wed') == [2, 5])
|
||||
check('parse_weekdays angka CSV', dl.parse_weekdays('2,5') == [2, 5])
|
||||
try:
|
||||
dl.parse_weekdays('')
|
||||
raise AssertionError('GAGAL: parse_weekdays kosong harus raise')
|
||||
except ValueError:
|
||||
pass
|
||||
try:
|
||||
dl.parse_weekdays('xyz')
|
||||
raise AssertionError('GAGAL: parse_weekdays tak valid harus raise')
|
||||
except ValueError:
|
||||
pass
|
||||
check('parse_weekdays invalid raise', True)
|
||||
|
||||
# parse_first_run: kosong → None, format → date
|
||||
check('parse_first_run kosong', dl.parse_first_run('') is None)
|
||||
check('parse_first_run None', dl.parse_first_run(None) is None)
|
||||
@@ -94,6 +113,42 @@ def main():
|
||||
t = dl.next_boundary(datetime(2026, 8, 6, 9, 0), 10, 2)
|
||||
check('Rabu → Rabu 12 Agt', t == datetime(2026, 8, 12, 10, 0))
|
||||
|
||||
# — V44: jadwal multi-hari Rabu & Sabtu ([2, 5]) —
|
||||
# Sebelum launch: Rabu/Sabtu sebelum 17 Agt dilewati → one-off Senin 17 Agt
|
||||
t = dl.next_boundary(datetime(2026, 8, 6, 9, 0), 10, [2, 5], fr)
|
||||
check('wed,sat sblm launch → one-off 17 Agt',
|
||||
t == datetime(2026, 8, 17, 10, 0))
|
||||
|
||||
# Setelah launch (Senin 17 Agt siang) → Rabu 19 Agt (bukan Sabtu 22)
|
||||
t = dl.next_boundary(datetime(2026, 8, 17, 11, 0), 10, [2, 5], fr)
|
||||
check('wed,sat stlh launch → Rabu 19 Agt',
|
||||
t == datetime(2026, 8, 19, 10, 0))
|
||||
|
||||
# Setelah Rabu 19 Agt siang → Sabtu 22 Agt (jeda terdekat berikutnya)
|
||||
t = dl.next_boundary(datetime(2026, 8, 19, 11, 0), 10, [2, 5], fr)
|
||||
check('wed,sat stlh Rabu lewat → Sabtu 22 Agt',
|
||||
t == datetime(2026, 8, 22, 10, 0))
|
||||
|
||||
# Tanpa first_run: dari Kamis 6 Agt → Sabtu 8 Agt (lebih dekat dari Rabu 12)
|
||||
t = dl.next_boundary(datetime(2026, 8, 6, 9, 0), 10, [2, 5])
|
||||
check('wed,sat tanpa fr → Sabtu 8 Agt',
|
||||
t == datetime(2026, 8, 8, 10, 0))
|
||||
|
||||
# Rabu pagi sebelum jam → Rabu hari itu juga
|
||||
t = dl.next_boundary(datetime(2026, 8, 12, 9, 0), 10, [2, 5])
|
||||
check('wed,sat Rabu jam sblm → hari ini',
|
||||
t == datetime(2026, 8, 12, 10, 0))
|
||||
|
||||
# Rabu siang setelah jam → Sabtu 15 Agt
|
||||
t = dl.next_boundary(datetime(2026, 8, 12, 11, 0), 10, [2, 5])
|
||||
check('wed,sat Rabu jam lewat → Sabtu 15 Agt',
|
||||
t == datetime(2026, 8, 15, 10, 0))
|
||||
|
||||
# Skalar int tetap kompatibel (normalisasi ke list)
|
||||
t = dl.next_boundary(datetime(2026, 8, 6, 9, 0), 10, 5)
|
||||
check('skalar int kompatibel → Sabtu 8 Agt',
|
||||
t == datetime(2026, 8, 8, 10, 0))
|
||||
|
||||
print(f'SEMUA UJI PASS ({CHECKS} checks)')
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user