67 lines
2.5 KiB
PHP
67 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Administration;
|
|
|
|
use App\Models\Tenant;
|
|
use App\Models\User;
|
|
use Database\Seeders\RolePermissionSeeder;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Tests\TestCase;
|
|
|
|
class TenantManagementTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
$this->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]);
|
|
}
|
|
}
|