set('graph.client_id', 'platform-client-id'); config()->set('graph.client_secret', 'platform-client-secret'); config()->set('graph.tenant_id', 'platform-home-tenant-id'); $resolution = app(PlatformProviderIdentityResolver::class)->resolve('customer-tenant-id'); expect($resolution->resolved)->toBeTrue() ->and($resolution->connectionType)->toBe(ProviderConnectionType::Platform) ->and($resolution->tenantContext)->toBe('customer-tenant-id') ->and($resolution->effectiveClientId)->toBe('platform-client-id') ->and($resolution->credentialSource)->toBe('platform_config') ->and($resolution->clientSecret)->toBe('platform-client-secret') ->and($resolution->authorityTenant)->toBe('platform-home-tenant-id') ->and($resolution->redirectUri)->toBe(route('admin.consent.callback')); }); it('blocks platform identity resolution when the platform client id is missing', function (): void { config()->set('graph.client_id', ''); config()->set('graph.client_secret', 'platform-client-secret'); $resolution = app(PlatformProviderIdentityResolver::class)->resolve('customer-tenant-id'); expect($resolution->resolved)->toBeFalse() ->and($resolution->effectiveReasonCode())->toBe(ProviderReasonCodes::PlatformIdentityMissing); }); it('blocks platform identity resolution when the platform secret is missing', function (): void { config()->set('graph.client_id', 'platform-client-id'); config()->set('graph.client_secret', ''); $resolution = app(PlatformProviderIdentityResolver::class)->resolve('customer-tenant-id'); expect($resolution->resolved)->toBeFalse() ->and($resolution->effectiveReasonCode())->toBe(ProviderReasonCodes::PlatformIdentityIncomplete); });