1
0
Fork 0
mirror of synced 2024-07-05 14:40:42 +12:00
appwrite/tests/unit/Utopia/Filters/V06Test.php
2020-12-31 13:42:01 +05:30

448 lines
18 KiB
PHP

<?php
namespace Appwrite\Tests;
use Appwrite\Auth\Auth;
use Appwrite\Database\Database;
use Appwrite\Database\Validator\Authorization;
use Appwrite\OpenSSL\OpenSSL;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Filter\V06;
use PHPUnit\Framework\TestCase;
class V06Test extends TestCase
{
/**
* @var Filter
*/
protected $filter = null;
public function setUp(): void
{
$this->filter = new V06();
}
public function testParseUser()
{
$content = [
'$id' => '5e5ea5c16897e',
'name' => 'John Doe',
'registration' => 1592981250,
'status' => 0,
'email' => 'john@appwrite.io',
'emailVerification' => false,
'prefs' => [
'theme' => 'pink',
'timezone' => 'UTC'
]
];
$model = Response::MODEL_USER;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['$id'], '5e5ea5c16897e');
$this->assertEquals($parsedResponse['name'], 'John Doe');
$this->assertEquals($parsedResponse['registration'], 1592981250);
$this->assertEquals($parsedResponse['status'], 0);
$this->assertEquals($parsedResponse['email'], 'john@appwrite.io');
$this->assertEquals($parsedResponse['emailVerification'], false);
$this->assertEquals($parsedResponse['prefs'], ['theme' => 'pink', 'timezone' => 'UTC']);
$this->assertEquals($parsedResponse['status'], 0);
$this->assertEquals($parsedResponse['roles'], Authorization::getRoles() ?? []);
}
public function testParseUserList()
{
$content = [
'sum' => 1,
'users' => [
0 => [
'$id' => '5e5ea5c16897e',
'name' => 'John Doe',
'registration' => 1592981250,
'status' => 0,
'email' => 'john@appwrite.io',
'emailVerification' => false,
'prefs' => [
'theme' => 'pink',
'timezone' => 'UTC'
]
]
]
];
$model = Response::MODEL_USER_LIST;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['sum'], 1);
$this->assertEquals($parsedResponse['users'][0]['$id'], '5e5ea5c16897e');
$this->assertEquals($parsedResponse['users'][0]['name'], 'John Doe');
$this->assertEquals($parsedResponse['users'][0]['registration'], 1592981250);
$this->assertEquals($parsedResponse['users'][0]['status'], 0);
$this->assertEquals($parsedResponse['users'][0]['email'], 'john@appwrite.io');
$this->assertEquals($parsedResponse['users'][0]['emailVerification'], false);
$this->assertEquals($parsedResponse['users'][0]['prefs'], ['theme' => 'pink', 'timezone' => 'UTC']);
$this->assertEquals($parsedResponse['users'][0]['status'], 0);
$this->assertEquals($parsedResponse['users'][0]['roles'], Authorization::getRoles() ?? []);
}
public function testParseSession()
{
$content = [
'$id' => '5e5ea5c16897e',
'userId' => '5e5bb8c16897e',
'expire' => 1592981250,
'ip' => '127.0.0.1',
'osCode' => 'Mac',
'osName' => 'Mac',
'osVersion' => 'Mac',
'clientType' => 'browser',
'clientCode' => 'CM',
'clientName' => 'Chrome Mobile iOS',
'clientVersion' => '84.0',
'clientEngine' => 'WebKit',
'clientEngineVersion' => '605.1.15',
'deviceName' => 'smartphone',
'deviceBrand' => 'Google',
'deviceModel' => 'Nexus 5',
'countryCode' => 'US',
'countryName' => 'United States',
'current' => true
];
$model = Response::MODEL_SESSION;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['$id'], '5e5ea5c16897e');
$this->assertEquals($parsedResponse['userId'], '5e5bb8c16897e');
$this->assertEquals($parsedResponse['expire'], 1592981250);
$this->assertEquals($parsedResponse['ip'], '127.0.0.1');
$this->assertEquals($parsedResponse['osCode'], 'Mac');
$this->assertEquals($parsedResponse['osName'], 'Mac');
$this->assertEquals($parsedResponse['osVersion'], 'Mac');
$this->assertEquals($parsedResponse['clientType'], 'browser');
$this->assertEquals($parsedResponse['clientCode'], 'CM');
$this->assertEquals($parsedResponse['clientName'], 'Chrome Mobile iOS');
$this->assertEquals($parsedResponse['clientVersion'], '84.0');
$this->assertEquals($parsedResponse['clientEngine'], 'WebKit');
$this->assertEquals($parsedResponse['clientEngineVersion'], '605.1.15');
$this->assertEquals($parsedResponse['deviceName'], 'smartphone');
$this->assertEquals($parsedResponse['deviceBrand'], 'Google');
$this->assertEquals($parsedResponse['deviceModel'], 'Nexus 5');
$this->assertEquals($parsedResponse['countryCode'], 'US');
$this->assertEquals($parsedResponse['countryName'], 'United States');
$this->assertEquals($parsedResponse['current'], true);
$this->assertEquals($parsedResponse['type'], Auth::TOKEN_TYPE_LOGIN);
}
public function testParseSessionList()
{
$content = [
'sum' => 1,
'sessions' => [
0 => [
'$id' => '5e5ea5c16897e',
'userId' => '5e5bb8c16897e',
'expire' => 1592981250,
'ip' => '127.0.0.1',
'osCode' => 'Mac',
'osName' => 'Mac',
'osVersion' => 'Mac',
'clientType' => 'browser',
'clientCode' => 'CM',
'clientName' => 'Chrome Mobile iOS',
'clientVersion' => '84.0',
'clientEngine' => 'WebKit',
'clientEngineVersion' => '605.1.15',
'deviceName' => 'smartphone',
'deviceBrand' => 'Google',
'deviceModel' => 'Nexus 5',
'countryCode' => 'US',
'countryName' => 'United States',
'current' => true
]
]
];
$model = Response::MODEL_SESSION_LIST;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['sum'], 1);
$this->assertEquals($parsedResponse['sessions'][0]['$id'], '5e5ea5c16897e');
$this->assertEquals($parsedResponse['sessions'][0]['OS'], 'Mac Mac');
$this->assertEquals($parsedResponse['sessions'][0]['client'], 'Chrome Mobile iOS 84.0');
$this->assertEquals($parsedResponse['sessions'][0]['device'], 'smartphone');
$this->assertEquals($parsedResponse['sessions'][0]['brand'], 'Google');
$this->assertEquals($parsedResponse['sessions'][0]['model'], 'Nexus 5');
$this->assertEquals($parsedResponse['sessions'][0]['ip'], '127.0.0.1');
$this->assertEquals($parsedResponse['sessions'][0]['current'], true);
$this->assertEquals($parsedResponse['sessions'][0]['geo']['isoCode'], 'US');
$this->assertEquals($parsedResponse['sessions'][0]['geo']['country'], 'United States');
}
public function testParseLogList()
{
$content = [
'sum' => 1,
'logs' => [
0 => [
'event' => 'account.sessions.create',
'ip' => '127.0.0.1',
'time' => 1592981250,
'osCode' => 'Mac',
'osName' => 'Mac',
'osVersion' => 'Mac',
'clientType' => 'browser',
'clientCode' => 'CM',
'clientName' => 'Chrome Mobile iOS',
'clientVersion' => '84.0',
'clientEngine' => 'WebKit',
'clientEngineVersion' => '605.1.15',
'deviceName' => 'smartphone',
'deviceBrand' => 'Google',
'deviceModel' => 'Nexus 5',
'countryCode' => 'US',
'countryName' => 'United States'
]
]
];
$model = Response::MODEL_LOG_LIST;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['sum'], 1);
$this->assertEquals($parsedResponse['logs'][0]['event'], 'account.sessions.create');
$this->assertEquals($parsedResponse['logs'][0]['ip'], '127.0.0.1');
$this->assertEquals($parsedResponse['logs'][0]['time'], 1592981250);
$this->assertEquals($parsedResponse['logs'][0]['OS'], 'Mac Mac');
$this->assertEquals($parsedResponse['logs'][0]['client'], 'Chrome Mobile iOS 84.0');
$this->assertEquals($parsedResponse['logs'][0]['device'], 'smartphone');
$this->assertEquals($parsedResponse['logs'][0]['brand'], 'Google');
$this->assertEquals($parsedResponse['logs'][0]['model'], 'Nexus 5');
$this->assertEquals($parsedResponse['logs'][0]['geo']['isoCode'], 'US');
$this->assertEquals($parsedResponse['logs'][0]['geo']['country'], 'United States');
}
public function testParseToken()
{
$content = [
'$id' => 'bb8ea5c16897e',
'userId' => '5e5ea5c168bb8',
'secret' => '',
'expire' => 1592981250
];
$model = Response::MODEL_TOKEN;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['$id'], 'bb8ea5c16897e');
$this->assertEquals($parsedResponse['userId'], '5e5ea5c168bb8');
$this->assertEquals($parsedResponse['expire'], 1592981250);
$this->assertEquals($parsedResponse['secret'], '');
$this->assertEquals($parsedResponse['type'], Auth::TOKEN_TYPE_RECOVERY);
}
public function testParseLocale()
{
$content = [
'ip' => '127.0.0.1',
'countryCode' => 'US',
'country' => 'United States',
'continentCode' => 'NA',
'continent' => 'North America',
'eu' => false,
'currency' => 'USD'
];
$model = Response::MODEL_LOCALE;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['ip'], '127.0.0.1');
$this->assertEquals($parsedResponse['contryCode'], 'US');
$this->assertEquals($parsedResponse['country'], 'United States');
$this->assertEquals($parsedResponse['continentCode'], 'NA');
$this->assertEquals($parsedResponse['continent'], 'North America');
$this->assertEquals($parsedResponse['eu'], false);
$this->assertEquals($parsedResponse['currency'], 'USD');
}
public function testParseCountryList()
{
$content = [
'sum' => 1,
'countries' => [
0 => [
'name' => 'United States',
'code' => 'US'
]
]
];
$model = Response::MODEL_COUNTRY_LIST;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['sum'], 1);
$this->assertEquals($parsedResponse['countries']['US'], 'United States');
}
public function testParsePhoneList()
{
$content = [
'sum' => 1,
'phones' => [
0 => [
'code' => '+1',
'countryCode' => 'US',
'countryName' => 'United States'
]
]
];
$model = Response::MODEL_PHONE_LIST;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['sum'], 1);
$this->assertEquals($parsedResponse['phones']['US'], '+1');
}
public function testParseContinentList()
{
$content = [
'sum' => 1,
'continents' => [
0 => [
'name' => 'Europe',
'code' => 'EU',
]
]
];
$model = Response::MODEL_CONTINENT_LIST;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['sum'], 1);
$this->assertEquals($parsedResponse['continents']['EU'], 'Europe');
}
public function testParseCurrencyList()
{
$content = [
'sum' => 1,
'currencies' => [
0 => [
'symbol' => '$',
'name' => 'US dollar',
'symbolNative' => '$',
'decimalDigits' => 2,
'rounding' => 0,
'code' => 'USD',
'namePlural' => 'US Dollars'
]
]
];
$model = Response::MODEL_CURRENCY_LIST;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['sum'], 1);
$this->assertEquals($parsedResponse['currencies'][0]['symbol'], '$');
$this->assertEquals($parsedResponse['currencies'][0]['name'], 'US dollar');
$this->assertEquals($parsedResponse['currencies'][0]['symbolNative'], '$');
$this->assertEquals($parsedResponse['currencies'][0]['decimalDigits'], 2);
$this->assertEquals($parsedResponse['currencies'][0]['rounding'], 0);
$this->assertEquals($parsedResponse['currencies'][0]['code'], 'USD');
$this->assertEquals($parsedResponse['currencies'][0]['namePlural'], 'US Dollars');
$this->assertEquals($parsedResponse['currencies'][0]['locations'], []);
}
public function testParseFile()
{
$content = [
'$id' => '5e5ea5c16897e',
'$permissions' => ['read' => ['*'], 'write' => ['*']],
'name' => 'Pink.png',
'dateCreated' => 1592981250,
'signature' => '5d529fd02b544198ae075bd57c1762bb',
'mimeType' => 'image/png',
'sizeOriginal' => 17890
];
$model = Response::MODEL_FILE;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['$id'], '5e5ea5c16897e');
$this->assertEquals($parsedResponse['$permissions'], ['read' => ['*'], 'write' => ['*']]);
$this->assertEquals($parsedResponse['name'], 'Pink.png');
$this->assertEquals($parsedResponse['dateCreated'], 1592981250);
$this->assertEquals($parsedResponse['signature'], '5d529fd02b544198ae075bd57c1762bb');
$this->assertEquals($parsedResponse['mimeType'], 'image/png');
$this->assertEquals($parsedResponse['sizeOriginal'], 17890);
$this->assertEquals($parsedResponse['$collection'], Database::SYSTEM_COLLECTION_FILES);
$this->assertEquals($parsedResponse['algorithm'], 'gzip');
$this->assertEquals($parsedResponse['comment'], '');
$this->assertEquals($parsedResponse['fileOpenSSLCipher'], OpenSSL::CIPHER_AES_128_GCM);
$this->assertEquals($parsedResponse['fileOpenSSLIV'], '');
$this->assertEquals($parsedResponse['fileOpenSSLTag'], '');
$this->assertEquals($parsedResponse['fileOpenSSLVersion'], '');
$this->assertEquals($parsedResponse['folderId'], '');
$this->assertEquals($parsedResponse['path'], '');
$this->assertEquals($parsedResponse['sizeActual'], $content['sizeOriginal']);
$this->assertEquals($parsedResponse['token'], '');
}
public function testParseCollection()
{
$content = [
'$id' => '5e5ea5c16897e',
'$permissions' => ['read' => ['*'], 'write' => ['*']],
'name' => 'Movies',
'dateCreated' => 1592981250,
'dateUpdated' => '5d529fd02b544198ae075bd57c1762bb',
'rules' => []
];
$model = Response::MODEL_COLLECTION;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['$id'], '5e5ea5c16897e');
$this->assertEquals($parsedResponse['$permissions'], ['read' => ['*'], 'write' => ['*']]);
$this->assertEquals($parsedResponse['name'], 'Movies');
$this->assertEquals($parsedResponse['dateCreated'], 1592981250);
$this->assertEquals($parsedResponse['dateUpdated'], '5d529fd02b544198ae075bd57c1762bb');
$this->assertEquals($parsedResponse['rules'], []);
$this->assertEquals($parsedResponse['$collection'], Database::SYSTEM_COLLECTION_COLLECTIONS);
$this->assertEquals($parsedResponse['structure'], true);
}
public function testParseCollectionList()
{
$content = [
'sum' => 1,
'collections' => [
0 => [
'$id' => '5e5ea5c16897e',
'$permissions' => ['read' => ['*'], 'write' => ['*']],
'name' => 'Movies',
'dateCreated' => 1592981250,
'dateUpdated' => '5d529fd02b544198ae075bd57c1762bb',
'rules' => []
]
]
];
$model = Response::MODEL_COLLECTION_LIST;
$parsedResponse = $this->filter->parse($content, $model);
$this->assertEquals($parsedResponse['sum'], 1);
$this->assertEquals($parsedResponse['collections'][0]['$id'], '5e5ea5c16897e');
$this->assertEquals($parsedResponse['collections'][0]['$permissions'], ['read' => ['*'], 'write' => ['*']]);
$this->assertEquals($parsedResponse['collections'][0]['name'], 'Movies');
$this->assertEquals($parsedResponse['collections'][0]['dateCreated'], 1592981250);
$this->assertEquals($parsedResponse['collections'][0]['dateUpdated'], '5d529fd02b544198ae075bd57c1762bb');
$this->assertEquals($parsedResponse['collections'][0]['rules'], []);
$this->assertEquals($parsedResponse['collections'][0]['$collection'], Database::SYSTEM_COLLECTION_COLLECTIONS);
$this->assertEquals($parsedResponse['collections'][0]['structure'], true);
}
}