TenantAtlas/tests/Unit/MicrosoftGraphClientTest.php

47 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;
use Tests\TestCase;
uses(TestCase::class);
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');
});