From 0bb8381f0a3c9c9fcca2034c6b61c3f2e56e220b Mon Sep 17 00:00:00 2001 From: Robert Kujawa Date: Mon, 20 May 2024 05:49:09 -0600 Subject: [PATCH 1/2] Fix factory suppositions --- .../factories/TransactionEventFactory.php | 23 +++++++------- src/CheckoutServiceProvider.php | 11 ------- src/Models/TransactionEvent.php | 17 ----------- tests/Unit/PaymentModelTest.php | 5 ++-- tests/Unit/TransactionEventModelTest.php | 30 +++++++------------ 5 files changed, 25 insertions(+), 61 deletions(-) diff --git a/database/factories/TransactionEventFactory.php b/database/factories/TransactionEventFactory.php index a4e2ad2..ee0c45a 100644 --- a/database/factories/TransactionEventFactory.php +++ b/database/factories/TransactionEventFactory.php @@ -3,11 +3,11 @@ namespace Payavel\Checkout\Database\Factories; use Illuminate\Database\Eloquent\Factories\Factory; -use Payavel\Checkout\Models\Payment; -use Payavel\Checkout\Models\TransactionEvent; use Payavel\Checkout\CheckoutStatus; use Payavel\Checkout\Models\Dispute; +use Payavel\Checkout\Models\Payment; use Payavel\Checkout\Models\Refund; +use Payavel\Checkout\Models\TransactionEvent; use Payavel\Orchestration\Support\ServiceConfig; class TransactionEventFactory extends Factory @@ -49,15 +49,16 @@ public function configure() $transactionEvent->amount = $transactionEvent->transactionable->amount ?? $transactionEvent->payment->amount; } - if (is_null($transactionEvent->status_code)) { - $transactionEvent->status_code = [ - ServiceConfig::get('checkout', 'models.' . Payment::class, Payment::class) => CheckoutStatus::AUTHORIZED, - ServiceConfig::get('checkout', 'models.' . Refund::class, Refund::class) => CheckoutStatus::REFUNDED, - ServiceConfig::get('checkout', 'models.' . Dispute::class, Dispute::class) => CheckoutStatus::CHARGEBACK, - ][ - ServiceConfig::get('checkout', 'models.' . $transactionEvent->transactionable_type, $transactionEvent->transactionable_type) ?? - ServiceConfig::get('checkout', 'models.' . Payment::class, Payment::class) - ]; + if (is_null($transactionEvent->status_code) && !is_null($transactionEvent->transactionable_type)) { + $transactionable = new $transactionEvent->transactionable_type(); + + if ($transactionable instanceof Payment) { + $transactionEvent->status_code = CheckoutStatus::AUTHORIZED; + } elseif ($transactionable instanceof Refund) { + $transactionEvent->status_code = CheckoutStatus::REFUNDED; + } elseif ($transactionable instanceof Dispute) { + $transactionEvent->status_code = CheckoutStatus::CHARGEBACK; + } } }); } diff --git a/src/CheckoutServiceProvider.php b/src/CheckoutServiceProvider.php index 9daa762..193516e 100644 --- a/src/CheckoutServiceProvider.php +++ b/src/CheckoutServiceProvider.php @@ -2,14 +2,9 @@ namespace Payavel\Checkout; -use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Support\ServiceProvider; use Payavel\Checkout\Console\Commands\CheckoutInstall; use Payavel\Checkout\Console\Commands\CheckoutProvider; -use Payavel\Checkout\Models\Dispute; -use Payavel\Checkout\Models\Payment; -use Payavel\Checkout\Models\Refund; -use Payavel\Orchestration\Support\ServiceConfig; class CheckoutServiceProvider extends ServiceProvider { @@ -24,12 +19,6 @@ public function boot() $this->registerCommands(); $this->registerMigrations(); - - Relation::morphMap([ - Payment::class => fn () => ServiceConfig::get('checkout', 'models.' . Payment::class, Payment::class), - Refund::class => fn () => ServiceConfig::get('checkout', 'models.' . Refund::class, Refund::class), - Dispute::class => fn () => ServiceConfig::get('checkout', 'models.' . Dispute::class, Dispute::class), - ]); } public function register() diff --git a/src/Models/TransactionEvent.php b/src/Models/TransactionEvent.php index fafbe07..5952f50 100644 --- a/src/Models/TransactionEvent.php +++ b/src/Models/TransactionEvent.php @@ -66,21 +66,4 @@ public function transactionable() { return $this->morphTo(); } - - /** - * Retrieve the actual class name for a given morph class. - * - * @param string $class - * @return string - */ - public static function getActualClassNameForMorph($class) - { - $value = Arr::get(Relation::morphMap() ?: [], $class, $class); - - if (is_callable($value)) { - return $value(); - } - - return $value; - } } diff --git a/tests/Unit/PaymentModelTest.php b/tests/Unit/PaymentModelTest.php index a9a8756..9fb3c14 100644 --- a/tests/Unit/PaymentModelTest.php +++ b/tests/Unit/PaymentModelTest.php @@ -2,6 +2,7 @@ namespace Payavel\Checkout\Tests\Unit; +use Payavel\Checkout\CheckoutStatus; use Payavel\Checkout\Models\Payment; use Payavel\Checkout\Models\PaymentInstrument; use Payavel\Checkout\Models\PaymentRail; @@ -72,12 +73,12 @@ public function retrieve_payment_events() $payment = Payment::factory()->create(); $this->assertEmpty($payment->events); - $paymentWith2Events = Payment::factory()->hasEvents(2)->create(); + $paymentWith2Events = Payment::factory()->hasEvents(2, ['status_code' => CheckoutStatus::AUTHORIZED])->create(); $this->assertCount(2, $paymentWith2Events->events); $this->assertContainsOnlyInstancesOf(TransactionEvent::class, $paymentWith2Events->events); ServiceConfig::set('checkout', 'models.' . TransactionEvent::class, TestTransactionEvent::class); - $paymentWith3OverriddenEvents = Payment::factory()->hasEvents(3)->create(); + $paymentWith3OverriddenEvents = Payment::factory()->hasEvents(3, ['status_code' => CheckoutStatus::AUTHORIZED])->create(); $this->assertCount(3, $paymentWith3OverriddenEvents->events); $this->assertContainsOnlyInstancesOf(TestTransactionEvent::class, $paymentWith3OverriddenEvents->events); } diff --git a/tests/Unit/TransactionEventModelTest.php b/tests/Unit/TransactionEventModelTest.php index d850512..ed0451d 100644 --- a/tests/Unit/TransactionEventModelTest.php +++ b/tests/Unit/TransactionEventModelTest.php @@ -2,13 +2,10 @@ namespace Payavel\Checkout\Tests\Unit; -use Payavel\Checkout\Models\Dispute; +use Payavel\Checkout\CheckoutStatus; use Payavel\Checkout\Models\Payment; -use Payavel\Checkout\Models\Refund; use Payavel\Checkout\Models\TransactionEvent; -use Payavel\Checkout\Tests\Models\TestDispute; use Payavel\Checkout\Tests\Models\TestPayment; -use Payavel\Checkout\Tests\Models\TestRefund; use Payavel\Checkout\Tests\TestCase; use Payavel\Orchestration\Support\ServiceConfig; use PHPUnit\Framework\Attributes\Test; @@ -18,33 +15,26 @@ class TransactionEventModelTest extends TestCase #[Test] public function retrieve_transaction_event_payment() { - $transactionEventWithPayment = TransactionEvent::factory()->create(); + $transactionEventWithPayment = TransactionEvent::factory()->create(['status_code' => CheckoutStatus::AUTHORIZED]); $this->assertInstanceOf(Payment::class, $transactionEventWithPayment->payment); ServiceConfig::set('checkout', 'models.' . Payment::class, TestPayment::class); - $transactionEventWithOverriddenPayment = TransactionEvent::factory()->create(); + $transactionEventWithOverriddenPayment = TransactionEvent::factory()->create(['status_code' => CheckoutStatus::AUTHORIZED]); $this->assertInstanceOf(TestPayment::class, $transactionEventWithOverriddenPayment->payment); } #[Test] public function retrieve_transaction_event_transactionable() { - $transactionEvent = TransactionEvent::factory()->create(); + $transactionEvent = TransactionEvent::factory()->create(['status_code' => CheckoutStatus::AUTHORIZED]); $this->assertNull($transactionEvent->transactionable); - $transactionables = [ - Payment::class => TestPayment::class, - Refund::class => TestRefund::class, - Dispute::class => TestDispute::class, - ]; + $transactionEventWithTransactionable = TransactionEvent::factory()->for(Payment::factory(), 'transactionable')->create(['status_code' => CheckoutStatus::AUTHORIZED]); + $this->assertInstanceOf(Payment::class, $transactionEventWithTransactionable->transactionable); - $randomTransactionable = $this->faker->randomElement(array_keys($transactionables)); - $transactionEventWithTransactionable = TransactionEvent::factory()->for($randomTransactionable::factory(), 'transactionable')->create(); - $this->assertInstanceOf($randomTransactionable, $transactionEventWithTransactionable->transactionable); - - $randomTransactionable = $this->faker->randomElement(array_keys($transactionables)); - ServiceConfig::set('checkout', 'models.' . $randomTransactionable, $transactionables[$randomTransactionable]); - $transactionEventWithOverriddenTransactionable = TransactionEvent::factory()->for($transactionables[$randomTransactionable]::factory(), 'transactionable')->create(); - $this->assertInstanceOf($transactionables[$randomTransactionable], $transactionEventWithOverriddenTransactionable->transactionable); + ServiceConfig::set('checkout', 'models.' . Payment::class, TestPayment::class); + $transactionEventWithOverriddenTransactionable = TransactionEvent::factory()->create(['status_code' => CheckoutStatus::AUTHORIZED]); + $transactionEventWithOverriddenTransactionable->transactionable()->associate(transform(Payment::factory()->create(), fn ($payment) => TestPayment::find($payment->id))); + $this->assertInstanceOf(TestPayment::class, $transactionEventWithOverriddenTransactionable->transactionable); } } From 928f9fefd57a83a49dbe48073e3b434b52ac7ead Mon Sep 17 00:00:00 2001 From: Robert Kujawa Date: Mon, 20 May 2024 05:51:07 -0600 Subject: [PATCH 2/2] Remove unused uses --- src/Models/TransactionEvent.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Models/TransactionEvent.php b/src/Models/TransactionEvent.php index 5952f50..ca93308 100644 --- a/src/Models/TransactionEvent.php +++ b/src/Models/TransactionEvent.php @@ -3,8 +3,6 @@ namespace Payavel\Checkout\Models; use Illuminate\Database\Eloquent\Model; -use Illuminate\Database\Eloquent\Relations\Relation; -use Illuminate\Support\Arr; use Payavel\Orchestration\Support\ServiceConfig; use Payavel\Orchestration\Traits\HasFactory;