create([ 'lemonsqueezy_variant_id' => 'pri_test_123', 'price' => 129, ]); $checkoutService = Mockery::mock(LemonSqueezyCheckoutService::class); $checkoutService->shouldReceive('createCheckout') ->once() ->withArgs(function ($tenant, $payloadPackage, array $payload) use ($package) { return $tenant->is($this->tenant) && $payloadPackage->is($package) && array_key_exists('success_url', $payload) && array_key_exists('return_url', $payload) && array_key_exists('metadata', $payload) && is_array($payload['metadata']) && ! empty($payload['metadata']['checkout_session_id']); }) ->andReturn([ 'checkout_url' => 'https://checkout.lemonsqueezy.test/checkout/123', 'id' => 'chk_test_123', ]); $this->instance(LemonSqueezyCheckoutService::class, $checkoutService); $response = $this->authenticatedRequest('POST', '/api/v1/tenant/packages/lemonsqueezy-checkout', [ 'package_id' => $package->id, ]); $response->assertOk() ->assertJsonPath('checkout_url', 'https://checkout.lemonsqueezy.test/checkout/123') ->assertJsonStructure(['checkout_session_id']); } public function test_lemonsqueezy_checkout_requires_lemonsqueezy_variant_id(): void { $package = Package::factory()->create([ 'lemonsqueezy_variant_id' => null, 'price' => 129, ]); $response = $this->authenticatedRequest('POST', '/api/v1/tenant/packages/lemonsqueezy-checkout', [ 'package_id' => $package->id, ]); $response->assertStatus(422) ->assertJsonStructure([ 'errors' => [ 'package_id' => [], ], ]); } }