!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/smabpro.picotech.app/public_html/vendor/srmklive/paypal/tests/Feature/   drwxr-xr-x
Free 28.6 GB of 117.98 GB (24.24%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     AdapterFeatureTest.php (74.82 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

namespace Srmklive\PayPal\Tests\Feature;

use 
Carbon\Carbon;
use 
PHPUnit\Framework\TestCase;
use 
Srmklive\PayPal\Services\PayPal as PayPalClient;
use 
Srmklive\PayPal\Tests\MockClientClasses;
use 
Srmklive\PayPal\Tests\MockRequestPayloads;
use 
Srmklive\PayPal\Tests\MockResponsePayloads;

class 
AdapterFeatureTest extends TestCase
{
    use 
MockClientClasses;
    use 
MockRequestPayloads;
    use 
MockResponsePayloads;

    
/** @var string */
    
protected static $access_token '';

    
/** @var string */
    
protected static $product_id '';

    
/** @var \Srmklive\PayPal\Services\PayPal */
    
protected $client;

    protected function 
setUp(): void
    
{
        
$this->client = new PayPalClient($this->getApiCredentials());

        
parent::setUp();
    }

    
/** @test */
    
public function it_returns_error_if_invalid_credentials_are_used_to_get_access_token()
    {
        
$this->client = new PayPalClient($this->getMockCredentials());
        
$response $this->client->getAccessToken();

        
$this->assertIsArray($response['error']);
        
$this->assertArrayHasKey('error'$response);
    }

    
/** @test */
    
public function it_can_get_access_token()
    {
        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAccessTokenResponse()
            )
        );
        
$response $this->client->getAccessToken();

        
self::$access_token $response['access_token'];

        
$this->assertArrayHasKey('access_token'$response);
        
$this->assertNotEmpty($response['access_token']);
    }

    
/** @test */
    
public function it_can_create_a_billing_plan()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCreatePlansResponse()
            )
        );

        
$expectedParams $this->createPlanParams();

        
$response $this->client->setRequestHeader('PayPal-Request-Id''some-request-id')->createPlan($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_list_billing_plans()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListPlansResponse()
            )
        );

        
$response $this->client->listPlans();

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('plans'$response);
    }

    
/** @test */
    
public function it_can_update_a_billing_plan()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$expectedParams $this->updatePlanParams();

        
$response $this->client->updatePlan('P-7GL4271244454362WXNWU5NQ'$expectedParams);

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_show_details_for_a_billing_plan()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetPlansResponse()
            )
        );

        
$response $this->client->showPlanDetails('P-5ML4271244454362WXNWU5NQ');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_activate_a_billing_plan()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->activatePlan('P-7GL4271244454362WXNWU5NQ');

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_deactivate_a_billing_plan()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->deactivatePlan('P-7GL4271244454362WXNWU5NQ');

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_update_pricing_for_a_billing_plan()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$expectedParams $this->updatePlanPricingParams();

        
$response $this->client->updatePlanPricing('P-2UF78835G6983425GLSM44MA'$expectedParams);

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_list_products()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListCatalogProductsResponse()
            )
        );

        
$response $this->client->listProducts();

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('products'$response);
    }

    
/** @test */
    
public function it_can_create_a_product()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCreateCatalogProductsResponse()
            )
        );

        
$expectedParams $this->createProductParams();

        
$response $this->client->setRequestHeader('PayPal-Request-Id''product-request-'.time())->createProduct($expectedParams);

        
self::$product_id $response['id'];

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_update_a_product()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$expectedParams $this->updateProductParams();

        
$response $this->client->updateProduct(self::$product_id$expectedParams);

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_get_details_for_a_product()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetCatalogProductsResponse()
            )
        );

        
$response $this->client->showProductDetails(self::$product_id);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_acknowledge_item_is_returned_for_raised_dispute()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAcceptDisputesClaimResponse()
            )
        );

        
$response $this->client->acknowledgeItemReturned(
            
'PP-D-4012',
            
'I have received the item back.',
            
'ITEM_RECEIVED'
        
);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_list_disputes()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListDisputesResponse()
            )
        );

        
$response $this->client->listDisputes();

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('items'$response);
    }

    
/** @test */
    
public function it_can_partially_update_a_dispute()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$expectedParams $this->updateDisputeParams();

        
$response $this->client->updateDispute('PP-D-27803'$expectedParams);

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_get_details_for_a_dispute()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetDisputesResponse()
            )
        );

        
$response $this->client->showDisputeDetails('PP-D-4012');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('dispute_id'$response);
    }

    
/** @test */
    
public function it_can_provide_evidence_for_a_dispute_claim()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAcceptDisputesClaimResponse()
            )
        );

        
$mockFiles = [
            
__DIR__.'/../Mocks/samples/sample.jpg',
            
__DIR__.'/../Mocks/samples/sample.png',
            
__DIR__.'/../Mocks/samples/sample.pdf',
        ];

        
$response $this->client->provideDisputeEvidence(
            
'PP-D-27803',
            
$mockFiles
        
);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('links'$response);

        
$this->markTestIncomplete('Skipping the test');
    }

    
/** @test */
    
public function it_throws_exception_if_invalid_file_as_evidence_is_provided_for_a_dispute_claim()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAcceptDisputesClaimResponse()
            )
        );

        
$mockFiles = [
            
__DIR__.'/../Mocks/samples/sample.txt',
            
__DIR__.'/../Mocks/samples/sample.pdf',
        ];

        
$this->expectException(\Exception::class);

        
$this->markTestIncomplete('Skipping the test');

        
$response $this->client->provideDisputeEvidence(
            
'PP-D-27803',
            
$mockFiles
        
);
    }

    
/** @test */
    
public function it_throws_exception_if_file_size_as_evidence_exceeds_per_file_limit_for_a_dispute_claim()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAcceptDisputesClaimResponse()
            )
        );

        
$file __DIR__.'/../Mocks/samples/sample2.pdf';

        
$mockFiles = [$file];

        
$this->expectException(\Exception::class);

        
$this->markTestIncomplete('Skipping the test');

        
$this->client->provideDisputeEvidence(
            
'PP-D-27803',
            
$mockFiles
        
);
    }

    
/** @test */
    
public function it_throws_exception_if_file_size_as_evidence_exceeds_overall_limit_for_a_dispute_claim()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAcceptDisputesClaimResponse()
            )
        );

        
$file __DIR__.'/../Mocks/samples/sample2.pdf';

        
$mockFiles = [$file$file$file$file$file];

        
$this->expectException(\Exception::class);

        
$this->markTestIncomplete('Skipping the test');

        
$this->client->provideDisputeEvidence(
            
'PP-D-27803',
            
$mockFiles
        
);
    }

    
/** @test */
    
public function it_can_offer_to_resolve_dispute_claim()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAcceptDisputesClaimResponse()
            )
        );

        
$response $this->client->makeOfferToResolveDispute(
            
'PP-D-27803',
            
'Offer refund with replacement item.',
            
5.99,
            
'REFUND_WITH_REPLACEMENT'
        
);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_escalate_dispute_claim()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAcceptDisputesClaimResponse()
            )
        );

        
$response $this->client->escalateDisputeToClaim(
            
'PP-D-27803',
            
'Escalating to PayPal claim for resolution.'
        
);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_accept_dispute_claim()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAcceptDisputesClaimResponse()
            )
        );

        
$response $this->client->acceptDisputeClaim(
            
'PP-D-27803',
            
'Full refund to the customer.'
        
);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_accept_dispute_offer_resolution()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAcceptDisputesClaimResponse()
            )
        );

        
$response $this->client->acceptDisputeOfferResolution(
            
'PP-D-4012',
            
'I am ok with the refund offered.'
        
);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_update_dispute_status()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAcceptDisputesClaimResponse()
            )
        );

        
$response $this->client->updateDisputeStatus(
            
'PP-D-4012',
            
true
        
);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_settle_dispute()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAcceptDisputesClaimResponse()
            )
        );

        
$response $this->client->settleDispute(
            
'PP-D-4012',
            
true
        
);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_decline_dispute_offer_resolution()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockAcceptDisputesClaimResponse()
            )
        );

        
$response $this->client->declineDisputeOfferResolution(
            
'PP-D-4012',
            
'I am not ok with the refund offered.'
        
);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_generate_unique_invoice_number()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGenerateInvoiceNumberResponse()
            )
        );

        
$response $this->client->generateInvoiceNumber();

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('invoice_number'$response);
    }

    
/** @test */
    
public function it_can_create_a_draft_invoice()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCreateInvoicesResponse()
            )
        );

        
$expectedParams $this->createInvoiceParams();

        
$response $this->client->createInvoice($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_list_invoices()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListInvoicesResponse()
            )
        );

        
$response $this->client->listInvoices();

        
$this->assertArrayHasKey('total_pages'$response);
        
$this->assertArrayHasKey('total_items'$response);
    }

    
/** @test */
    
public function it_can_delete_an_invoice()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->deleteInvoice('INV2-Z56S-5LLA-Q52L-CPZ5');

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_update_an_invoice()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockUpdateInvoicesResponse()
            )
        );

        
$expectedParams $this->updateInvoiceParams();

        
$response $this->client->updateInvoice('INV2-Z56S-5LLA-Q52L-CPZ5'$expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_show_details_for_an_invoice()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetInvoicesResponse()
            )
        );

        
$response $this->client->showInvoiceDetails('INV2-Z56S-5LLA-Q52L-CPZ5');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_cancel_an_invoice()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$expectedParams $this->cancelInvoiceParams();

        
$response $this->client->cancelInvoice(
            
'INV2-Z56S-5LLA-Q52L-CPZ5',
            
'Payment due for the invoice #ABC-123',
            
'Please pay before the due date to avoid incurring late payment charges which will be adjusted in the next bill generated.',
            
true,
            
true,
            [
                
'customer-a@example.com',
                
'customer@example.com',
            ]
        );

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_generate_qr_code_for_invoice()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGenerateInvoiceQRCodeResponse()
            )
        );

        
$response $this->client->generateQRCodeInvoice('INV2-Z56S-5LLA-Q52L-CPZ5');

        
$this->assertNotEmpty($response);
    }

    
/** @test */
    
public function it_can_register_payment_for_invoice()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockInvoiceRegisterPaymentResponse()
            )
        );

        
$response $this->client->registerPaymentInvoice('INV2-Z56S-5LLA-Q52L-CPZ5''2018-05-01''BANK_TRANSFER'10.00);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('payment_id'$response);
    }

    
/** @test */
    
public function it_can_delete_payment_for_invoice()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->deleteExternalPaymentInvoice('INV2-Z56S-5LLA-Q52L-CPZ5''EXTR-86F38350LX4353815');

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_refund_payment_for_invoice()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockInvoiceRefundPaymentResponse()
            )
        );

        
$response $this->client->refundInvoice('INV2-Z56S-5LLA-Q52L-CPZ5''2018-05-01''BANK_TRANSFER'5.00);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('refund_id'$response);
    }

    
/** @test */
    
public function it_can_delete_refund_for_invoice()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->deleteRefundInvoice('INV2-Z56S-5LLA-Q52L-CPZ5''EXTR-2LG703375E477444T');

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_send_an_invoice()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->sendInvoice(
            
'INV2-Z56S-5LLA-Q52L-CPZ5',
            
'Payment due for the invoice #ABC-123',
            
'Please pay before the due date to avoid incurring late payment charges which will be adjusted in the next bill generated.',
            
true,
            
true,
            [
                
'customer-a@example.com',
                
'customer@example.com',
            ]
        );

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_send_reminder_for_an_invoice()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->sendInvoiceReminder(
            
'INV2-Z56S-5LLA-Q52L-CPZ5',
            
'Reminder: Payment due for the invoice #ABC-123',
            
'Please pay before the due date to avoid incurring late payment charges which will be adjusted in the next bill generated.',
            
true,
            
true,
            [
                
'customer-a@example.com',
                
'customer@example.com',
            ]
        );

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_create_invoice_template()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCreateInvoiceTemplateResponse()
            )
        );

        
$expectedParams $this->mockCreateInvoiceTemplateParams();

        
$response $this->client->createInvoiceTemplate($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_list_invoice_templates()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListInvoiceTemplateResponse()
            )
        );

        
$response $this->client->listInvoiceTemplates();

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('templates'$response);
    }

    
/** @test */
    
public function it_can_delete_an_invoice_template()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->deleteInvoiceTemplate('TEMP-19V05281TU309413B');

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_update_an_invoice_template()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockUpdateInvoiceTemplateResponse()
            )
        );

        
$expectedParams $this->mockUpdateInvoiceTemplateParams();

        
$response $this->client->updateInvoiceTemplate('TEMP-19V05281TU309413B'$expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_get_details_for_an_invoice_template()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetInvoiceTemplateResponse()
            )
        );

        
$response $this->client->showInvoiceTemplateDetails('TEMP-19V05281TU309413B');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_search_invoices()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockSearchInvoicesResponse()
            )
        );

        
$response $this->client->searchInvoices();

        
$this->assertArrayHasKey('total_pages'$response);
        
$this->assertArrayHasKey('total_items'$response);
    }

    
/** @test */
    
public function it_can_search_invoices_with_custom_filters()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockSearchInvoicesResponse()
            )
        );

        
$response $this->client
            
->addInvoiceFilterByRecipientEmail('bill-me@example.com')
            ->
addInvoiceFilterByRecipientFirstName('John')
            ->
addInvoiceFilterByRecipientLastName('Doe')
            ->
addInvoiceFilterByRecipientBusinessName('Acme Inc.')
            ->
addInvoiceFilterByInvoiceNumber('#123')
            ->
addInvoiceFilterByInvoiceStatus(['PAID''MARKED_AS_PAID'])
            ->
addInvoiceFilterByReferenceorMemo('deal-ref')
            ->
addInvoiceFilterByCurrencyCode('USD')
            ->
addInvoiceFilterByAmountRange(3050)
            ->
addInvoiceFilterByDateRange('2018-06-01''2018-06-21''invoice_date')
            ->
addInvoiceFilterByArchivedStatus(false)
            ->
addInvoiceFilterByFields(['items''payments''refunds'])
            ->
searchInvoices();

        
$this->assertArrayHasKey('total_pages'$response);
        
$this->assertArrayHasKey('total_items'$response);
        
$this->assertArrayHasKey('items'$response);
    }

    
/** @test */
    
public function it_throws_exception_on_search_invoices_with_invalid_status()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockSearchInvoicesResponse()
            )
        );

        
$this->expectException(\Exception::class);

        
$response $this->client
            
->addInvoiceFilterByInvoiceStatus(['DECLINED'])
            ->
searchInvoices();
    }

    
/** @test */
    
public function it_throws_exception_on_search_invoices_with_invalid_amount_ranges()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockSearchInvoicesResponse()
            )
        );

        
$filters $this->invoiceSearchParams();

        
$this->expectException(\Exception::class);

        
$response $this->client
            
->addInvoiceFilterByAmountRange(5030)
            ->
searchInvoices();
    }

    
/** @test */
    
public function it_throws_exception_on_search_invoices_with_invalid_date_ranges()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockSearchInvoicesResponse()
            )
        );

        
$filters $this->invoiceSearchParams();

        
$this->expectException(\Exception::class);

        
$response $this->client
            
->addInvoiceFilterByDateRange('2018-07-01''2018-06-21''invoice_date')
            ->
searchInvoices();
    }

    
/** @test */
    
public function it_throws_exception_on_search_invoices_with_invalid_date_range_type()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockSearchInvoicesResponse()
            )
        );

        
$filters $this->invoiceSearchParams();

        
$this->expectException(\Exception::class);

        
$response $this->client
            
->addInvoiceFilterByDateRange('2018-06-01''2018-06-21''declined_date')
            ->
searchInvoices();
    }

    
/** @test */
    
public function it_can_get_user_profile_details()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockShowProfileInfoResponse()
            )
        );

        
$response $this->client->showProfileInfo();

        
$this->assertArrayHasKey('address'$response);
    }

    
/** @test */
    
public function it_can_get_list_users()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mocklistUsersResponse()
            )
        );

        
$response $this->client->listUsers();

        
$this->assertArrayHasKey('Resources'$response);
    }

    
/** @test */
    
public function it_can_get_user_details()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mocklistUserResponse()
            )
        );

        
$user_id '7XRNGHV24HQL4';

        
$response $this->client->showUserDetails($user_id);

        
$this->assertArrayHasKey('userName'$response);
    }

    
/** @test */
    
public function it_can_deleta_a_user()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$user_id '7XRNGHV24HQL4';

        
$response $this->client->deleteUser($user_id);

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_create_merchant_applications()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCreateMerchantApplicationResponse()
            )
        );

        
$response $this->client->createMerchantApplication(
            
'AGGREGATOR',
            [
                
'https://example.com/callback',
                
'https://example.com/callback2',
            ],
            [
                
'facilitator@example.com',
                
'merchant@example.com',
            ],
            
'WDJJHEBZ4X2LY',
            
'some-open-id'
        
);

        
$this->assertArrayHasKey('client_name'$response);
        
$this->assertArrayHasKey('contacts'$response);
        
$this->assertArrayHasKey('redirect_uris'$response);
    }

    
/** @test */
    
public function it_can_set_account_properties()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client('')
        );

        
$response $this->client->setAccountProperties($this->mockSetAccountPropertiesParams());

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_disable_account_properties()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockUpdateOrdersResponse()
            )
        );

        
$response $this->client->disableAccountProperties();

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_get_client_token()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetClientTokenResponse()
            )
        );

        
$response $this->client->getClientToken();

        
$this->assertArrayHasKey('client_token'$response);
    }

    
/** @test  */
    
public function it_can_create_orders()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCreateOrdersResponse()
            )
        );

        
$filters $this->createOrderParams();

        
$response $this->client->createOrder($filters);

        
$this->assertArrayHasKey('status'$response);
        
$this->assertArrayHasKey('id'$response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test  */
    
public function it_can_update_orders()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockUpdateOrdersResponse()
            )
        );

        
$order_id '5O190127TN364715T';
        
$filters $this->updateOrderParams();

        
$response $this->client->updateOrder($order_id$filters);

        
$this->assertNotEmpty($response);
    }

    
/** @test  */
    
public function it_can_get_order_details()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockOrderDetailsResponse()
            )
        );

        
$order_id '5O190127TN364715T';
        
$response $this->client->showOrderDetails($order_id);

        
$this->assertArrayHasKey('status'$response);
        
$this->assertArrayHasKey('id'$response);
        
$this->assertArrayHasKey('intent'$response);
        
$this->assertArrayHasKey('payment_source'$response);
        
$this->assertArrayHasKey('purchase_units'$response);
        
$this->assertArrayHasKey('create_time'$response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test  */
    
public function it_can_authorize_payment_for_an_order()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockOrderPaymentAuthorizedResponse()
            )
        );

        
$order_id '5O190127TN364715T';
        
$response $this->client->authorizePaymentOrder($order_id);

        
$this->assertArrayHasKey('status'$response);
        
$this->assertArrayHasKey('id'$response);
        
$this->assertArrayHasKey('payer'$response);
        
$this->assertArrayHasKey('purchase_units'$response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_create_partner_referral()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCreatePartnerReferralsResponse()
            )
        );

        
$expectedParams $this->mockCreatePartnerReferralParams();

        
$response $this->client->createPartnerReferral($expectedParams);

        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_get_referral_details()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockShowReferralDataResponse()
            )
        );

        
$partner_referral_id 'ZjcyODU4ZWYtYTA1OC00ODIwLTk2M2EtOTZkZWQ4NmQwYzI3RU12cE5xa0xMRmk1NWxFSVJIT1JlTFdSbElCbFU1Q3lhdGhESzVQcU9iRT0=';

        
$response $this->client->showReferralData($partner_referral_id);

        
$this->assertArrayHasKey('partner_referral_id'$response);
        
$this->assertArrayHasKey('referral_data'$response);
    }

    
/** @test */
    
public function it_can_list_seller_tracking_information()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListSellerTrackingInformationResponse()
            )
        );

        
$partner_id 'U6E69K99P3G88';
        
$tracking_id 'merchantref1';

        
$response $this->client->listSellerTrackingInformation($partner_id$tracking_id);

        
$this->assertArrayHasKey('merchant_id'$response);
        
$this->assertArrayHasKey('tracking_id'$response);
    }

    
/** @test */
    
public function it_can_show_seller_status()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockShowSellerStatusResponse()
            )
        );

        
$partner_id 'U6E69K99P3G88';
        
$merchant_id '8LQLM2ML4ZTYU';

        
$response $this->client->showSellerStatus($partner_id$merchant_id);

        
$this->assertArrayHasKey('merchant_id'$response);
    }

    
/** @test */
    
public function it_can_list_merchant_credentials()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListMerchantCredentialsResponse()
            )
        );

        
$partner_id 'U6E69K99P3G88';

        
$response $this->client->listMerchantCredentials($partner_id);

        
$this->assertArrayHasKey('client_id'$response);
        
$this->assertArrayHasKey('payer_id'$response);
    }

    
/** @test */
    
public function it_can_list_web_experience_profiles()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListWebProfilesResponse()
            )
        );

        
$response $this->client->listWebExperienceProfiles();

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'collect($response)->first());
    }

    
/** @test */
    
public function it_can_create_web_experience_profile()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockWebProfileResponse()
            )
        );

        
$expectedParams $this->mockCreateWebProfileParams();

        
$response $this->client->setRequestHeader('PayPal-Request-Id''some-request-id')->createWebExperienceProfile($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('name'$response);
    }

    
/** @test */
    
public function it_can_delete_web_experience_profile()
    {
        
$expectedResponse '';

        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client($expectedResponse)
        );

        
$expectedParams 'XP-A88A-LYLW-8Y3X-E5ER';

        
$response $this->client->deleteWebExperienceProfile($expectedParams);

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_partially_update_web_experience_profile()
    {
        
$expectedResponse '';

        
$expectedParams $this->partiallyUpdateWebProfileParams();

        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client($expectedResponse)
        );

        
$response $this->client->patchWebExperienceProfile('XP-A88A-LYLW-8Y3X-E5ER'$expectedParams);

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_fully_update_web_experience_profile()
    {
        
$expectedResponse '';

        
$expectedParams $this->updateWebProfileParams();

        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client($expectedResponse)
        );

        
$response $this->client->updateWebExperienceProfile('XP-A88A-LYLW-8Y3X-E5ER'$expectedParams);

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_get_web_experience_profile_details()
    {
        
$expectedResponse $this->mockWebProfileResponse();

        
$expectedParams 'XP-A88A-LYLW-8Y3X-E5ER';

        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client($expectedResponse)
        );

        
$response $this->client->showWebExperienceProfileDetails($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('name'$response);
    }

    
/** @test  */
    
public function it_can_capture_payment_for_an_order()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockOrderPaymentCapturedResponse()
            )
        );

        
$order_id '5O190127TN364715T';
        
$response $this->client->capturePaymentOrder($order_id);

        
$this->assertArrayHasKey('status'$response);
        
$this->assertArrayHasKey('id'$response);
        
$this->assertArrayHasKey('payer'$response);
        
$this->assertArrayHasKey('purchase_units'$response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_show_details_for_an_authorized_payment()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetAuthorizedPaymentDetailsResponse()
            )
        );

        
$response $this->client->showAuthorizedPaymentDetails('0VF52814937998046');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_capture_an_authorized_payment()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCaptureAuthorizedPaymentResponse()
            )
        );

        
$response $this->client->captureAuthorizedPayment(
            
'0VF52814937998046',
            
'INVOICE-123',
            
10.99,
            
'Payment is due'
        
);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_reauthorize_an_authorized_payment()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockReAuthorizeAuthorizedPaymentResponse()
            )
        );

        
$response $this->client->reAuthorizeAuthorizedPayment('0VF52814937998046'10.99);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_void_an_authorized_payment()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->voidAuthorizedPayment('0VF52814937998046');

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_show_details_for_a_captured_payment()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetCapturedPaymentDetailsResponse()
            )
        );

        
$response $this->client->showCapturedPaymentDetails('2GG279541U471931P');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_refund_a_captured_payment()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockRefundCapturedPaymentResponse()
            )
        );

        
$response $this->client->refundCapturedPayment(
            
'2GG279541U471931P',
            
'INVOICE-123',
            
10.99,
            
'Defective product'
        
);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_show_details_for_a_refund()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetRefundDetailsResponse()
            )
        );

        
$response $this->client->showRefundDetails('1JU08902781691411');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_create_batch_payout()
    {
        
$expectedResponse $this->mockCreateBatchPayoutResponse();

        
$expectedParams $this->mockCreateBatchPayoutParams();

        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client($expectedResponse)
        );

        
$response $this->client->createBatchPayout($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('batch_header'$response);
    }

    
/** @test */
    
public function it_can_show_batch_payout_details()
    {
        
$expectedResponse $this->showBatchPayoutResponse();

        
$expectedParams 'FYXMPQTX4JC9N';

        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client($expectedResponse)
        );

        
$response $this->client->showBatchPayoutDetails($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('batch_header'$response);
        
$this->assertArrayHasKey('items'$response);
    }

    
/** @test */
    
public function it_can_show_batch_payout_item_details()
    {
        
$expectedResponse $this->showBatchPayoutItemResponse();

        
$expectedParams '8AELMXH8UB2P8';

        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client($expectedResponse)
        );

        
$response $this->client->showPayoutItemDetails($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('payout_item_id'$response);
        
$this->assertArrayHasKey('payout_batch_id'$response);
        
$this->assertArrayHasKey('payout_item'$response);
    }

    
/** @test */
    
public function it_can_cancel_unclaimed_batch_payout_item()
    {
        
$expectedResponse $this->mockCancelUnclaimedBatchItemResponse();

        
$expectedParams '8AELMXH8UB2P8';

        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client($expectedResponse)
        );

        
$response $this->client->cancelUnclaimedPayoutItem($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('payout_item_id'$response);
        
$this->assertArrayHasKey('payout_batch_id'$response);
        
$this->assertArrayHasKey('payout_item'$response);
    }

    
/** @test */
    
public function it_can_create_referenced_batch_payout()
    {
        
$expectedResponse $this->mockCreateReferencedBatchPayoutResponse();

        
$expectedParams $this->mockCreateReferencedBatchPayoutParams();

        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client($expectedResponse)
        );

        
$response $this->client->setRequestHeaders([
            
'PayPal-Request-Id'             => 'some-request-id',
            
'PayPal-Partner-Attribution-Id' => 'some-attribution-id',
        ])->
createReferencedBatchPayout($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_list_items_referenced_in_batch_payout()
    {
        
$expectedResponse $this->mockShowReferencedBatchPayoutResponse();

        
$expectedParams 'KHbwO28lWlXwi2IlToJ2IYNG4juFv6kpbFx4J9oQ5Hb24RSp96Dk5FudVHd6v4E=';

        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client($expectedResponse)
        );

        
$response $this->client->listItemsReferencedInBatchPayout($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_create_referenced_batch_payout_item()
    {
        
$expectedResponse $this->mockCreateReferencedBatchPayoutItemResponse();

        
$expectedParams $this->mockCreateReferencedBatchPayoutItemParams();

        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client($expectedResponse)
        );

        
$response $this->client->setRequestHeaders([
            
'PayPal-Request-Id'             => 'some-request-id',
            
'PayPal-Partner-Attribution-Id' => 'some-attribution-id',
        ])->
createReferencedBatchPayoutItem($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('links'$response);
    }

    
/** @test */
    
public function it_can_show_referenced_payout_item_details()
    {
        
$expectedResponse $this->mockShowReferencedBatchPayoutItemResponse();

        
$expectedParams 'CDZEC5MJ8R5HY';

        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client($expectedResponse)
        );

        
$response $this->client->setRequestHeader('PayPal-Partner-Attribution-Id''some-attribution-id')
        ->
showReferencedPayoutItemDetails($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('item_id'$response);
        
$this->assertArrayHasKey('reference_id'$response);
    }

    
/** @test */
    
public function it_can_list_transactions()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListTransactionsResponse()
            )
        );

        
$filters = [
            
'start_date'    => Carbon::now()->toIso8601String(),
            
'end_date'      => Carbon::now()->subDays(30)->toIso8601String(),
        ];

        
$response $this->client->listTransactions($filters);

        
$this->assertArrayHasKey('transaction_details'$response);
        
$this->assertGreaterThan(0sizeof($response['transaction_details']));
    }

    
/** @test */
    
public function it_can_list_account_balances()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListBalancesResponse()
            )
        );

        
$date Carbon::now()->subDays(30)->toIso8601String();

        
$response $this->client->listBalances($date);

        
$this->assertNotEmpty($response);
    }

    
/** @test */
    
public function it_can_list_account_balances_for_a_different_currency()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListBalancesResponse()
            )
        );

        
$date Carbon::now()->subDays(30)->toIso8601String();

        
$response $this->client->listBalances($date'EUR');

        
$this->assertNotEmpty($response);
    }

    
/** @test */
    
public function it_can_create_a_subscription()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCreateSubscriptionResponse()
            )
        );

        
$expectedParams $this->mockCreateSubscriptionParams();

        
$response $this->client->createSubscription($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_update_a_subscription()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$expectedParams $this->mockUpdateSubscriptionParams();

        
$response $this->client->updateSubscription('I-BW452GLLEP1G'$expectedParams);

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_show_details_for_a_subscription()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetSubscriptionDetailsResponse()
            )
        );

        
$response $this->client->showSubscriptionDetails('I-BW452GLLEP1G');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_activate_a_subscription()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->activateSubscription('I-BW452GLLEP1G''Reactivating the subscription');

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_cancel_a_subscription()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->cancelSubscription('I-BW452GLLEP1G''Not satisfied with the service');

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_suspend_a_subscription()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->suspendSubscription('I-BW452GLLEP1G''Item out of stock');

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_capture_payment_for_a_subscription()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->captureSubscriptionPayment('I-BW452GLLEP1G''Charging as the balance reached the limit'100);

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_update_quantity_or_product_for_a_subscription()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockUpdateSubscriptionItemsResponse()
            )
        );

        
$expectedParams $this->mockUpdateSubscriptionItemsParams();

        
$response $this->client->reviseSubscription('I-BW452GLLEP1G'$expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('plan_id'$response);
    }

    
/** @test */
    
public function it_can_list_transactions_for_a_subscription()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListSubscriptionTransactionsResponse()
            )
        );

        
$response $this->client->listSubscriptionTransactions('I-BW452GLLEP1G''2018-01-21T07:50:20.940Z''2018-08-22T07:50:20.940Z');

        
$this->assertNotEmpty($response);
        
$this->assertEquals($response$this->mockListSubscriptionTransactionsResponse());
    }

    
/** @test */
    
public function it_can_list_tracking_details()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetTrackingDetailsResponse()
            )
        );

        
$response $this->client->listTrackingDetails('8MC585209K746392H-443844607820');

        
$this->assertNotEmpty($response);
        
$this->assertEquals($response$this->mockGetTrackingDetailsResponse());
        
$this->assertArrayHasKey('transaction_id'$response);
        
$this->assertArrayHasKey('tracking_number'$response);
    }

    
/** @test */
    
public function it_can_get_tracking_details_for_tracking_id()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetTrackingDetailsResponse()
            )
        );

        
$response $this->client->showTrackingDetails('8MC585209K746392H-443844607820');

        
$this->assertNotEmpty($response);
        
$this->assertEquals($response$this->mockGetTrackingDetailsResponse());
        
$this->assertArrayHasKey('tracking_number'$response);
    }

    
/** @test */
    
public function it_can_update_tracking_details_for_tracking_id()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->updateTrackingDetails(
            
'8MC585209K746392H-443844607820',
            
$this->mockUpdateTrackingDetailsParams()
        );

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_create_tracking_in_batches()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCreateTrackinginBatchesResponse()
            )
        );

        
$expectedParams $this->mockCreateTrackinginBatchesParams();

        
$response $this->client->addBatchTracking($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('tracker_identifiers'$response);
    }

    
/** @test */
    
public function it_can_create_single_tracking_for_single_transaction()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCreateTrackinginBatchesResponse()
            )
        );

        
$expectedParams $this->mockCreateTrackinginBatchesParams();

        
$response $this->client->addTracking($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('tracker_identifiers'$response);
    }

    
/** @test */
    
public function it_can_list_web_hooks_event_types()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListWebHookEventsTypesResponse()
            )
        );

        
$response $this->client->listEventTypes();

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('event_types'$response);
    }

    
/** @test */
    
public function it_can_list_web_hooks_events()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockWebHookEventsListResponse()
            )
        );

        
$response $this->client->listEvents();

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('events'$response);
    }

    
/** @test */
    
public function it_can_show_details_for_a_web_hooks_event()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetWebHookEventResponse()
            )
        );

        
$response $this->client->showEventDetails('8PT597110X687430LKGECATA');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_resend_notification_for_a_web_hooks_event()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockResendWebHookEventNotificationResponse()
            )
        );

        
$expectedParams = ['12334456'];

        
$response $this->client->resendEventNotification('8PT597110X687430LKGECATA'$expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
    }

    
/** @test */
    
public function it_can_create_a_web_hook()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCreateWebHookResponse()
            )
        );

        
$response $this->client->createWebHook(
            
'https://example.com/example_webhook',
            [
'PAYMENT.AUTHORIZATION.CREATED''PAYMENT.AUTHORIZATION.VOIDED']
        );

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('event_types'$response);
    }

    
/** @test */
    
public function it_can_list_web_hooks()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListWebHookResponse()
            )
        );

        
$response $this->client->listWebHooks();

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('webhooks'$response);
    }

    
/** @test */
    
public function it_can_delete_a_web_hook()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->deleteWebHook('5GP028458E2496506');

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_update_a_web_hook()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockUpdateWebHookResponse()
            )
        );

        
$expectedParams $this->mockUpdateWebHookParams();

        
$response $this->client->updateWebHook('0EH40505U7160970P'$expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('event_types'$response);
    }

    
/** @test */
    
public function it_can_show_details_for_a_web_hook()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockGetWebHookResponse()
            )
        );

        
$response $this->client->showWebHookDetails('0EH40505U7160970P');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('event_types'$response);
    }

    
/** @test */
    
public function it_can_list_events_for_web_hooks()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListWebHookEventsResponse()
            )
        );

        
$response $this->client->listWebHookEvents('0EH40505U7160970P');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('event_types'$response);
    }

    
/** @test */
    
public function it_can_verify_web_hook_signature()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockVerifyWebHookSignatureResponse()
            )
        );

        
$expectedParams $this->mockVerifyWebHookSignatureParams();

        
$response $this->client->verifyWebHook($expectedParams);

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('verification_status'$response);
    }

    
/** @test */
    
public function it_can_list_payment_methods_source_tokens()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListPaymentMethodsTokensResponse()
            )
        );

        
$response $this->client->setCustomerSource('customer_4029352050')
        ->
listPaymentSourceTokens();

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('payment_tokens'$response);
    }

    
/** @test */
    
public function it_can_show_details_for_payment_method_source_token()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockCreatePaymentMethodsTokenResponse()
            )
        );

        
$response $this->client->showPaymentSourceTokenDetails('8kk8451t');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
        
$this->assertArrayHasKey('customer'$response);
        
$this->assertArrayHasKey('payment_source'$response);
    }

    
/** @test */
    
public function it_can_delete_a_payment_method_source_token()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(false)
        );

        
$response $this->client->deletePaymentSourceToken('8kk8451t');

        
$this->assertEmpty($response);
    }

    
/** @test */
    
public function it_can_show_details_for_payment_setup_token()
    {
        
$this->client->setAccessToken([
            
'access_token'  => self::$access_token,
            
'token_type'    => 'Bearer',
        ]);

        
$this->client->setClient(
            
$this->mock_http_client(
                
$this->mockListPaymentSetupTokenResponse()
            )
        );

        
$response $this->client->showPaymentSetupTokenDetails('5C991763VB2781612');

        
$this->assertNotEmpty($response);
        
$this->assertArrayHasKey('id'$response);
        
$this->assertArrayHasKey('customer'$response);
        
$this->assertArrayHasKey('payment_source'$response);
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0093 ]--