directAdminBinary()); }); test('directadmin vacation api builds scoped payload for one mailbox', function (): void { $api = new DirectAdminVacationApi('/usr/local/directadmin/directadmin'); $payload = $api->buildSavePayload('info@example.com', [ 'subject_prefix' => 'Urlop', 'reply_every_message' => false, 'repeat_minutes' => 1440, 'body' => 'Body', 'start_value' => '2026-06-10|morning', 'end_value' => '2026-06-24|evening', ]); assert_same('info', $payload['user']); assert_same('example.com', $payload['domain']); assert_same('Body', $payload['text']); assert_same('Urlop', $payload['subject_prefix']); assert_same('1440', $payload['reply_frequency']); assert_same('morning', $payload['starttime']); assert_same('evening', $payload['endtime']); }); test('directadmin vacation api detects existing native vacation by mailbox', function (): void { $api = new DirectAdminVacationApi('/usr/local/directadmin/directadmin', static function (string $owner, string $endpoint, array $payload): string { assert_same('alice', $owner); assert_same('CMD_API_EMAIL_VACATION', $endpoint); assert_same(['domain' => 'example.com'], $payload); return 'info=starttime%3Dmorning%26text%3DBody&sales=starttime%3Devening'; }); assert_true($api->vacationExists('alice', 'info@example.com')); assert_false($api->vacationExists('alice', 'new@example.com')); });