1
0
Fork 0
mirror of synced 2024-06-29 11:40:45 +12:00

Update response filters for list models

This commit is contained in:
Steven Nguyen 2022-09-12 19:07:08 +00:00
parent 71206a9886
commit 79b57cf696
2 changed files with 666 additions and 17 deletions

View file

@ -20,48 +20,134 @@ class V15 extends Filter
case Response::MODEL_USER:
$parsedResponse = $this->parseUser($parsedResponse);
break;
case Response::MODEL_USER_LIST:
$listKey = 'users';
$parsedResponse[$listKey] = array_map(fn ($content) => $this->parseUser($content), $parsedResponse[$listKey]);
break;
case Response::MODEL_METRIC:
$parsedResponse = $this->parseMetric($parsedResponse);
break;
case Response::MODEL_BUILD:
$parsedResponse = $this->parseDatetimeAttributes($parsedResponse, ['startTime', 'endTime']);
$parsedResponse = $this->parseBuild($parsedResponse);
break;
case Response::MODEL_BUILD_LIST:
$listKey = 'builds';
$parsedResponse[$listKey] = array_map(fn ($content) => $this->parseBuild($content), $parsedResponse[$listKey]);
break;
case Response::MODEL_BUCKET:
$parsedResponse = $this->parseBucket($parsedResponse);
break;
case Response::MODEL_BUCKET_LIST:
$listKey = 'buckets';
$parsedResponse[$listKey] = array_map(fn ($content) => $this->parseBucket($content), $parsedResponse[$listKey]);
break;
case Response::MODEL_COLLECTION:
$parsedResponse = $this->parseCollection($parsedResponse);
break;
case Response::MODEL_COLLECTION_LIST:
$listKey = 'collections';
$parsedResponse[$listKey] = array_map(fn ($content) => $this->parseCollection($content), $parsedResponse[$listKey]);
break;
case Response::MODEL_DATABASE:
case Response::MODEL_DEPLOYMENT:
case Response::MODEL_DOMAIN:
case Response::MODEL_PLATFORM:
case Response::MODEL_PROJECT:
case Response::MODEL_TEAM:
case Response::MODEL_WEBHOOK:
$parsedResponse = $this->parseCreatedAtUpdatedAt($parsedResponse);
break;
case Response::MODEL_DATABASE_LIST:
case Response::MODEL_DEPLOYMENT_LIST:
case Response::MODEL_DOMAIN_LIST:
case Response::MODEL_PLATFORM_LIST:
case Response::MODEL_PROJECT_LIST:
case Response::MODEL_TEAM_LIST:
case Response::MODEL_WEBHOOK_LIST:
$listKey = '';
switch ($model) {
case Response::MODEL_DATABASE_LIST:
$listKey = 'databases';
break;
case Response::MODEL_DEPLOYMENT_LIST:
$listKey = 'deployments';
break;
case Response::MODEL_DOMAIN_LIST:
$listKey = 'domains';
break;
case Response::MODEL_PLATFORM_LIST:
$listKey = 'platforms';
break;
case Response::MODEL_PROJECT_LIST:
$listKey = 'projects';
break;
case Response::MODEL_TEAM_LIST:
$listKey = 'teams';
break;
case Response::MODEL_WEBHOOK_LIST:
$listKey = 'webhooks';
break;
}
$parsedResponse[$listKey] = array_map(fn ($content) => $this->parseCreatedAtUpdatedAt($content), $parsedResponse[$listKey]);
break;
case Response::MODEL_DOCUMENT:
$parsedResponse = $this->parseDatetimeAttributes($parsedResponse, ['$createdAt', '$updatedAt']);
case Response::MODEL_FILE:
$parsedResponse = $this->parsePermissionsCreatedAtUpdatedAt($parsedResponse);
break;
case Response::MODEL_DOCUMENT_LIST:
case Response::MODEL_FILE_LIST:
$listKey = '';
switch ($model) {
case Response::MODEL_DOCUMENT_LIST:
$listKey = 'documents';
break;
case Response::MODEL_FILE_LIST:
$listKey = 'files';
break;
}
$parsedResponse[$listKey] = array_map(fn ($content) => $this->parsePermissionsCreatedAtUpdatedAt($content), $parsedResponse[$listKey]);
break;
case Response::MODEL_EXECUTION:
$parsedResponse = $this->parseExecution($parsedResponse);
break;
case Response::MODEL_PLATFORM:
case Response::MODEL_PROJECT:
case Response::MODEL_TEAM:
case Response::MODEL_FILE:
case Response::MODEL_WEBHOOK:
case Response::MODEL_DOMAIN:
case Response::MODEL_DATABASE:
$parsedResponse = $this->parseDatetimeAttributes($parsedResponse, ['$createdAt', '$updatedAt']);
case Response::MODEL_EXECUTION_LIST:
$listKey = 'executions';
$parsedResponse[$listKey] = array_map(fn ($content) => $this->parseExecution($content), $parsedResponse[$listKey]);
break;
case Response::MODEL_FUNCTION:
$parsedResponse = $this->parseFunction($parsedResponse);
break;
case Response::MODEL_FUNCTION_LIST:
$listKey = 'functions';
$parsedResponse[$listKey] = array_map(fn ($content) => $this->parseFunction($content), $parsedResponse[$listKey]);
break;
case Response::MODEL_KEY:
$parsedResponse = $this->parseDatetimeAttributes($parsedResponse, ['$createdAt', '$updatedAt', 'expire']);
$parsedResponse = $this->parseKey($parsedResponse);
break;
case Response::MODEL_KEY_LIST:
$listKey = 'keys';
$parsedResponse[$listKey] = array_map(fn ($content) => $this->parseKey($content), $parsedResponse[$listKey]);
break;
case Response::MODEL_LOG:
$parsedResponse = $this->parseDatetimeAttributes($parsedResponse, ['$createdAt', '$updatedAt', 'time']);
$parsedResponse = $this->parseLog($parsedResponse);
break;
case Response::MODEL_LOG_LIST:
$listKey = 'logs';
$parsedResponse[$listKey] = array_map(fn ($content) => $this->parseLog($content), $parsedResponse[$listKey]);
break;
case Response::MODEL_MEMBERSHIP:
$parsedResponse = $this->parseDatetimeAttributes($parsedResponse, ['$createdAt', '$updatedAt', 'invited', 'joined']);
$parsedResponse = $this->parseMembership($parsedResponse);
break;
case Response::MODEL_MEMBERSHIP_LIST:
$listKey = 'memberships';
$parsedResponse[$listKey] = array_map(fn ($content) => $this->parseMembership($content), $parsedResponse[$listKey]);
break;
case Response::MODEL_SESSION:
$parsedResponse = $this->parseDatetimeAttributes($parsedResponse, ['$createdAt', 'expire', 'providerAccessTokenExpiry']);
$parsedResponse = $this->parseSession($parsedResponse);
break;
case Response::MODEL_SESSION_LIST:
$listKey = 'sessions';
$parsedResponse[$listKey] = array_map(fn ($content) => $this->parseSession($content), $parsedResponse[$listKey]);
break;
case Response::MODEL_TOKEN:
$parsedResponse = $this->parseDatetimeAttributes($parsedResponse, ['$createdAt', 'expire']);
@ -77,12 +163,16 @@ class V15 extends Filter
break;
}
// Downgrade Permissions for all models
$parsedResponse = $this->parsePermissions($parsedResponse);
return $parsedResponse;
}
protected function parseBuild(array $content)
{
$content = $this->parseDatetimeAttributes($content, ['startTime', 'endTime']);
return $content;
}
protected function parseBucket(array $content)
{
if (isset($content['fileSecurity'])) {
@ -96,6 +186,7 @@ class V15 extends Filter
unset($content['fileSecurity']);
unset($content['compression']);
$content = $this->parsePermissions($content);
$content = $this->parseDatetimeAttributes($content, ['$createdAt', '$updatedAt']);
return $content;
@ -196,6 +287,14 @@ class V15 extends Filter
}
unset($content['documentSecurity']);
$content = $this->parsePermissions($content);
$content = $this->parseDatetimeAttributes($content, ['$createdAt', '$updatedAt']);
return $content;
}
protected function parsePermissionsCreatedAtUpdatedAt(array $content)
{
$content = $this->parsePermissions($content);
$content = $this->parseDatetimeAttributes($content, ['$createdAt', '$updatedAt']);
return $content;
}
@ -203,10 +302,17 @@ class V15 extends Filter
private function parseExecution($content)
{
unset($content['stdout']);
$content = $this->parsePermissions($content);
$content = $this->parseDatetimeAttributes($content, ['$createdAt', '$updatedAt', 'startTime', 'endTime']);
return $content;
}
private function parseCreatedAtUpdatedAt($content)
{
$content = $this->parseDatetimeAttributes($content, ['$createdAt', '$updatedAt']);
return $content;
}
private function parseFunction($content)
{
if (isset($content['execute'])) {
@ -227,6 +333,30 @@ class V15 extends Filter
return $content;
}
private function parseKey($content)
{
$content = $this->parseDatetimeAttributes($content, ['$createdAt', '$updatedAt', 'expire']);
return $content;
}
private function parseLog($content)
{
$content = $this->parseDatetimeAttributes($content, ['$createdAt', '$updatedAt', 'time']);
return $content;
}
private function parseMembership($content)
{
$content = $this->parseDatetimeAttributes($content, ['$createdAt', '$updatedAt', 'invited', 'joined']);
return $content;
}
private function parseSession($content)
{
$content = $this->parseDatetimeAttributes($content, ['$createdAt', 'expire', 'providerAccessTokenExpiry']);
return $content;
}
private function parseModelUsageFunc($content)
{
$mapping = [

View file

@ -7,6 +7,7 @@ use Appwrite\Utopia\Response;
use Utopia\Database\Permission;
use Utopia\Database\Role;
use PHPUnit\Framework\TestCase;
use stdClass;
class V15Test extends TestCase
{
@ -240,6 +241,49 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider permissionsProvider
* @dataProvider bucketProvider
*/
public function testBucketList(array $content, array $expected): void
{
$model = Response::MODEL_BUCKET_LIST;
$content = [
'buckets' => [$content],
'total' => 1,
];
$expected = [
'buckets' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
public function buildProvider(): array
{
return [
'build start and end time' => [
[
'startTime' => '2020-06-24T06:47:30.000Z',
'endTime' => '2020-06-24T06:47:30.000Z',
],
[
'startTime' => 1592981250,
'endTime' => 1592981250,
]
]
];
}
/**
* @dataProvider buildProvider
*/
public function testBuild(): void
{
$model = Response::MODEL_BUILD;
@ -259,6 +303,28 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider buildProvider
*/
public function testBuildList(array $content, array $expected): void
{
$model = Response::MODEL_BUILD_LIST;
$content = [
'builds' => [$content],
'total' => 1,
];
$expected = [
'builds' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
public function collectionProvider(): array
{
return [
@ -344,6 +410,30 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider permissionsProvider
* @dataProvider collectionProvider
*/
public function testCollectionList(array $content, array $expected): void
{
$model = Response::MODEL_COLLECTION_LIST;
$content = [
'collections' => [$content],
'total' => 1,
];
$expected = [
'collections' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
@ -356,6 +446,28 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
public function testDatabaseList(array $content, array $expected): void
{
$model = Response::MODEL_DATABASE_LIST;
$content = [
'databases' => [$content],
'total' => 1,
];
$expected = [
'databases' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
@ -368,6 +480,28 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
public function testDeploymentList(array $content, array $expected): void
{
$model = Response::MODEL_DEPLOYMENT_LIST;
$content = [
'deployments' => [$content],
'total' => 1,
];
$expected = [
'deployments' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider permissionsProvider
@ -381,6 +515,29 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider permissionsProvider
*/
public function testDocumentList(array $content, array $expected): void
{
$model = Response::MODEL_DOCUMENT_LIST;
$content = [
'documents' => [$content],
'total' => 1,
];
$expected = [
'documents' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
@ -393,6 +550,28 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
public function testDomainList(array $content, array $expected): void
{
$model = Response::MODEL_DOMAIN_LIST;
$content = [
'domains' => [$content],
'total' => 1,
];
$expected = [
'domains' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
public function executionProvider(): array
{
return [
@ -417,6 +596,30 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider permissionsProvider
* @dataProvider executionProvider
*/
public function testExecutionList(array $content, array $expected): void
{
$model = Response::MODEL_EXECUTION_LIST;
$content = [
'executions' => [$content],
'total' => 1,
];
$expected = [
'executions' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider permissionsProvider
@ -430,6 +633,29 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider permissionsProvider
*/
public function testFileList(array $content, array $expected): void
{
$model = Response::MODEL_FILE_LIST;
$content = [
'files' => [$content],
'total' => 1,
];
$expected = [
'files' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
public function functionProvider(): array
{
return [
@ -502,6 +728,29 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider functionProvider
*/
public function testFuncList(array $content, array $expected): void
{
$model = Response::MODEL_FUNCTION_LIST;
$content = [
'functions' => [$content],
'total' => 1,
];
$expected = [
'functions' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
public function keyProvider(): array
{
return [
@ -525,6 +774,29 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider keyProvider
*/
public function testKeyList(array $content, array $expected): void
{
$model = Response::MODEL_KEY_LIST;
$content = [
'keys' => [$content],
'total' => 1,
];
$expected = [
'keys' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
public function logProvider(): array
{
return [
@ -548,6 +820,29 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider logProvider
*/
public function testLogList(array $content, array $expected): void
{
$model = Response::MODEL_LOG_LIST;
$content = [
'logs' => [$content],
'total' => 1,
];
$expected = [
'logs' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
public function membershipProvider(): array
{
return [
@ -577,6 +872,29 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider membershipProvider
*/
public function testMembershipList(array $content, array $expected): void
{
$model = Response::MODEL_MEMBERSHIP_LIST;
$content = [
'memberships' => [$content],
'total' => 1,
];
$expected = [
'memberships' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
public function metricProvider(): array
{
return [
@ -615,6 +933,28 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
public function testPlatformList(array $content, array $expected): void
{
$model = Response::MODEL_PLATFORM_LIST;
$content = [
'platforms' => [$content],
'total' => 1,
];
$expected = [
'platforms' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
@ -627,6 +967,28 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
public function testProjectList(array $content, array $expected): void
{
$model = Response::MODEL_PROJECT_LIST;
$content = [
'projects' => [$content],
'total' => 1,
];
$expected = [
'projects' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
public function sessionProvider(): array
{
return [
@ -657,6 +1019,28 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider sessionProvider
*/
public function testSessionList(array $content, array $expected): void
{
$model = Response::MODEL_SESSION_LIST;
$content = [
'sessions' => [$content],
'total' => 1,
];
$expected = [
'sessions' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
@ -669,6 +1053,28 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
public function testTeamList(array $content, array $expected): void
{
$model = Response::MODEL_TEAM_LIST;
$content = [
'teams' => [$content],
'total' => 1,
];
$expected = [
'teams' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
public function tokenProvider(): array
{
return [
@ -909,4 +1315,117 @@ class V15Test extends TestCase
$this->assertEquals($expected, $result);
}
public function userProvider(): array
{
return [
'basic user' => [
[
'$id' => '5e5ea5c16897e',
'$createdAt' => '2020-06-24T06:47:30.000Z',
'$updatedAt' => '2020-06-24T06:47:30.000Z',
'name' => 'John Doe',
'password' => '$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L/4LdgrVRXxE',
'hash' => 'argon2',
'hashOptions' => [
'memoryCost' => 65536,
'timeCost' => 4,
'threads' => 3,
],
'registration' => '2020-06-24T06:47:30.000Z',
'status' => true,
'passwordUpdate' => '2020-06-24T06:47:30.000Z',
'email' => 'john@appwrite.io',
'phone' => '+4930901820',
'emailVerification' => true,
'phoneVerification' => true,
'prefs' => new \stdClass(),
],
[
'$id' => '5e5ea5c16897e',
'$createdAt' => 1592981250,
'$updatedAt' => 1592981250,
'name' => 'John Doe',
'registration' => 1592981250,
'status' => true,
'passwordUpdate' => 1592981250,
'email' => 'john@appwrite.io',
'phone' => '+4930901820',
'emailVerification' => true,
'phoneVerification' => true,
'prefs' => new \stdClass(),
],
],
];
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider userProvider
*/
public function testUser(array $content, array $expected): void
{
$model = Response::MODEL_USER;
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
* @dataProvider userProvider
*/
public function testUserList(array $content, array $expected): void
{
$model = Response::MODEL_USER_LIST;
$content = [
'users' => [$content],
'total' => 1,
];
$expected = [
'users' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
public function testWebhook(array $content, array $expected): void
{
$model = Response::MODEL_WEBHOOK;
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider createdAtUpdatedAtProvider
*/
public function testWebhookList(array $content, array $expected): void
{
$model = Response::MODEL_WEBHOOK_LIST;
$content = [
'webhooks' => [$content],
'total' => 1,
];
$expected = [
'webhooks' => [$expected],
'total' => 1,
];
$result = $this->filter->parse($content, $model);
$this->assertEquals($expected, $result);
}
}