This commit is contained in:
a6a2f5842 2025-11-29 08:32:58 +01:00
parent ffc8716c22
commit bc8158ba7b
4 changed files with 32 additions and 6 deletions

View File

@ -528,4 +528,9 @@ class Product extends Model implements Purchasable, Cartable
}) })
->where('product_id', $this->id); ->where('product_id', $this->id);
} }
public function hasPrice() : bool
{
return $this->prices()->exists();
}
} }

View File

@ -54,7 +54,7 @@ class ProductPrice extends Model implements Cartable
public function getCurrentPrice(bool|null $sale_price = null): float public function getCurrentPrice(bool|null $sale_price = null): float
{ {
if ($sale_price) { if ($sale_price) {
return $this->sale_unit_amount; return $this->sale_unit_amount ?? $this->unit_amount;
} }
return $this->unit_amount; return $this->unit_amount;

View File

@ -24,10 +24,18 @@ class StripeChargeFlowTest extends TestCase
{ {
parent::setUp(); parent::setUp();
$key = env('STRIPE_KEY', 'your_stripe_test_key_here');
$secret = env('STRIPE_SECRET', 'your_stripe_test_secret_here');
if (strpos($key, 'your_stripe_test_key_here') >= 0 ||
strpos($secret, 'your_stripe_test_secret_here') >= 0) {
$this->markTestSkipped('Stripe test keys are not set in environment variables.');
}
// Set Stripe test keys // Set Stripe test keys
config([ config([
'cashier.key' => env('STRIPE_KEY', 'sk_test_fake'), 'cashier.key' => $key,
'cashier.secret' => env('STRIPE_SECRET', 'sk_test_fake'), 'cashier.secret' => $secret,
]); ]);
Stripe::setApiKey(config('cashier.secret')); Stripe::setApiKey(config('cashier.secret'));

View File

@ -52,18 +52,31 @@ class CartTest extends TestCase
public function cart_respects_sale_prices() public function cart_respects_sale_prices()
{ {
$cart = Cart::create(); $cart = Cart::create();
$product = Product::factory()->create(); $product = Product::factory()->withPrices(1,50)->create([
'sale_start' => now()->subDay(),
'sale_end' => now()->addDay(),
]);
$product->prices()->first()->update([
'is_default' => false,
]);
$price = ProductPrice::create([ $price = ProductPrice::create([
'purchasable_id' => $product->id, 'purchasable_id' => $product->id,
'purchasable_type' => get_class($product), 'purchasable_type' => get_class($product),
'unit_amount' => 100.00, 'unit_amount' => 100.00,
'sale_unit_amount' => 80.00, 'sale_unit_amount' => 80.00,
'currency' => 'USD', 'currency' => 'USD',
'is_default' => true,
]); ]);
$cartItem = $cart->addToCart($price, quantity: 1); // Assert product has price
$this->assertTrue($product->hasPrice());
$this->assertEquals(2, $product->prices()->count());
$this->assertEquals(80.00, $cartItem->price); $cartItem = $cart->addToCart($product, quantity: 1);
$this->assertEquals(80.00, $cartItem->getSubtotal());
$this->assertEquals(100.00, $cartItem->regular_price); $this->assertEquals(100.00, $cartItem->regular_price);
} }