+
+ $webhook->refresh();
+ $this->assertEquals('Response status from endpoint was 500', $webhook->last_error);
+ $this->assertNotNull($webhook->last_errored_at);
+ }
+
+ public function test_webhook_call_exception_is_caught_and_logged()
+ {
+ $this->mockHttpClient([new ConnectException('Failed to perform request', new \GuzzleHttp\Psr7\Request('GET', ''))]);
+
+ $logger = $this->withTestLogger();
+ $webhook = $this->newWebhook(['active' => true, 'endpoint' => 'https://wh.example.com'], ['all']);
+ $this->assertNull($webhook->last_errored_at);
+
+ $this->runEvent(ActivityType::ROLE_CREATE);
+
+ $this->assertTrue($logger->hasError('Webhook call to endpoint https://wh.example.com failed with error "Failed to perform request"'));
+
+ $webhook->refresh();
+ $this->assertEquals('Failed to perform request', $webhook->last_error);
+ $this->assertNotNull($webhook->last_errored_at);
+ }
+
+ public function test_webhook_uses_ssr_hosts_option_if_set()
+ {
+ config()->set('app.ssr_hosts', 'https://*.example.com');
+ $responses = $this->mockHttpClient();
+
+ $webhook = $this->newWebhook(['active' => true, 'endpoint' => 'https://wh.example.co.uk'], ['all']);
+ $this->runEvent(ActivityType::ROLE_CREATE);
+ $this->assertEquals(0, $responses->requestCount());
+
+ $webhook->refresh();
+ $this->assertEquals('The URL does not match the configured allowed SSR hosts', $webhook->last_error);
+ $this->assertNotNull($webhook->last_errored_at);