seed(RolePermissionSeeder::class); } public function test_platform_admin_can_create_tenant_with_owner_and_default_roles(): void { $admin = User::factory()->create(['is_platform_admin' => true]); $response = $this->actingAs($admin)->post('/administration/tenants', [ 'name' => 'ISP Jakarta', 'slug' => 'isp-jakarta', 'is_active' => true, 'owner_name' => 'Tenant Owner', 'owner_email' => 'owner@example.test', 'owner_password' => 'Strong!Password123', 'owner_password_confirmation' => 'Strong!Password123', ]); $tenant = Tenant::where('slug', 'isp-jakarta')->firstOrFail(); $owner = User::withoutGlobalScope('tenant')->where('email', 'owner@example.test')->firstOrFail(); $response->assertRedirect(route('administration.tenants.edit', $tenant)); $this->assertSame($tenant->id, $owner->tenant_id); $this->assertTrue(Hash::check('Strong!Password123', $owner->password)); $this->assertNotNull($owner->email_verified_at); $this->assertDatabaseCount('roles', 3); $this->assertDatabaseHas('roles', ['tenant_id' => $tenant->id, 'name' => 'TENANT ADMIN']); $this->assertDatabaseHas('roles', ['tenant_id' => $tenant->id, 'name' => 'TENANT USER']); $this->assertDatabaseHas('model_has_roles', ['tenant_id' => $tenant->id, 'model_id' => $owner->id]); } public function test_normal_user_cannot_open_platform_tenant_administration(): void { $tenant = Tenant::factory()->create(); $user = User::factory()->for($tenant)->create(); $this->actingAs($user)->get('/administration/tenants')->assertForbidden(); } public function test_tenant_with_users_cannot_be_deleted(): void { $admin = User::factory()->create(['is_platform_admin' => true]); $tenant = Tenant::factory()->create(); User::factory()->for($tenant)->create(); $this->actingAs($admin)->delete(route('administration.tenants.destroy', $tenant))->assertStatus(422); $this->assertDatabaseHas('tenants', ['id' => $tenant->id]); } }