ohctech_p8/mc/vendor/microsoft/microsoft-graph/tests/Http/GraphRequestTest.php
2024-10-16 19:18:52 +05:30

244 lines
8.6 KiB
PHP

<?php
use GuzzleHttp\Promise\Utils;
use GuzzleHttp\Psr7\Response;
use PHPUnit\Framework\TestCase;
use Microsoft\Graph\Core\GraphConstants;
use Microsoft\Graph\Graph;
use Microsoft\Graph\Http\GraphRequest;
use Microsoft\Graph\Http\Test\MockClientFactory;
class GraphRequestTest extends TestCase
{
protected $requests;
protected $defaultHeaders;
protected $client;
public function setUp(): void
{
$this->requests = array(
new GraphRequest("GET", "/endpoint", "token", "baseUrl", "version"),
new GraphRequest("PATCH", "/endpoint?query", "token", "baseUrl", "version"),
new GraphRequest("GET", "/endpoint?query&query2", "token", "baseUrl", "version")
);
$this->defaultHeaders = array(
"Host" => "baseUrl",
"Content-Type" => "application/json",
"SdkVersion" => "Graph-php-" . GraphConstants::SDK_VERSION,
"Authorization" => "Bearer token"
);
$body = json_encode(array('body' => 'content'));
$mock = new GuzzleHttp\Handler\MockHandler([
new GuzzleHttp\Psr7\Response(200, ['foo' => 'bar'], $body),
new GuzzleHttp\Psr7\Response(201, ['foo' => 'bar']),
new GuzzleHttp\Psr7\Response(200, ['foo' => 'bar'], $body)
]);
$handler = GuzzleHttp\HandlerStack::create($mock);
$this->client = new GuzzleHttp\Client(['handler' => $handler]);
}
public function testSetReturnType()
{
//Temporarily make getRequestUrl() public
$reflectionMethod = new ReflectionMethod('Microsoft\Graph\Http\GraphRequest', '_getRequestUrl');
$reflectionMethod->setAccessible(true);
$graph = new Graph();
$graph->setApiVersion('beta');
$graph->setAccessToken('token');
$request = $graph->createRequest("get", "/me");
$graph->setApiVersion('v1.0');
$requestUrl = $reflectionMethod->invokeArgs($request, array());
$this->assertEquals($requestUrl, "beta/me");
$request2 = $graph->createRequest("get", "/me");
$requestUrl = $reflectionMethod->invokeArgs($request2, array());
$this->assertEquals("v1.0/me", $requestUrl);
}
public function testAddHeaders()
{
$testHeader = array("test" => "header");
$request = $this->requests[0]->addHeaders($testHeader);
$headers = $request->getHeaders();
$expectedHeaders = array(
"Host" => "baseUrl",
"Content-Type" => "application/json",
"SdkVersion" => "Graph-php-" . GraphConstants::SDK_VERSION,
"Authorization" => "Bearer token",
"test" => "header"
);
$this->assertEquals($expectedHeaders, $headers);
}
public function testCustomHeadersOverwriteDefaults()
{
$testHeader = array("Content-Type" => "application/x-www-form-urlencoded");
$request = $this->requests[0]->addHeaders($testHeader);
$headers = $request->getHeaders();
$expectedHeaders = array(
"Host" => "baseUrl",
"Content-Type" => "application/x-www-form-urlencoded",
"SdkVersion" => "Graph-php-" . GraphConstants::SDK_VERSION,
"Authorization" => "Bearer token"
);
$this->assertEquals($expectedHeaders, $headers);
}
public function testDefaultHeaders()
{
$headers = $this->requests[0]->getHeaders();
$this->assertEquals($this->defaultHeaders, $headers);
}
public function testGetBody()
{
$testBody = json_encode(array('body' => 'content'));
$this->requests[0]->attachBody($testBody);
$body = $this->requests[0]->getBody();
$this->assertEquals($testBody, $body);
}
public function testAttachPropertyDictionary()
{
$model = new Microsoft\Graph\Model\User(array("id" => 1, "manager" => new Microsoft\Graph\Model\User(array("id" => 2))));
$this->requests[0]->attachBody($model);
$body = $this->requests[0]->getBody();
$this->assertEquals('{"id":1,"manager":{"id":2}}', $body);
}
public function testAttachDoubleNestedDictionary()
{
$testBody = json_encode(array("data"=> array("key" => array("key2" => "val"))));
$this->requests[0]->attachBody(array("data"=> array("key" => array("key2" => "val"))));
$body = $this->requests[0]->getBody();
$this->assertEquals($testBody, $body);
}
public function testSetTimeout()
{
$this->requests[0]->setTimeout('200');
$this->assertEquals('200', $this->requests[0]->getTimeout());
}
public function testDefaultTimeout()
{
$this->assertEquals('100', $this->requests[0]->getTimeout());
}
public function testCreateGuzzleClient()
{
$reflectionMethod = new ReflectionMethod('Microsoft\Graph\Http\GraphRequest', 'createGuzzleClient');
$reflectionMethod->setAccessible(true);
$request = $this->requests[0];
$client = $reflectionMethod->invokeArgs($request, array());
$this->assertInstanceOf(GuzzleHttp\Client::class, $client);
}
public function testExecute()
{
$response = $this->requests[0]->execute($this->client);
$this->assertInstanceOf(Microsoft\Graph\Http\GraphResponse::class, $response);
}
public function testExecuteWithTimeout()
{
$response = $this->requests[0]->setTimeout(300)->execute($this->client);
$this->assertInstanceOf(Microsoft\Graph\Http\GraphResponse::class, $response);
}
public function testExecuteAsync()
{
$promise = $this->requests[0]
->executeAsync($this->client);
$this->assertInstanceOf(GuzzleHttp\Promise\PromiseInterface::class, $promise);
$promise = $this->requests[1]
->executeAsync($this->client);
$this->assertInstanceOf(GuzzleHttp\Promise\PromiseInterface::class, $promise);
$promise = $this->requests[0]
->executeAsync($this->client);
$promise2 = $this->requests[2]
->executeAsync($this->client);
$response = Utils::unwrap(array($promise));
foreach ($response as $responseItem) {
$this->assertInstanceOf(Microsoft\Graph\Http\GraphResponse::class, $responseItem);
}
}
public function testGetRequestUrl()
{
//Temporarily make getRequestUrl() public
$reflectionMethod = new ReflectionMethod('Microsoft\Graph\Http\GraphRequest', '_getRequestUrl');
$reflectionMethod->setAccessible(true);
$requestUrl = $reflectionMethod->invokeArgs($this->requests[0], array());
$this->assertEquals($requestUrl, "version/endpoint");
}
public function testGetConcatenator()
{
//Temporarily make getConcatenator() public
$reflectionMethod = new ReflectionMethod('Microsoft\Graph\Http\GraphRequest', 'getConcatenator');
$reflectionMethod->setAccessible(true);
$concatenator = $reflectionMethod->invokeArgs($this->requests[0], array());
$this->assertEquals($concatenator, "?");
$concatenator = $reflectionMethod->invokeArgs($this->requests[1], array());
$this->assertEquals($concatenator, "&");
$concatenator = $reflectionMethod->invokeArgs($this->requests[2], array());
$this->assertEquals($concatenator, "&");
}
public function testExecuteWith4xxResponse()
{
$this->expectException(GuzzleHttp\Exception\ClientException::class);
$mockResponse = array(new Response(400));
$client = MockClientFactory::create(['http_errors' => true], $mockResponse);
$this->requests[0]->execute($client);
}
public function testExecuteWith5xxResponse()
{
$this->expectException(GuzzleHttp\Exception\ServerException::class);
$mockResponse = array(new Response(500));
$client = MockClientFactory::create(['http_errors' => true], $mockResponse);
$this->requests[0]->execute($client);
}
public function testExecuteAsyncWithBadResponseTriggersNotice()
{
$this->expectNotice();
$mockResponse = array(new Response(400));
$client = MockClientFactory::create(['http_errors' => true], $mockResponse);
$promise = $this->requests[0]->executeAsync($client);
$promise->wait();
}
public function testExecuteAsyncWithBadResponseReturnsNull()
{
$mockResponse = array(new Response(400));
$client = MockClientFactory::create(['http_errors' => true], $mockResponse);
$promise = $this->requests[0]->executeAsync($client);
$result = @$promise->wait();
$this->assertNull($result);
}
}