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);
}
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
{
if ($sale_price) {
return $this->sale_unit_amount;
return $this->sale_unit_amount ?? $this->unit_amount;
}
return $this->unit_amount;

View File

@ -24,10 +24,18 @@ class StripeChargeFlowTest extends TestCase
{
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
config([
'cashier.key' => env('STRIPE_KEY', 'sk_test_fake'),
'cashier.secret' => env('STRIPE_SECRET', 'sk_test_fake'),
'cashier.key' => $key,
'cashier.secret' => $secret,
]);
Stripe::setApiKey(config('cashier.secret'));

View File

@ -52,18 +52,31 @@ class CartTest extends TestCase
public function cart_respects_sale_prices()
{
$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([
'purchasable_id' => $product->id,
'purchasable_type' => get_class($product),
'unit_amount' => 100.00,
'sale_unit_amount' => 80.00,
'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);
}