set('graph.client_id', 'platform-client-id'); config()->set('graph.client_secret', 'platform-client-secret'); $tenant = Tenant::factory()->create([ 'tenant_id' => 'b0091e5d-944f-4a34-bcd9-12cbfb7b75cf', 'name' => 'Test Tenant', 'app_client_id' => 'legacy-tenant-client-id', ]); $connection = ProviderConnection::factory()->platform()->create([ 'tenant_id' => (int) $tenant->getKey(), 'workspace_id' => (int) $tenant->workspace_id, 'provider' => 'microsoft', 'entra_tenant_id' => (string) $tenant->graphTenantId(), 'is_default' => true, ]); ProviderCredential::factory()->create([ 'provider_connection_id' => (int) $connection->getKey(), 'payload' => [ 'client_id' => 'dedicated-fallback-client-id', 'client_secret' => 'dedicated-fallback-client-secret', ], ]); $url = TenantResource::adminConsentUrl($tenant); parse_str((string) parse_url((string) $url, PHP_URL_QUERY), $query); expect($url) ->toContain('scope=') ->toContain(urlencode('https://graph.microsoft.com/.default')) ->and($query['client_id'] ?? null)->toBe('platform-client-id') ->and($query['client_id'] ?? null)->not->toBe('legacy-tenant-client-id') ->and($query['client_id'] ?? null)->not->toBe('dedicated-fallback-client-id'); }); it('builds dedicated admin consent urls from dedicated provider connection credentials', function (): void { $tenant = Tenant::factory()->create([ 'app_client_id' => null, ]); $connection = ProviderConnection::factory()->dedicated()->create([ 'tenant_id' => (int) $tenant->getKey(), 'workspace_id' => (int) $tenant->workspace_id, 'provider' => 'microsoft', 'entra_tenant_id' => (string) $tenant->graphTenantId(), 'is_default' => true, ]); ProviderCredential::factory()->create([ 'provider_connection_id' => (int) $connection->getKey(), 'payload' => [ 'client_id' => 'derived-client-id', 'client_secret' => 'derived-client-secret', ], ]); $url = TenantResource::adminConsentUrl($tenant); parse_str((string) parse_url((string) $url, PHP_URL_QUERY), $query); expect($url) ->not->toBeNull() ->and($url)->toContain('login.microsoftonline.com') ->and($url)->toContain('adminconsent') ->and($url)->toContain(urlencode('derived-client-id')) ->and($query['client_id'] ?? null)->toBe('derived-client-id'); });