87 lines
3.1 KiB
PHP
87 lines
3.1 KiB
PHP
<?php
|
|
|
|
app_require('classes/slack.php');
|
|
|
|
use classes\slack;
|
|
|
|
final class SlackCustomerRegistrationWebhookFake extends slack
|
|
{
|
|
public array $messages = [];
|
|
|
|
public function __construct(
|
|
private readonly string $webhook,
|
|
private readonly string $sendResult = 'Message sent successfully. Response: ok'
|
|
) {
|
|
// Skip parent config loading for unit isolation.
|
|
}
|
|
|
|
protected function get_customer_registration_webhook_url(): string
|
|
{
|
|
return $this->webhook;
|
|
}
|
|
|
|
public function send_webhook_message(string $message, string $webhook): string
|
|
{
|
|
$this->messages[] = [
|
|
'message' => $message,
|
|
'webhook' => $webhook,
|
|
];
|
|
|
|
return $this->sendResult;
|
|
}
|
|
}
|
|
|
|
it('does not send customer registration test notifications without a saved webhook', function (): void {
|
|
$slack = new SlackCustomerRegistrationWebhookFake('');
|
|
|
|
$result = $slack->test_customer_registration_webhook();
|
|
|
|
expect($result)
|
|
->toBe([
|
|
'configured' => false,
|
|
'sent' => false,
|
|
'message' => 'Slack customer registration webhook URL is not configured.',
|
|
])
|
|
->and($slack->messages)->toBe([])
|
|
->and($slack->get_log())->toBe([]);
|
|
});
|
|
|
|
it('sends customer registration test notifications to the saved webhook', function (): void {
|
|
$slack = new SlackCustomerRegistrationWebhookFake('https://hooks.slack.test/services/secret-token');
|
|
|
|
$result = $slack->test_customer_registration_webhook();
|
|
|
|
expect($result)
|
|
->toBe([
|
|
'configured' => true,
|
|
'sent' => true,
|
|
'message' => 'Slack test message sent successfully.',
|
|
])
|
|
->and($slack->messages)->toHaveCount(1)
|
|
->and($slack->messages[0]['webhook'])->toBe('https://hooks.slack.test/services/secret-token')
|
|
->and($slack->messages[0]['message'])->toContain('Truck Wash Slack test')
|
|
->and($slack->messages[0]['message'])->toContain('Customer registration notifications are configured correctly.')
|
|
->and(json_encode($slack->get_log(), JSON_UNESCAPED_SLASHES))->toContain('sent successfully')
|
|
->and(json_encode($slack->get_log(), JSON_UNESCAPED_SLASHES))->not->toContain('secret-token');
|
|
});
|
|
|
|
it('reports customer registration test notification failures without exposing the webhook', function (): void {
|
|
$slack = new SlackCustomerRegistrationWebhookFake(
|
|
'https://hooks.slack.test/services/secret-token',
|
|
'Failed to send message: cURL error for https://hooks.slack.test/services/secret-token'
|
|
);
|
|
|
|
$result = $slack->test_customer_registration_webhook();
|
|
|
|
expect($result)
|
|
->toBe([
|
|
'configured' => true,
|
|
'sent' => false,
|
|
'message' => 'Slack test message failed.',
|
|
])
|
|
->and($slack->messages)->toHaveCount(1)
|
|
->and(json_encode($result, JSON_UNESCAPED_SLASHES))->not->toContain('secret-token')
|
|
->and(json_encode($slack->get_log(), JSON_UNESCAPED_SLASHES))->toContain('failed')
|
|
->and(json_encode($slack->get_log(), JSON_UNESCAPED_SLASHES))->not->toContain('secret-token');
|
|
});
|