@admin @lifecycle Feature: Booking lifecycle — rule-based cron assertions Verifies each cron rule fires against pre-seeded bookings whose dates are computed relative to today in testReset, so the rules always trigger. Background: Given I am logged in as "christina@seminarhof.example" with password "admin1234" # ── R1: contract + deposit email ──────────────────────────────────────── Scenario: lifecycle R1 — cron sends contract and deposit email to a reserved booking # b_lc_reserved: reserved, no contractSentAt, startDate 200 days away Then the lifecycle cron sent 1 contracts And the audit log for "b_lc_reserved" includes "Vertrag & Anzahlungsrechnung" # ── R2: deposit reminder ───────────────────────────────────────────────── Scenario: lifecycle R2 — cron sends deposit reminder when deposit is 7+ days unpaid # b_lc_contract_sent: contractSentAt 8 days ago, deposit invoice unpaid Then the lifecycle cron sent 1 reminders And the audit log for "b_lc_contract_sent" includes "Anzahlungserinnerung" # ── R4: auto-complete ──────────────────────────────────────────────────── Scenario: lifecycle R4 — cron auto-completes a confirmed booking after it ends # b_lc_confirmed: confirmed, endDate yesterday Then the lifecycle cron completed 2 bookings And the booking "b_lc_confirmed" has status "Beendet"