diff --git a/src/Broadcasts/ClickedLink.php b/src/Broadcasts/ClickedLink.php new file mode 100644 index 0000000..3b999e5 --- /dev/null +++ b/src/Broadcasts/ClickedLink.php @@ -0,0 +1,16 @@ +clickedLinks = new ClickedLink($transporter); + + parent::__construct($transporter); + } + /** * Retrieve a single broadcast. * diff --git a/src/Service/Broadcasts/ClickedLink.php b/src/Service/Broadcasts/ClickedLink.php new file mode 100644 index 0000000..4a607d9 --- /dev/null +++ b/src/Service/Broadcasts/ClickedLink.php @@ -0,0 +1,26 @@ + + * + * @see https://resend.com/docs/api-reference/broadcasts/list-broadcast-clicked-links + */ + public function list(string $broadcastId, array $options = []): \Resend\Collection + { + $payload = Payload::list("broadcasts/$broadcastId/clicked-links", $options); + + $result = $this->transporter->request($payload); + + return $this->createResource('broadcast-clicked-links', $result); + } +} diff --git a/src/Service/Service.php b/src/Service/Service.php index 3d76330..a36bc72 100644 --- a/src/Service/Service.php +++ b/src/Service/Service.php @@ -7,6 +7,7 @@ use Resend\Automation; use Resend\Automations\Run as AutomationRun; use Resend\Broadcast; +use Resend\Broadcasts\ClickedLink as BroadcastClickedLink; use Resend\Collection; use Resend\Contact; use Resend\ContactProperty; @@ -39,6 +40,7 @@ abstract class Service 'automation-runs' => AutomationRun::class, 'automations' => Automation::class, 'broadcasts' => Broadcast::class, + 'broadcast-clicked-links' => BroadcastClickedLink::class, 'contact-imports' => ContactImport::class, 'contact-properties' => ContactProperty::class, 'contact-topics' => ContactTopic::class, diff --git a/tests/Fixtures/Broadcasts/ClickedLink.php b/tests/Fixtures/Broadcasts/ClickedLink.php new file mode 100644 index 0000000..22e2d91 --- /dev/null +++ b/tests/Fixtures/Broadcasts/ClickedLink.php @@ -0,0 +1,23 @@ + 'list', + 'has_more' => false, + 'data' => [ + [ + 'id' => 'b2Zmc2V0OjA', + 'url' => 'https://resend.com/pricing', + 'clicks' => 42, + 'unique_clicks' => 30, + ], + [ + 'id' => 'b2Zmc2V0OjE', + 'url' => 'https://resend.com/docs', + 'clicks' => 17, + 'unique_clicks' => 15, + ], + ], + ]; +} diff --git a/tests/Service/Broadcasts/ClickedLink.php b/tests/Service/Broadcasts/ClickedLink.php new file mode 100644 index 0000000..f4ac139 --- /dev/null +++ b/tests/Service/Broadcasts/ClickedLink.php @@ -0,0 +1,25 @@ +broadcasts->clickedLinks->list('559ac32e-9ef5-46fb-82a1-b76b840c0f7b'); + + expect($result)->toBeInstanceOf(Collection::class) + ->data->toBeArray(); + + expect($result->data[0])->toBeInstanceOf(ClickedLink::class) + ->url->toBe('https://resend.com/pricing'); +}); + +it('can get a list of a broadcast\'s clicked links with pagination options', function () { + $client = mockClient('GET', 'broadcasts/559ac32e-9ef5-46fb-82a1-b76b840c0f7b/clicked-links?limit=1', [], [], broadcastClickedLinks()); + + $result = $client->broadcasts->clickedLinks->list('559ac32e-9ef5-46fb-82a1-b76b840c0f7b', ['limit' => 1]); + + expect($result)->toBeInstanceOf(Collection::class) + ->data->toBeArray(); +});