<?php

declare(strict_types=1);

use App\Models\OperationRun;
use App\Models\Tenant;
use App\Services\System\AllowedTenantUniverse;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Validation\ValidationException;

uses(RefreshDatabase::class);

it('excludes the platform tenant from the allowed universe query (picker)', function () {
    $platformTenant = Tenant::factory()->create([
        'tenant_id' => null,
        'external_id' => 'platform',
        'name' => 'Platform',
    ]);

    $customerTenant = Tenant::factory()->create([
        'external_id' => 'tenant-1',
        'name' => 'Tenant One',
    ]);

    $universe = app(AllowedTenantUniverse::class);

    $ids = $universe->query()->orderBy('id')->pluck('id')->all();

    expect($ids)->toContain((int) $customerTenant->getKey());
    expect($ids)->not->toContain((int) $platformTenant->getKey());
});

it('rejects attempts to target the platform tenant', function () {
    $platformTenant = Tenant::factory()->create([
        'tenant_id' => null,
        'external_id' => 'platform',
        'name' => 'Platform',
    ]);

    $universe = app(AllowedTenantUniverse::class);

    expect(fn () => $universe->ensureAllowed($platformTenant))
        ->toThrow(ValidationException::class);

    expect(OperationRun::query()->count())->toBe(0);
});
