neuer checkout-pfad: /de/bestellen/paketID und /en/checkout/PackageID

This commit is contained in:
Codex Agent
2025-12-20 16:17:21 +01:00
parent 18297aa3f1
commit 6500b8df2c
18 changed files with 331 additions and 345 deletions

View File

@@ -4,6 +4,7 @@ namespace Tests\Feature\Checkout;
use App\Models\Package;
use App\Models\User;
use App\Support\CheckoutRoutes;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
@@ -307,7 +308,7 @@ class CheckoutAuthTest extends TestCase
{
$package = Package::factory()->create();
$response = $this->get(route('checkout.show', $package));
$response = $this->get(CheckoutRoutes::wizardUrl($package, 'de'));
$response->assertStatus(200)
->assertInertia(fn ($page) => $page
@@ -327,7 +328,7 @@ class CheckoutAuthTest extends TestCase
public function test_checkout_show_with_invalid_package_returns_404()
{
$response = $this->get(route('checkout.show', 999));
$response = $this->get(CheckoutRoutes::wizardUrl(999, 'de'));
$response->assertStatus(404);
}

View File

@@ -4,6 +4,7 @@ namespace Tests\Feature;
use App\Models\Package;
use App\Models\User;
use App\Support\CheckoutRoutes;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Laravel\Socialite\Contracts\Factory as SocialiteFactory;
use Laravel\Socialite\Contracts\Provider as SocialiteProvider;
@@ -34,19 +35,25 @@ class CheckoutGoogleControllerTest extends TestCase
$mock->shouldReceive('driver')->with('google')->andReturn($provider);
});
$response = $this->get('/checkout/auth/google?package_id=' . $package->id . '&locale=de');
$response = $this->get('/checkout/auth/google?package_id='.$package->id.'&locale=de');
$response->assertRedirect('/google/auth');
$this->assertSame($package->id, session('checkout_google_payload.package_id'));
}
public function test_callback_creates_user_and_logs_in(): void
public function test_callback_logs_in_existing_user_and_attaches_tenant(): void
{
$package = Package::factory()->create(['price' => 0]);
$existingUser = User::factory()->create([
'email' => 'checkout-google@example.com',
'pending_purchase' => false,
]);
$googleUser = Mockery::mock(SocialiteUserContract::class);
$googleUser->shouldReceive('getEmail')->andReturn('checkout-google@example.com');
$googleUser->shouldReceive('getName')->andReturn('Checkout Google');
$googleUser->shouldReceive('getAvatar')->andReturn(null);
$googleUser->shouldReceive('getRaw')->andReturn([]);
$provider = Mockery::mock(SocialiteProvider::class);
$provider->shouldReceive('user')->andReturn($googleUser);
@@ -61,9 +68,9 @@ class CheckoutGoogleControllerTest extends TestCase
])
->get('/checkout/auth/google/callback');
$response->assertRedirect(route('purchase.wizard', ['package' => $package->id]));
$response->assertRedirect(CheckoutRoutes::wizardUrl($package->id, 'de'));
$this->assertAuthenticated();
$this->assertAuthenticatedAs($existingUser);
$user = auth()->user();
$this->assertSame('checkout-google@example.com', $user->email);
@@ -82,6 +89,8 @@ class CheckoutGoogleControllerTest extends TestCase
$googleUser = Mockery::mock(SocialiteUserContract::class);
$googleUser->shouldReceive('getEmail')->andReturn(null);
$googleUser->shouldReceive('getName')->andReturn('No Email');
$googleUser->shouldReceive('getAvatar')->andReturn(null);
$googleUser->shouldReceive('getRaw')->andReturn([]);
$provider = Mockery::mock(SocialiteProvider::class);
$provider->shouldReceive('user')->andReturn($googleUser);
@@ -96,7 +105,7 @@ class CheckoutGoogleControllerTest extends TestCase
])
->get('/checkout/auth/google/callback');
$response->assertRedirect(route('purchase.wizard', ['package' => $package->id]));
$response->assertRedirect(CheckoutRoutes::wizardUrl($package->id, 'en'));
$response->assertSessionHas('checkout_google_error');
$this->assertGuest();
}