Porting all TestMainApi tests
This commit is contained in:
parent
1ca74dd187
commit
f0d4eedf71
|
@ -6,6 +6,7 @@ use Aryess\PhpMatrixSdk\Exceptions\MatrixException;
|
||||||
use Aryess\PhpMatrixSdk\Exceptions\MatrixHttpLibException;
|
use Aryess\PhpMatrixSdk\Exceptions\MatrixHttpLibException;
|
||||||
use Aryess\PhpMatrixSdk\Exceptions\MatrixRequestException;
|
use Aryess\PhpMatrixSdk\Exceptions\MatrixRequestException;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
|
use GuzzleHttp\Exception\GuzzleException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains all raw Matrix HTTP Client-Server API calls.
|
* Contains all raw Matrix HTTP Client-Server API calls.
|
||||||
|
@ -23,6 +24,7 @@ use GuzzleHttp\Client;
|
||||||
class MatrixHttpApi {
|
class MatrixHttpApi {
|
||||||
|
|
||||||
const MATRIX_V2_API_PATH = "/_matrix/client/r0";
|
const MATRIX_V2_API_PATH = "/_matrix/client/r0";
|
||||||
|
const VERSION = '0.0.1-dev';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
|
@ -106,7 +108,7 @@ class MatrixHttpApi {
|
||||||
* @param string|null $setPresence
|
* @param string|null $setPresence
|
||||||
* @return array|string
|
* @return array|string
|
||||||
* @throws MatrixException
|
* @throws MatrixException
|
||||||
* @throws \GuzzleHttp\Exception\GuzzleException
|
* @throws GuzzleException
|
||||||
*/
|
*/
|
||||||
public function sync(?string $since = null, int $timeoutMs = 30000, $filter = null,
|
public function sync(?string $since = null, int $timeoutMs = 30000, $filter = null,
|
||||||
bool $fullState = false, ?string $setPresence = null) {
|
bool $fullState = false, ?string $setPresence = null) {
|
||||||
|
@ -195,13 +197,12 @@ class MatrixHttpApi {
|
||||||
* @param bool $returnJson
|
* @param bool $returnJson
|
||||||
* @return array|string
|
* @return array|string
|
||||||
* @throws MatrixException
|
* @throws MatrixException
|
||||||
* @throws \GuzzleHttp\Exception\GuzzleException
|
|
||||||
*/
|
*/
|
||||||
private function send(string $method, string $path, $content = null, array $queryParams = [], array $headers = [],
|
private function send(string $method, string $path, $content = null, array $queryParams = [], array $headers = [],
|
||||||
$apiPath = self::MATRIX_V2_API_PATH, $returnJson = true) {
|
$apiPath = self::MATRIX_V2_API_PATH, $returnJson = true) {
|
||||||
$options = [];
|
$options = [];
|
||||||
if (!in_array('User-Agent', $headers)) {
|
if (!in_array('User-Agent', $headers)) {
|
||||||
$headers['User-Agent'] = 'php-matrix-sdk/0.0.1-dev'; //TODO: add version
|
$headers['User-Agent'] = 'php-matrix-sdk/'.self::VERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
$method = strtoupper($method);
|
$method = strtoupper($method);
|
||||||
|
@ -239,7 +240,7 @@ class MatrixHttpApi {
|
||||||
while (true) {
|
while (true) {
|
||||||
try {
|
try {
|
||||||
$response = $this->client->request($method, $endpoint, $options);
|
$response = $this->client->request($method, $endpoint, $options);
|
||||||
} catch (RequestException $e) {
|
} catch (GuzzleException $e) {
|
||||||
throw new MatrixHttpLibException($e, $method, $endpoint);
|
throw new MatrixHttpLibException($e, $method, $endpoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
42
tests/BaseTestCase.php
Normal file
42
tests/BaseTestCase.php
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Aryess\PhpMatrixSdk;
|
||||||
|
|
||||||
|
use GuzzleHttp\Client;
|
||||||
|
use GuzzleHttp\Handler\MockHandler;
|
||||||
|
use GuzzleHttp\HandlerStack;
|
||||||
|
use GuzzleHttp\Psr7\Response;
|
||||||
|
use GuzzleHttp\Psr7\Request;
|
||||||
|
use GuzzleHttp\Middleware;
|
||||||
|
|
||||||
|
abstract class BaseTestCase extends \PHPUnit\Framework\TestCase {
|
||||||
|
const MATRIX_V2_API_PATH = "/_matrix/client/r0";
|
||||||
|
protected $userId = "@alice:matrix.org";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call protected/private method of a class.
|
||||||
|
*
|
||||||
|
* @param object &$object Instantiated object that we will run method on.
|
||||||
|
* @param string $methodName Method name to call
|
||||||
|
* @param array $parameters Array of parameters to pass into method.
|
||||||
|
*
|
||||||
|
* @return mixed Method return.
|
||||||
|
* @throws \ReflectionException
|
||||||
|
*/
|
||||||
|
protected function invokePrivateMethod(&$object, $methodName, array $parameters = []) {
|
||||||
|
$reflection = new \ReflectionClass(get_class($object));
|
||||||
|
$method = $reflection->getMethod($methodName);
|
||||||
|
$method->setAccessible(true);
|
||||||
|
|
||||||
|
return $method->invokeArgs($object, $parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getMockClientHandler(array $responses, array &$container): HandlerStack {
|
||||||
|
$mock = new MockHandler($responses);
|
||||||
|
$history = Middleware::history($container);
|
||||||
|
$handler = HandlerStack::create($mock);
|
||||||
|
$handler->push($history);
|
||||||
|
|
||||||
|
return $handler;
|
||||||
|
}
|
||||||
|
}
|
94
tests/MatrixHttpApiTest.php
Normal file
94
tests/MatrixHttpApiTest.php
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Aryess\PhpMatrixSdk;
|
||||||
|
|
||||||
|
use Aryess\PhpMatrixSdk\Exceptions\MatrixException;
|
||||||
|
use Aryess\PhpMatrixSdk\Exceptions\MatrixHttpLibException;
|
||||||
|
use GuzzleHttp\Client;
|
||||||
|
use GuzzleHttp\Psr7\Response;
|
||||||
|
use GuzzleHttp\Psr7\Request;
|
||||||
|
|
||||||
|
class MatrixHttpApiTest extends BaseTestCase {
|
||||||
|
protected $userId = "@alice:matrix.org";
|
||||||
|
protected $token = "Dp0YKRXwx0iWDhFj7lg3DVjwsWzGcUIgARljgyAip2JD8qd5dSaWcxowTKEFetPulfLijAhv8eOmUSScyGcWgZyNMRTBmoJ0RFc0HotPvTBZU98yKRLtat7V43aCpFmK";
|
||||||
|
protected $testPath = "/account/whoami";
|
||||||
|
|
||||||
|
///////////////////////////
|
||||||
|
// class TestMainApi
|
||||||
|
///////////////////////////
|
||||||
|
public function testSendTokenHeader() {
|
||||||
|
$mapi = new MatrixHttpApi("http://example.com", $this->token);
|
||||||
|
|
||||||
|
$r = sprintf('{"application/json": {"user_id": "%s"}}', $this->userId);
|
||||||
|
$container = [];
|
||||||
|
$handler = $this->getMockClientHandler([new Response(200, [], $r)], $container);
|
||||||
|
$mapi->setClient(new Client(['handler' => $handler]));
|
||||||
|
|
||||||
|
$this->invokePrivateMethod($mapi, 'send', ['GET', $this->testPath]);
|
||||||
|
/** @var Request $req */
|
||||||
|
$req = array_get($container, '0.request');
|
||||||
|
|
||||||
|
$this->assertEquals('GET', $req->getMethod());
|
||||||
|
$this->assertEquals(sprintf('Bearer %s', $this->token), $req->getHeader('Authorization')[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSendUserAgentHeader() {
|
||||||
|
$mapi = new MatrixHttpApi("http://example.com", $this->token);
|
||||||
|
|
||||||
|
$r = sprintf('{"application/json": {"user_id": "%s"}}', $this->userId);
|
||||||
|
$container = [];
|
||||||
|
$handler = $this->getMockClientHandler([new Response(200, [], $r)], $container);
|
||||||
|
$mapi->setClient(new Client(['handler' => $handler]));
|
||||||
|
|
||||||
|
$this->invokePrivateMethod($mapi, 'send', ['GET', $this->testPath]);
|
||||||
|
/** @var Request $req */
|
||||||
|
$req = array_get($container, '0.request');
|
||||||
|
|
||||||
|
$this->assertEquals('GET', $req->getMethod());
|
||||||
|
$this->assertEquals('php-matrix-sdk/'.$mapi::VERSION, $req->getHeader('User-Agent')[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSendTokenQuery() {
|
||||||
|
$mapi = new MatrixHttpApi("http://example.com", $this->token, null, 500, false);
|
||||||
|
|
||||||
|
$r = sprintf('{"application/json": {"user_id": "%s"}}', $this->userId);
|
||||||
|
$container = [];
|
||||||
|
$handler = $this->getMockClientHandler([new Response(200, [], $r)], $container);
|
||||||
|
$mapi->setClient(new Client(['handler' => $handler]));
|
||||||
|
|
||||||
|
$this->invokePrivateMethod($mapi, 'send', ['GET', $this->testPath]);
|
||||||
|
/** @var Request $req */
|
||||||
|
$req = array_get($container, '0.request');
|
||||||
|
|
||||||
|
$this->assertEquals('GET', $req->getMethod());
|
||||||
|
$this->assertContains($this->token, $req->getRequestTarget());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSendUserId() {
|
||||||
|
$mapi = new MatrixHttpApi("http://example.com", $this->token, $this->userId);
|
||||||
|
|
||||||
|
$r = sprintf('{"application/json": {"user_id": "%s"}}', $this->userId);
|
||||||
|
$container = [];
|
||||||
|
$handler = $this->getMockClientHandler([new Response(200, [], $r)], $container);
|
||||||
|
$mapi->setClient(new Client(['handler' => $handler]));
|
||||||
|
|
||||||
|
$this->invokePrivateMethod($mapi, 'send', ['GET', $this->testPath]);
|
||||||
|
/** @var Request $req */
|
||||||
|
$req = array_get($container, '0.request');
|
||||||
|
|
||||||
|
$this->assertEquals('GET', $req->getMethod());
|
||||||
|
$this->assertContains(urlencode($this->userId), $req->getRequestTarget());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSendUnsupMethod() {
|
||||||
|
$this->expectException(MatrixException::class);
|
||||||
|
$mapi = new MatrixHttpApi("http://example.com", $this->token, $this->userId);
|
||||||
|
$this->invokePrivateMethod($mapi, 'send', ['GOT', $this->testPath]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSendRequestError() {
|
||||||
|
$this->expectException(MatrixHttpLibException::class);
|
||||||
|
$mapi = new MatrixHttpApi("http://example.com");
|
||||||
|
$this->invokePrivateMethod($mapi, 'send', ['GET', $this->testPath]);
|
||||||
|
}
|
||||||
|
}
|
190
tests/TestHelper.php
Normal file
190
tests/TestHelper.php
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class TestHelper {
|
||||||
|
const EXAMPLE_SYNC = [
|
||||||
|
"next_batch" => "s72595_4483_1934",
|
||||||
|
"presence" => [
|
||||||
|
"events" => [
|
||||||
|
[
|
||||||
|
"sender" => "@alice:example.com",
|
||||||
|
"type" => "m.presence",
|
||||||
|
"content" => [
|
||||||
|
"presence" => "online",
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
"account_data" => [
|
||||||
|
"events" => [
|
||||||
|
[
|
||||||
|
"type" => "org.example.custom.config",
|
||||||
|
"content" => [
|
||||||
|
"custom_config_key" => "custom_config_value",
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
"rooms" => [
|
||||||
|
"join" => [
|
||||||
|
"!726s6s6q:example.com" => [
|
||||||
|
"state" => [
|
||||||
|
"events" => [
|
||||||
|
[
|
||||||
|
"sender" => "@alice:example.com",
|
||||||
|
"type" => "m.room.member",
|
||||||
|
"state_key" => "@alice:example.com",
|
||||||
|
"content" => [
|
||||||
|
"membership" => "join",
|
||||||
|
],
|
||||||
|
"origin_server_ts" => 1417731086795,
|
||||||
|
"event_id" => "$66697273743031:example.com",
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
"timeline" => [
|
||||||
|
"events" => [
|
||||||
|
[
|
||||||
|
"sender" => "@bob:example.com",
|
||||||
|
"type" => "m.room.member",
|
||||||
|
"state_key" => "@bob:example.com",
|
||||||
|
"content" => [
|
||||||
|
"membership" => "join",
|
||||||
|
],
|
||||||
|
"prev_content" => [
|
||||||
|
"membership" => "invite",
|
||||||
|
],
|
||||||
|
"origin_server_ts" => 1417731086795,
|
||||||
|
"event_id" => "$7365636s6r6432:example.com",
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"sender" => "@alice:example.com",
|
||||||
|
"type" => "m.room.message",
|
||||||
|
"age" => 124524,
|
||||||
|
"txn_id" => "1234",
|
||||||
|
"content" => [
|
||||||
|
"body" => "I am a fish",
|
||||||
|
"msgtype" => "m.text",
|
||||||
|
],
|
||||||
|
"origin_server_ts" => 1417731086797,
|
||||||
|
"event_id" => "$74686972643033:example.com",
|
||||||
|
],
|
||||||
|
],
|
||||||
|
"limited" => true,
|
||||||
|
"prev_batch" => "t34-23535_0_0",
|
||||||
|
],
|
||||||
|
"ephemeral" => [
|
||||||
|
"events" => [
|
||||||
|
[
|
||||||
|
"type" => "m.typing",
|
||||||
|
"content" => [
|
||||||
|
"user_ids" => [
|
||||||
|
"@alice:example.com",
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
"account_data" => [
|
||||||
|
"events" => [
|
||||||
|
[
|
||||||
|
"type" => "m.tag",
|
||||||
|
"content" => [
|
||||||
|
"tags" => [
|
||||||
|
"work" => [
|
||||||
|
"order" => 1,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"type" => "org.example.custom.room.config",
|
||||||
|
"content" => [
|
||||||
|
"custom_config_key" => "custom_config_value",
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
"invite" => [
|
||||||
|
"!696r7674:example.com" => [
|
||||||
|
"invite_state" => [
|
||||||
|
"events" => [
|
||||||
|
[
|
||||||
|
"sender" => "@alice:example.com",
|
||||||
|
"type" => "m.room.name",
|
||||||
|
"state_key" => "",
|
||||||
|
"content" => [
|
||||||
|
"name" => "My Room Name",
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"sender" => "@alice:example.com",
|
||||||
|
"type" => "m.room.member",
|
||||||
|
"state_key" => "@bob:example.com",
|
||||||
|
"content" => [
|
||||||
|
"membership" => "invite",
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
"leave" => [],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
const EXAMPLE_PL_EVENT = [
|
||||||
|
'age' => 242352,
|
||||||
|
'content' => [
|
||||||
|
'ban' => 50,
|
||||||
|
'events' => [
|
||||||
|
'm.room.name' => 100,
|
||||||
|
'm.room.power_levels' => 100,
|
||||||
|
],
|
||||||
|
'events_default' => 0,
|
||||||
|
'invite' => 50,
|
||||||
|
'kick' => 50,
|
||||||
|
'redact' => 50,
|
||||||
|
'state_default' => 50,
|
||||||
|
'users' => [
|
||||||
|
'@example:localhost' => 100,
|
||||||
|
],
|
||||||
|
'users_default' => 0,
|
||||||
|
],
|
||||||
|
'event_id' => '$WLGTSEFSEF:localhost',
|
||||||
|
'origin_server_ts' => 1431961217939,
|
||||||
|
'room_id' => '!Cuyf34gef24t:localhost',
|
||||||
|
'sender' => '@example:localhost',
|
||||||
|
'state_key' => '',
|
||||||
|
'type' => 'm.room.power_levels',
|
||||||
|
];
|
||||||
|
|
||||||
|
const EXAMPLE_EVENT_RESPONSE = [
|
||||||
|
'event_id' => 'YUwRidLecu',
|
||||||
|
];
|
||||||
|
|
||||||
|
const EXAMPLE_KEY_UPLOAD_RESPONSE = [
|
||||||
|
'one_time_key_counts' => [
|
||||||
|
'curve25519' => 10,
|
||||||
|
'signed_curve25519' => 20,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
const EXAMPLE_SUCCESS_LOGIN_RESPONSE = [
|
||||||
|
'user_id' => '@example:localhost',
|
||||||
|
'access_token' => 'abc123',
|
||||||
|
'home_server' => 'matrix.org',
|
||||||
|
'device_id' => 'GHTYAJCE',
|
||||||
|
];
|
||||||
|
|
||||||
|
const EXAMPLE_PREVIEW_URL = [
|
||||||
|
'matrix:image:size' => 102400,
|
||||||
|
'og:description' => 'This is a really cool blog post from matrix.org',
|
||||||
|
'og:image' => 'mxc://example.com/ascERGshawAWawugaAcauga',
|
||||||
|
'og:image:height' => 48,
|
||||||
|
'og:image:type' => 'image/png',
|
||||||
|
'og:image:width' => 48,
|
||||||
|
'og:title' => 'Matrix Blog Post',
|
||||||
|
];
|
||||||
|
}
|
Loading…
Reference in a new issue