create(['price' => 0]); $response = $this->post(route('register.store'), [ 'username' => 'testuser', 'email' => 'test@example.com', 'password' => 'password', 'password_confirmation' => 'password', 'first_name' => 'Test', 'last_name' => 'User', 'address' => 'Test Address', 'phone' => '123456789', 'privacy_consent' => true, 'package_id' => $freePackage->id, ]); $response->assertRedirect(route('verification.notice', absolute: false)); $this->assertDatabaseHas('users', [ 'username' => 'testuser', 'email' => 'test@example.com', 'first_name' => 'Test', 'last_name' => 'User', 'address' => 'Test Address', 'phone' => '123456789', 'role' => 'tenant_admin', ]); $user = User::where('email', 'test@example.com')->first(); $this->assertNotNull($user->tenant); $this->assertDatabaseHas('tenants', [ 'user_id' => $user->id, 'name' => 'Test User', ]); $this->assertDatabaseHas('tenant_packages', [ 'tenant_id' => $user->tenant->id, 'package_id' => $freePackage->id, ]); } public function test_registration_without_package() { $response = $this->post(route('register.store'), [ 'username' => 'testuser2', 'email' => 'test2@example.com', 'password' => 'password', 'password_confirmation' => 'password', 'first_name' => 'Test', 'last_name' => 'User', 'address' => 'Test Address', 'phone' => '123456789', 'privacy_consent' => true, ]); $response->assertRedirect(route('verification.notice', absolute: false)); $user = User::where('email', 'test2@example.com')->first(); $this->assertNotNull($user->tenant); $this->assertDatabaseHas('users', [ 'email' => 'test2@example.com', 'role' => 'user', ]); $this->assertDatabaseMissing('tenant_packages', [ 'tenant_id' => $user->tenant->id, ]); } public function test_registration_validation_fails() { $response = $this->post(route('register.store'), [ 'username' => '', 'email' => 'invalid', 'password' => 'short', 'password_confirmation' => 'different', 'first_name' => '', 'last_name' => '', 'address' => '', 'phone' => '', 'privacy_consent' => false, ]); $response->assertSessionHasErrors([ 'username', 'email', 'password', 'first_name', 'last_name', 'address', 'phone', 'privacy_consent', ]); } public function test_registration_with_paid_package_returns_inertia_redirect() { $paidPackage = Package::factory()->create(['price' => 10.00]); $response = $this->post(route('register.store'), [ 'username' => 'paiduser', 'email' => 'paid@example.com', 'password' => 'password', 'password_confirmation' => 'password', 'first_name' => 'Paid', 'last_name' => 'User', 'address' => 'Paid Address', 'phone' => '123456789', 'privacy_consent' => true, 'package_id' => $paidPackage->id, ]); $response->assertRedirect(route('buy.packages', $paidPackage->id)); $this->assertDatabaseHas('users', [ 'username' => 'paiduser', 'email' => 'paid@example.com', 'role' => 'user', // No upgrade for paid until payment ]); } public function test_registered_event_sends_welcome_email() { Mail::fake(); $freePackage = Package::factory()->create(['price' => 0]); $response = $this->post(route('register.store'), [ 'username' => 'testuser3', 'email' => 'test3@example.com', 'password' => 'password', 'password_confirmation' => 'password', 'first_name' => 'Test', 'last_name' => 'User', 'address' => 'Test Address', 'phone' => '123456789', 'privacy_consent' => true, 'package_id' => $freePackage->id, ]); Mail::assertQueued(Welcome::class, function ($mail) { return $mail->to[0]['address'] === 'test3@example.com'; }); } }