@@ -0,0 +1,66 @@
|
||||
<?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]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user