'mysql://fallback:secret@database:3306/booking'];\n"); expectSame( 'mysql://fallback:secret@database:3306/booking', bookingDatabaseUrl('', $configFile), 'The configuration file must be used when DATABASE_URL is empty.' ); expectSame( 'mysql://environment:secret@database:3306/booking', bookingDatabaseUrl('mysql://environment:secret@database:3306/booking', $configFile), 'DATABASE_URL must take precedence over the configuration file.' ); expectSame('disabled', bookingMailTransport('disabled'), 'Local mail delivery must be explicitly disabled.'); $calendar = bookingIcsCalendar([ 'id' => '44c5d0f9-6c98-4b04-8d25-c32834d21a61', 'project' => 'perspektivwerk', 'title' => 'ErstgesprÃĪch PerspektivWerk', 'starts_at' => '2026-09-14 09:00:00', 'ends_at' => '2026-09-14 10:00:00', 'format' => 'vor_ort', ]); expectContains('BEGIN:VCALENDAR', $calendar, 'The confirmation attachment must be an iCalendar document.'); expectContains('UID:44c5d0f9-6c98-4b04-8d25-c32834d21a61@sufw-booking', $calendar, 'The iCalendar attachment must contain the event UID.'); } finally { unlink($configFile); } echo "booking backend configuration tests passed\n";