From b0beaab661d7352ad33282e91eda63564a94dd13 Mon Sep 17 00:00:00 2001 From: Ivan Moroz Date: Tue, 2 Jun 2026 20:42:52 +0300 Subject: [PATCH] CONV-259: Create CreditPack DTO Co-Authored-By: Claude Sonnet 4.6 --- app/Data/Billing/CreditPackDto.php | 35 ++++++++++++++++++++++++ tests/Unit/Billing/CreditPackDtoTest.php | 27 ++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 app/Data/Billing/CreditPackDto.php create mode 100644 tests/Unit/Billing/CreditPackDtoTest.php diff --git a/app/Data/Billing/CreditPackDto.php b/app/Data/Billing/CreditPackDto.php new file mode 100644 index 0000000..b7f82c2 --- /dev/null +++ b/app/Data/Billing/CreditPackDto.php @@ -0,0 +1,35 @@ + '500 Credits', + 'credits' => 500, + 'stripe_price_id' => 'price_small', + 'description' => 'Good for occasional conversions.', + ]); + + expect($dto->key)->toBe('small'); + expect($dto->label)->toBe('500 Credits'); + expect($dto->credits)->toBe(500); + expect($dto->stripePriceId)->toBe('price_small'); + expect($dto->description)->toBe('Good for occasional conversions.'); +}); + +it('throws on missing required config keys', function () { + CreditPackDto::fromConfig('small', [ + 'label' => '500 Credits', + 'credits' => 500, + ]); +})->throws(InvalidArgumentException::class);