TenantAtlas/apps/platform/tests/Unit/MicrosoftGraphClientTest.php
ahmido ce0615a9c1 Spec 182: relocate Laravel platform to apps/platform (#213)
## Summary
- move the Laravel application into `apps/platform` and keep the repository root for orchestration, docs, and tooling
- update the local command model, Sail/Docker wiring, runtime paths, and ignore rules around the new platform location
- add relocation quickstart/contracts plus focused smoke coverage for bootstrap, command model, routes, and runtime behavior

## Validation
- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/PlatformRelocation`
- integrated browser smoke validated `/up`, `/`, `/admin`, `/admin/choose-workspace`, and tenant route semantics for `200`, `403`, and `404`

## Remaining Rollout Checks
- validate Dokploy build context and working-directory assumptions against the new `apps/platform` layout
- confirm web, queue, and scheduler processes all start from the expected working directory in staging/production
- verify no legacy volume mounts or asset-publish paths still point at the old root-level `public/` or `storage/` locations

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #213
2026-04-08 08:40:47 +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.tenant_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');
});