GuestDeclarationDraftStatus::canTransition('draft', 'payment_initializing'), 'payment initialization can become pending' => GuestDeclarationDraftStatus::canTransition('payment_initializing', 'pending_payment'), 'payment initialization can enter manual review' => GuestDeclarationDraftStatus::canTransition('payment_initializing', 'manual_review'), 'pending payment can be claimed' => GuestDeclarationDraftStatus::canTransition('pending_payment', 'processing'), 'pending payment can be resubmitted with updated details' => GuestDeclarationDraftStatus::canTransition('pending_payment', 'payment_initializing'), 'pending payment can enter manual review' => GuestDeclarationDraftStatus::canTransition('pending_payment', 'manual_review'), 'failed payment can be retried' => GuestDeclarationDraftStatus::canTransition('payment_failed', 'payment_initializing'), 'processing can complete' => GuestDeclarationDraftStatus::canTransition('processing', 'completed'), 'completed cannot be reopened' => !GuestDeclarationDraftStatus::canTransition('completed', 'pending_payment'), 'pending payment can expire' => GuestDeclarationDraftStatus::isExpired(99, 100), 'expiry boundary is expired' => GuestDeclarationDraftStatus::isExpired(100, 100), 'future expiry is not expired' => !GuestDeclarationDraftStatus::isExpired(101, 100), ]; foreach ($checks as $description => $passed) { if (!$passed) { fwrite(STDERR, "FAIL: {$description}\n"); exit(1); } } echo 'PASS: ' . count($checks) . " guest draft status checks\n";