PHP Classes

File: tests/Feature/Commands/WebhookToggleCommandTest.php

Recommend this page to a friend!
  Packages of Daryl Legion   PayRex Laravel   tests/Feature/Commands/WebhookToggleCommandTest.php   Download  
File: tests/Feature/Commands/WebhookToggleCommandTest.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: 3,796 bytes
 

Contents

Class file image Download
<?php

declare(strict_types=1);

use
Illuminate\Support\Facades\Http;

it('disables an enabled webhook endpoint', function () {
   
Http::fake([
       
'https://api.payrexhq.com/webhooks/wh_xxxxx' => Http::response(loadFixture('webhook/created.json')),
       
'https://api.payrexhq.com/webhooks/wh_xxxxx/disable' => Http::response(loadFixture('webhook/disabled.json')),
    ]);

   
$this->artisan('payrex:webhook-toggle', ['id' => 'wh_xxxxx'])
        ->
assertSuccessful()
        ->
expectsOutputToContain('Webhook endpoint disabled 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/send-shipments'],
    // ['Status', 'disabled'],
    // ['Events', 'payment_intent.succeeded'],
    // ['Description', 'This is the webhook used for sending shipments after receiving successfully paid payments'],
    // ['Created At', date('Y-m-d H:i:s', 1706056262)],
    // ],
    // );

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

it('enables a disabled webhook endpoint', function () {
   
Http::fake([
       
'https://api.payrexhq.com/webhooks/wh_xxxxx' => Http::response(loadFixture('webhook/disabled.json')),
       
'https://api.payrexhq.com/webhooks/wh_xxxxx/enable' => Http::response(loadFixture('webhook/enabled.json')),
    ]);

   
$this->artisan('payrex:webhook-toggle', ['id' => 'wh_xxxxx'])
        ->
assertSuccessful()
        ->
expectsOutputToContain('Webhook endpoint enabled 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/send-shipments'],
    // ['Status', 'enabled'],
    // ['Events', 'payment_intent.succeeded'],
    // ['Description', 'This is the webhook used for sending shipments after receiving successfully paid payments'],
    // ['Created At', date('Y-m-d H:i:s', 1706056262)],
    // ],
    // );

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

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-toggle', ['id' => 'wh_nonexistent'])
        ->
assertFailed()
        ->
expectsOutputToContain('The resource with ID pi_nonexistent was not found.');
});

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

   
$enableFixture = loadFixture('webhook/enabled.json');
   
$enableFixture['status'] = 'unknown_status';

   
Http::fake([
       
'https://api.payrexhq.com/webhooks/wh_xxxxx' => Http::response($retrieveFixture),
       
'https://api.payrexhq.com/webhooks/wh_xxxxx/enable' => Http::response($enableFixture),
    ]);

   
$this->artisan('payrex:webhook-toggle', ['id' => 'wh_xxxxx'])
        ->
assertSuccessful()
        ->
expectsOutputToContain('Webhook endpoint updated successfully.');

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