PHP Classes

File: tests/Feature/Commands/WebhookUpdateCommandTest.php

Recommend this page to a friend!
  Packages of Daryl Legion   PayRex Laravel   tests/Feature/Commands/WebhookUpdateCommandTest.php   Download  
File: tests/Feature/Commands/WebhookUpdateCommandTest.php
Role: Example script
Content type: text/plain
Description: Example script
Class: PayRex Laravel
Request payments using the PayRex service
Author: By
Last change:
Date: 13 days ago
Size: 2,611 bytes
 

Contents

Class file image Download
<?php

declare(strict_types=1);

use
Illuminate\Support\Facades\Http;

it('updates a webhook endpoint', function () {
   
Http::fake([
       
'https://api.payrexhq.com/webhooks/wh_xxxxx' => Http::sequence()
            ->
push(loadFixture('webhook/created.json'))
            ->
push(loadFixture('webhook/updated.json')),
    ]);

   
$this->artisan('payrex:webhook-update', ['id' => 'wh_xxxxx'])
        ->
expectsQuestion('Webhook URL', 'https://my-ecommerce.com/webhook-updated')
        ->
expectsQuestion('Which events should this webhook listen to?', ['payment_intent.succeeded', 'refund.created'])
        ->
expectsQuestion('Description', 'Updated webhook endpoint')
        ->
assertSuccessful()
        ->
expectsOutputToContain('Webhook endpoint updated successfully.');
   
// TODO: expectsPromptsTable() was introduced in Laravel 12 and is not available in Laravel 11.
    // ->expectsPromptsTable(
    // headers: ['Field', 'Value'],
    // rows: [
    // ['ID', 'wh_xxxxx'],
    // ['URL', 'https://my-ecommerce.com/webhook-updated'],
    // ['Status', 'enabled'],
    // ['Events', "payment_intent.succeeded\nrefund.created"],
    // ['Description', 'Updated webhook endpoint'],
    // ['Created At', date('Y-m-d H:i:s', 1706056262)],
    // ],
    // );

   
Http::assertSent(fn ($request) => $request->url() === 'https://api.payrexhq.com/webhooks/wh_xxxxx'
       
&& $request->method() === 'PUT'
   
);
});

it('displays error message when webhook not found', function () {
   
Http::fake([
       
'https://api.payrexhq.com/webhooks/wh_nonexistent' => Http::response(loadFixture('errors/resource_not_found.json'), 404),
    ]);

   
$this->artisan('payrex:webhook-update', ['id' => 'wh_nonexistent'])
        ->
assertFailed()
        ->
expectsOutputToContain('The resource with ID pi_nonexistent was not found.');
});

it('handles unknown webhook status gracefully', function () {
   
$fixture = loadFixture('webhook/updated.json');
   
$fixture['status'] = 'unknown_status';

   
Http::fake([
       
'https://api.payrexhq.com/webhooks/wh_xxxxx' => Http::sequence()
            ->
push(loadFixture('webhook/created.json'))
            ->
push($fixture),
    ]);

   
$this->artisan('payrex:webhook-update', ['id' => 'wh_xxxxx'])
        ->
expectsQuestion('Webhook URL', 'https://my-ecommerce.com/webhook-updated')
        ->
expectsQuestion('Which events should this webhook listen to?', ['payment_intent.succeeded', 'refund.created'])
        ->
expectsQuestion('Description', 'Updated webhook endpoint')
        ->
assertSuccessful();
});