TenantAtlas/apps/platform/tests/Unit/MicrosoftGraphClientTest.php
ahmido e64bae9cfc feat: cut over tenant core to managed environments (#335)
## Summary
- replace the legacy Tenant and TenantMembership core models with ManagedEnvironment and ManagedEnvironmentMembership
- propagate the managed environment naming and key changes across Filament resources, pages, controllers, jobs, models, and supporting runtime paths
- add feature 279 spec artifacts and focused managed-environment test coverage for model behavior, route binding, panel context, authorization, and legacy guardrails

## Validation
- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/ManagedEnvironment/LegacyTenantCoreGuardTest.php tests/Feature/ManagedEnvironment/ManagedEnvironmentAuthorizationTest.php tests/Feature/ManagedEnvironment/ManagedEnvironmentPanelContextTest.php tests/Feature/ManagedEnvironment/ManagedEnvironmentRouteBindingTest.php tests/Unit/ManagedEnvironment/ManagedEnvironmentContextResolverTest.php tests/Unit/ManagedEnvironment/ManagedEnvironmentModelTest.php`
- `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent`

## Notes
- branch pushed from commit `1123b122`
- browser smoke test file was added but not run in this pass

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #335
2026-05-07 06:38:14 +00:00

44 lines
1.7 KiB
PHP

<?php
use App\Services\Graph\GraphResponse;
use App\Services\Graph\MicrosoftGraphClient;
use GuzzleHttp\Psr7\Response as PsrResponse;
use Illuminate\Http\Client\RequestException as HttpRequestException;
use Illuminate\Http\Client\Response as HttpClientResponse;
use Illuminate\Support\Facades\Http;
it('returns a graph response when the HTTP client throws for a 400 response', function () {
config()->set('graph.client_id', 'client-id');
config()->set('graph.client_secret', 'secret');
config()->set('graph.managed_environment_id', 'tenant-id');
Http::fake(function () {
$psrResponse = new PsrResponse(400, [], json_encode([
'error' => [
'code' => 'Request_BadRequest',
'message' => 'One or more added object references already exist for the following modified properties: \'members\'.',
],
]));
$response = new HttpClientResponse($psrResponse);
throw new HttpRequestException($response);
});
$client = app(MicrosoftGraphClient::class);
$response = $client->request('POST', 'groups/group-1/members/$ref', [
'json' => [
'@odata.id' => 'https://graph.microsoft.com/v1.0/directoryObjects/sp-1',
],
'access_token' => 'delegated-token',
]);
expect($response)->toBeInstanceOf(GraphResponse::class);
expect($response->failed())->toBeTrue();
expect($response->status)->toBe(400);
expect($response->errors[0]['code'] ?? null)->toBe('Request_BadRequest');
expect(strtolower($response->errors[0]['message'] ?? ''))->toContain('added object references already exist');
expect($response->data['error']['message'] ?? null)->toContain('object references already exist');
});