HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/be.naniguide.com/tests/Unit/Cashier/DTO/SubscriptionResultTest.php
<?php

namespace Tests\Unit\Cashier\DTO;

use Tests\TestCase;
use App\Cashier\DTO\SubscriptionResult;

class SubscriptionResultTest extends TestCase
{
    public function test_active_factory_sets_all_required_fields()
    {
        $pmData = ['card_type' => 'Visa', 'last_4' => '4242'];
        $result = SubscriptionResult::active('sub_1Oxabc', 'cus_xyz', 1735689600, $pmData);

        $this->assertSame(SubscriptionResult::STATUS_ACTIVE, $result->status);
        $this->assertSame('sub_1Oxabc', $result->remoteSubscriptionId);
        $this->assertSame('cus_xyz', $result->remoteCustomerId);
        $this->assertSame(1735689600, $result->currentPeriodEnd);
        $this->assertSame($pmData, $result->paymentMethodData);
        $this->assertNull($result->clientSecret);
        $this->assertNull($result->error);
    }

    public function test_requires_auth_factory_carries_client_secret_and_sub_id()
    {
        $result = SubscriptionResult::requiresAuth('sub_pending', 'pi_xxx_secret_yyy', ['card_type' => 'Visa']);

        $this->assertSame(SubscriptionResult::STATUS_REQUIRES_ACTION, $result->status);
        $this->assertSame('sub_pending', $result->remoteSubscriptionId);
        $this->assertSame('pi_xxx_secret_yyy', $result->clientSecret);
        $this->assertSame(['card_type' => 'Visa'], $result->paymentMethodData);
        $this->assertNull($result->currentPeriodEnd);
    }

    public function test_failed_factory_sets_error_and_nulls()
    {
        $result = SubscriptionResult::failed('Card declined');

        $this->assertSame(SubscriptionResult::STATUS_FAILED, $result->status);
        $this->assertSame('Card declined', $result->error);
        $this->assertNull($result->remoteSubscriptionId);
        $this->assertNull($result->remoteCustomerId);
        $this->assertNull($result->currentPeriodEnd);
        $this->assertNull($result->clientSecret);
        $this->assertSame([], $result->paymentMethodData);
    }
}