Files
Wian Drs 1e80be180e
tests / ci (push) Has been cancelled
Initial commit device-management
2026-08-25 09:42:00 +07:00

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]);
}
}