From 5f9784dcf84e69c07c8ce119e7759dbdb125d42a Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 8 Feb 2023 22:37:12 +1100 Subject: [PATCH] Fixes for webhooks --- .../Requests/Webhook/StoreWebhookRequest.php | 2 + .../Requests/Webhook/UpdateWebhookRequest.php | 3 + app/Observers/ClientObserver.php | 2 +- app/Observers/InvoiceObserver.php | 2 +- tests/Feature/WebhookAPITest.php | 55 ++++++++++--------- 5 files changed, 35 insertions(+), 29 deletions(-) diff --git a/app/Http/Requests/Webhook/StoreWebhookRequest.php b/app/Http/Requests/Webhook/StoreWebhookRequest.php index fcfd611979e8..9b36c4331117 100644 --- a/app/Http/Requests/Webhook/StoreWebhookRequest.php +++ b/app/Http/Requests/Webhook/StoreWebhookRequest.php @@ -39,6 +39,8 @@ class StoreWebhookRequest extends Request { $input = $this->all(); + if(!isset($input['rest_method'])) + $input['rest_method'] = 'post'; // if(isset($input['headers']) && count($input['headers']) == 0) // $input['headers'] = null; diff --git a/app/Http/Requests/Webhook/UpdateWebhookRequest.php b/app/Http/Requests/Webhook/UpdateWebhookRequest.php index c4832e182606..21b46163a16b 100644 --- a/app/Http/Requests/Webhook/UpdateWebhookRequest.php +++ b/app/Http/Requests/Webhook/UpdateWebhookRequest.php @@ -44,6 +44,9 @@ class UpdateWebhookRequest extends Request { $input = $this->all(); + if(!isset($input['rest_method'])) + $input['rest_method'] = 'post'; + // if(isset($input['headers']) && count($input['headers']) == 0) // $input['headers'] = null; diff --git a/app/Observers/ClientObserver.php b/app/Observers/ClientObserver.php index be5af38a02d2..de79d6c862e0 100644 --- a/app/Observers/ClientObserver.php +++ b/app/Observers/ClientObserver.php @@ -59,7 +59,7 @@ class ClientObserver ->exists(); if ($subscriptions) - WebhookHandler::dispatch($event, $client, $client->company)->delay(0); + WebhookHandler::dispatch($event, $client, $client->company, 'client')->delay(0); } diff --git a/app/Observers/InvoiceObserver.php b/app/Observers/InvoiceObserver.php index 18523e49a71e..2dc5431a6fc6 100644 --- a/app/Observers/InvoiceObserver.php +++ b/app/Observers/InvoiceObserver.php @@ -58,7 +58,7 @@ class InvoiceObserver ->exists(); if ($subscriptions) - WebhookHandler::dispatch($event, $invoice, $invoice->company)->delay(0); + WebhookHandler::dispatch($event, $invoice, $invoice->company, 'client')->delay(0); } /** diff --git a/tests/Feature/WebhookAPITest.php b/tests/Feature/WebhookAPITest.php index 5f56dfc240b8..0d1708a2f34a 100644 --- a/tests/Feature/WebhookAPITest.php +++ b/tests/Feature/WebhookAPITest.php @@ -49,33 +49,6 @@ class WebhookAPITest extends TestCase $this->withoutExceptionHandling(); } - // public function testClientWebhooks() - // { - // // client archived = 37 - // $data = [ - // 'target_url' => 'http://hook.com', - // 'event_id' => 37, - // 'rest_method' => 'post', - // 'format' => 'JSON', - // ]; - - // $response = $this->withHeaders([ - // 'X-API-SECRET' => config('ninja.api_secret'), - // 'X-API-TOKEN' => $this->token, - // ])->post('/api/v1/webhooks', $data); - - // $repo = new ClientRepository(new ClientContactRepository()); - - // $repo->archive($this->client); - - // \Illuminate\Support\Facades\Queue::after(function (WebhookHandler $event) { - // $this->assertTrue($event->job->isReleased()); - // }); - - // \Illuminate\Support\Facades\Queue::assertPushed(WebhookHandler::class); - - // } - public function testWebhookGetFilter() { $response = $this->withHeaders([ @@ -98,6 +71,20 @@ class WebhookAPITest extends TestCase public function testWebhookPostRoute() { + + $data = [ + 'target_url' => 'http://hook.com', + 'event_id' => 1, + 'format' => 'JSON', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post('/api/v1/webhooks', $data); + + $response->assertStatus(200); + $data = [ 'target_url' => 'http://hook.com', 'event_id' => 1, @@ -116,6 +103,20 @@ class WebhookAPITest extends TestCase $this->assertEquals(1, $arr['data']['event_id']); + $data = [ + 'target_url' => 'http://hook.com', + 'event_id' => 2, + 'format' => 'JSON', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->put('/api/v1/webhooks/'.$arr['data']['id'], $data); + + $response->assertStatus(200); + + $data = [ 'target_url' => 'http://hook.com', 'event_id' => 2,