It's mocked. Here is the test:
/**
* @testdox Handle payment_intent.succeeded
*/
public function testHandlePaymentIntentSucceeded(): void
{
/** @var \App\Models\Basket $basket */
$basket = Basket::factory()->create();
$this->mock(CreateOrder::class, function (MockInterface $mock) use ($basket) {
$mock
->shouldReceive('handle')
->once()
->withArgs(function (Basket $basketArg, PaymentIntent $paymentIntent) use ($basket) {
return $basketArg->is($basket) && $paymentIntent->id === 'pi_test';
});
});
$this->mock(StripeClient::class);
$this->sendWebhook([
'type' => 'payment_intent.succeeded',
'data' => [
'object' => [
'charges' => [
'object' => 'list',
'data' => [
[
'id' => 'ch_test',
'metadata' => [
'basket_id' => (string) $basket->getKey(),
],
'object' => 'charge',
'status' => 'succeeded',
],
],
],
'id' => 'pi_test',
'object' => 'payment_intent',
],
],
])->assertSuccessful();
}
protected function sendWebhook(array $data = []): TestResponse
{
return $this->withoutExceptionHandling()->postJson('/stripe/webhook', $data);
}