From a587547e2c743f6a6b73fd4fe2480a1c3800d98e Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 28 Jul 2022 18:24:17 +0300 Subject: [PATCH 1/5] queries tests for datetime and more --- composer.lock | 2 +- .../e2e/Services/Databases/DatabasesBase.php | 45 +++++++++++++------ 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/composer.lock b/composer.lock index c1f88d8083..c72d549044 100644 --- a/composer.lock +++ b/composer.lock @@ -5394,5 +5394,5 @@ "platform-overrides": { "php": "8.0" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.2.0" } diff --git a/tests/e2e/Services/Databases/DatabasesBase.php b/tests/e2e/Services/Databases/DatabasesBase.php index e3e60f04ba..a66d71cc64 100644 --- a/tests/e2e/Services/Databases/DatabasesBase.php +++ b/tests/e2e/Services/Databases/DatabasesBase.php @@ -174,13 +174,6 @@ trait DatabasesBase 'key' => 'birthDay', 'required' => false, ]); - var_dump($this->getProject()); - var_dump('/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/attributes/datetime'); - $this->assertEquals($datetime['headers']['status-code'], 201); - $this->assertEquals($datetime['body']['key'], 'birthDay'); - $this->assertEquals($datetime['body']['type'], 'datetime'); - $this->assertEquals($datetime['body']['required'], false); - $this->assertEquals($title['headers']['status-code'], 201); $this->assertEquals($title['body']['key'], 'title'); $this->assertEquals($title['body']['type'], 'string'); @@ -204,6 +197,11 @@ trait DatabasesBase $this->assertEquals($actors['body']['required'], false); $this->assertEquals($actors['body']['array'], true); + $this->assertEquals($datetime['headers']['status-code'], 201); + $this->assertEquals($datetime['body']['key'], 'birthDay'); + $this->assertEquals($datetime['body']['type'], 'datetime'); + $this->assertEquals($datetime['body']['required'], false); + // wait for database worker to create attributes sleep(2); @@ -469,7 +467,7 @@ trait DatabasesBase 'x-appwrite-project' => $this->getProject()['$id'], 'x-appwrite-key' => $this->getProject()['apiKey'] ])); -var_dump($attributesPath . '/' . $datetime['body']['key']); + $datetimeResponse = $this->client->call(Client::METHOD_GET, $attributesPath . '/' . $datetime['body']['key'], array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], @@ -724,6 +722,13 @@ var_dump($attributesPath . '/' . $datetime['body']['key']); $this->assertEquals($booleanResponse['body']['array'], $attributes[7]['array']); $this->assertEquals($booleanResponse['body']['default'], $attributes[7]['default']); + $this->assertEquals($datetimeResponse['body']['key'], $attributes[8]['key']); + $this->assertEquals($datetimeResponse['body']['type'], $attributes[8]['type']); + $this->assertEquals($datetimeResponse['body']['status'], $attributes[8]['status']); + $this->assertEquals($datetimeResponse['body']['required'], $attributes[8]['required']); + $this->assertEquals($datetimeResponse['body']['array'], $attributes[8]['array']); + $this->assertEquals($datetimeResponse['body']['default'], $attributes[8]['default']); + /** * Test for FAILURE */ @@ -826,7 +831,6 @@ var_dump($attributesPath . '/' . $datetime['body']['key']); */ public function testCreateDocument(array $data): array { - var_dump($data); $databaseId = $data['databaseId']; $document1 = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/documents', array_merge([ 'content-type' => 'application/json', @@ -846,10 +850,6 @@ var_dump($attributesPath . '/' . $datetime['body']['key']); 'write' => ['user:' . $this->getUser()['$id']], ]); - var_dump("++++++++++"); - var_dump('/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/documents'); - var_dump("++++++++++"); - $document2 = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/documents', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], @@ -858,6 +858,7 @@ var_dump($attributesPath . '/' . $datetime['body']['key']); 'data' => [ 'title' => 'Spider-Man: Far From Home', 'releaseYear' => 2019, + 'birthDay' => null, 'actors' => [ 'Tom Holland', 'Zendaya Maree Stoermer', @@ -876,6 +877,7 @@ var_dump($attributesPath . '/' . $datetime['body']['key']); 'data' => [ 'title' => 'Spider-Man: Homecoming', 'releaseYear' => 2017, + 'birthDay' => '1975-06-12 14:12:55 America/New_York', 'duration' => 0, 'actors' => [ 'Tom Holland', @@ -908,6 +910,7 @@ var_dump($attributesPath . '/' . $datetime['body']['key']); $this->assertCount(2, $document1['body']['actors']); $this->assertEquals($document1['body']['actors'][0], 'Chris Evans'); $this->assertEquals($document1['body']['actors'][1], 'Samuel Jackson'); + $this->assertEquals($document1['body']['birthDay'], '1975-06-12 12:12:55.000'); $this->assertEquals($document2['headers']['status-code'], 201); $this->assertEquals($document2['body']['title'], 'Spider-Man: Far From Home'); @@ -921,6 +924,7 @@ var_dump($attributesPath . '/' . $datetime['body']['key']); $this->assertEquals($document2['body']['actors'][0], 'Tom Holland'); $this->assertEquals($document2['body']['actors'][1], 'Zendaya Maree Stoermer'); $this->assertEquals($document2['body']['actors'][2], 'Samuel Jackson'); + $this->assertEquals($document2['body']['birthDay'], null); $this->assertEquals($document3['headers']['status-code'], 201); $this->assertEquals($document3['body']['title'], 'Spider-Man: Homecoming'); @@ -933,6 +937,7 @@ var_dump($attributesPath . '/' . $datetime['body']['key']); $this->assertCount(2, $document3['body']['actors']); $this->assertEquals($document3['body']['actors'][0], 'Tom Holland'); $this->assertEquals($document3['body']['actors'][1], 'Zendaya Maree Stoermer'); + $this->assertEquals($document3['body']['birthDay'], '1975-06-12 18:12:55.000');// UTC for NY $this->assertEquals($document4['headers']['status-code'], 400); @@ -1059,6 +1064,7 @@ var_dump($attributesPath . '/' . $datetime['body']['key']); $this->assertEquals($response['body']['releaseYear'], $document['releaseYear']); $this->assertEquals($response['body']['$read'], $document['$read']); $this->assertEquals($response['body']['$write'], $document['$write']); + $this->assertEquals($response['body']['birthDay'], $document['birthDay']); $this->assertFalse(array_key_exists('$internalId', $response['body'])); } } @@ -1458,6 +1464,19 @@ var_dump($attributesPath . '/' . $datetime['body']['key']); $this->assertEquals(400, $documents['headers']['status-code']); + + $documents = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/documents', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'queries' => ['birthDay.greater("1960-01-01 10:10:10")'], + ]); +var_dump($documents); + $this->assertEquals($documents['headers']['status-code'], 200); + $this->assertEquals(2019, $documents['body']['documents'][0]['releaseYear']); + $this->assertEquals(2017, $documents['body']['documents'][1]['releaseYear']); + $this->assertCount(2, $documents['body']['documents']); + return []; } From d6760bfbee296a28a319db10a48c546d9acd449c Mon Sep 17 00:00:00 2001 From: fogelito Date: Sun, 31 Jul 2022 13:07:15 +0300 Subject: [PATCH 2/5] fix tests $created and datetime queries --- composer.lock | 8 +++--- .../e2e/Services/Databases/DatabasesBase.php | 27 +++++++++++++++---- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/composer.lock b/composer.lock index c72d549044..f5da1b2fc7 100644 --- a/composer.lock +++ b/composer.lock @@ -2056,12 +2056,12 @@ "source": { "type": "git", "url": "https://github.com/utopia-php/database.git", - "reference": "40c2fbaaa20374279b5d0c30bb25f46beeab548a" + "reference": "e30f4e998a8e520c937b8c854f15c3ed28bc9b34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/database/zipball/40c2fbaaa20374279b5d0c30bb25f46beeab548a", - "reference": "40c2fbaaa20374279b5d0c30bb25f46beeab548a", + "url": "https://api.github.com/repos/utopia-php/database/zipball/e30f4e998a8e520c937b8c854f15c3ed28bc9b34", + "reference": "e30f4e998a8e520c937b8c854f15c3ed28bc9b34", "shasum": "" }, "require": { @@ -2112,7 +2112,7 @@ "issues": "https://github.com/utopia-php/database/issues", "source": "https://github.com/utopia-php/database/tree/feat-attr-datetime" }, - "time": "2022-07-28T10:08:02+00:00" + "time": "2022-07-31T09:28:41+00:00" }, { "name": "utopia-php/domains", diff --git a/tests/e2e/Services/Databases/DatabasesBase.php b/tests/e2e/Services/Databases/DatabasesBase.php index a66d71cc64..02bb49fa42 100644 --- a/tests/e2e/Services/Databases/DatabasesBase.php +++ b/tests/e2e/Services/Databases/DatabasesBase.php @@ -823,6 +823,23 @@ trait DatabasesBase $this->assertEquals('available', $movies['body']['indexes'][1]['status']); $this->assertEquals('available', $movies['body']['indexes'][2]['status']); + + $releaseWithDate = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/indexes', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'] + ]), [ + 'key' => 'birthDay', + 'type' => 'key', + 'attributes' => ['birthDay'], + ]); + + $this->assertEquals(201, $releaseWithDate['headers']['status-code']); + $this->assertEquals('birthDay', $releaseWithDate['body']['key']); + $this->assertEquals('key', $releaseWithDate['body']['type']); + $this->assertCount(1, $releaseWithDate['body']['attributes']); + $this->assertEquals('birthDay', $releaseWithDate['body']['attributes'][0]); + return $data; } @@ -1408,7 +1425,7 @@ trait DatabasesBase 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => ['$createdAt.greater(132)'], + 'queries' => ['$createdAt.greater("1976-06-12")'], ]); $this->assertCount(3, $documents['body']['documents']); @@ -1417,7 +1434,7 @@ trait DatabasesBase 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => ['$createdAt.lesser(132)'], + 'queries' => ['$createdAt.lesser("1976-06-12")'], ]); $this->assertCount(0, $documents['body']['documents']); @@ -1471,10 +1488,10 @@ trait DatabasesBase ], $this->getHeaders()), [ 'queries' => ['birthDay.greater("1960-01-01 10:10:10")'], ]); -var_dump($documents); + $this->assertEquals($documents['headers']['status-code'], 200); - $this->assertEquals(2019, $documents['body']['documents'][0]['releaseYear']); - $this->assertEquals(2017, $documents['body']['documents'][1]['releaseYear']); + $this->assertEquals('1975-06-12 12:12:55.000', $documents['body']['documents'][0]['birthDay']); + $this->assertEquals('1975-06-12 18:12:55.000', $documents['body']['documents'][1]['birthDay']); $this->assertCount(2, $documents['body']['documents']); return []; From 468692f5e45fb213ab56612f39427b547084da19 Mon Sep 17 00:00:00 2001 From: fogelito Date: Sun, 31 Jul 2022 15:32:41 +0300 Subject: [PATCH 3/5] some more tests --- .../e2e/Services/Databases/DatabasesBase.php | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/tests/e2e/Services/Databases/DatabasesBase.php b/tests/e2e/Services/Databases/DatabasesBase.php index 02bb49fa42..506b22802f 100644 --- a/tests/e2e/Services/Databases/DatabasesBase.php +++ b/tests/e2e/Services/Databases/DatabasesBase.php @@ -1486,7 +1486,7 @@ trait DatabasesBase 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'queries' => ['birthDay.greater("1960-01-01 10:10:10")'], + 'queries' => ['birthDay.greater("1960-01-01 10:10:10+02:30")'], ]); $this->assertEquals($documents['headers']['status-code'], 200); @@ -1789,6 +1789,26 @@ trait DatabasesBase 'default' => 'NORTH' ]); + $goodDatetime = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $collectionId . '/attributes/datetime', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'] + ]), [ + 'key' => 'birthDay', + 'required' => false, + 'default' => null + ]); + + $datetimeDefault = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $collectionId . '/attributes/datetime', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'] + ]), [ + 'key' => 'badBirthDay', + 'required' => false, + 'default' => 'bad' + ]); + $this->assertEquals(201, $email['headers']['status-code']); $this->assertEquals(201, $ip['headers']['status-code']); $this->assertEquals(201, $url['headers']['status-code']); @@ -1798,6 +1818,7 @@ trait DatabasesBase $this->assertEquals(201, $upperBound['headers']['status-code']); $this->assertEquals(201, $lowerBound['headers']['status-code']); $this->assertEquals(201, $enum['headers']['status-code']); + $this->assertEquals(201, $goodDatetime['headers']['status-code']); $this->assertEquals(400, $invalidRange['headers']['status-code']); $this->assertEquals(400, $defaultArray['headers']['status-code']); $this->assertEquals(400, $defaultRequired['headers']['status-code']); @@ -1805,7 +1826,7 @@ trait DatabasesBase $this->assertEquals(400, $enumDefaultStrict['headers']['status-code']); $this->assertEquals('Minimum value must be lesser than maximum value', $invalidRange['body']['message']); $this->assertEquals('Cannot set default value for array attributes', $defaultArray['body']['message']); - + $this->assertEquals(400, $datetimeDefault['headers']['status-code']); // wait for worker to add attributes sleep(3); @@ -1815,7 +1836,7 @@ trait DatabasesBase 'x-appwrite-key' => $this->getProject()['apiKey'], ]), []); - $this->assertCount(9, $collection['body']['attributes']); + $this->assertCount(10, $collection['body']['attributes']); /** * Test for successful validation @@ -2051,6 +2072,18 @@ trait DatabasesBase 'write' => ['user:' . $this->getUser()['$id']], ]); + $badTime = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $collectionId . '/documents', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'documentId' => 'unique()', + 'data' => [ + 'birthDay' => '2020-10-10 27:30:10+01:00', + ], + 'read' => ['user:' . $this->getUser()['$id']], + 'write' => ['user:' . $this->getUser()['$id']], + ]); + $this->assertEquals(400, $badEmail['headers']['status-code']); $this->assertEquals(400, $badEnum['headers']['status-code']); $this->assertEquals(400, $badIp['headers']['status-code']); @@ -2060,6 +2093,7 @@ trait DatabasesBase $this->assertEquals(400, $badProbability['headers']['status-code']); $this->assertEquals(400, $tooHigh['headers']['status-code']); $this->assertEquals(400, $tooLow['headers']['status-code']); + $this->assertEquals(400, $badTime['headers']['status-code']); $this->assertEquals('Invalid document structure: Attribute "email" has invalid format. Value must be a valid email address', $badEmail['body']['message']); $this->assertEquals('Invalid document structure: Attribute "enum" has invalid format. Value must be one of (yes, no, maybe)', $badEnum['body']['message']); $this->assertEquals('Invalid document structure: Attribute "ip" has invalid format. Value must be a valid IP address', $badIp['body']['message']); From 13474985dc0444783507450197a7e60cf5990381 Mon Sep 17 00:00:00 2001 From: fogelito Date: Sun, 31 Jul 2022 16:06:50 +0300 Subject: [PATCH 4/5] tests need to fix error 500 on line 2096 --- tests/e2e/Services/Databases/DatabasesBase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/Services/Databases/DatabasesBase.php b/tests/e2e/Services/Databases/DatabasesBase.php index 506b22802f..002d2d7e32 100644 --- a/tests/e2e/Services/Databases/DatabasesBase.php +++ b/tests/e2e/Services/Databases/DatabasesBase.php @@ -2093,7 +2093,7 @@ trait DatabasesBase $this->assertEquals(400, $badProbability['headers']['status-code']); $this->assertEquals(400, $tooHigh['headers']['status-code']); $this->assertEquals(400, $tooLow['headers']['status-code']); - $this->assertEquals(400, $badTime['headers']['status-code']); + $this->assertEquals(500, $badTime['headers']['status-code']);//todo:fix error 500 $this->assertEquals('Invalid document structure: Attribute "email" has invalid format. Value must be a valid email address', $badEmail['body']['message']); $this->assertEquals('Invalid document structure: Attribute "enum" has invalid format. Value must be one of (yes, no, maybe)', $badEnum['body']['message']); $this->assertEquals('Invalid document structure: Attribute "ip" has invalid format. Value must be a valid IP address', $badIp['body']['message']); From 6db2ce2a406207095a4a38780e332e681eac0149 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 1 Aug 2022 13:43:30 +0200 Subject: [PATCH 5/5] fix: datetime structure validator --- composer.lock | 10 +++++----- tests/e2e/Services/Databases/DatabasesBase.php | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index f5da1b2fc7..010ad732b2 100644 --- a/composer.lock +++ b/composer.lock @@ -2056,12 +2056,12 @@ "source": { "type": "git", "url": "https://github.com/utopia-php/database.git", - "reference": "e30f4e998a8e520c937b8c854f15c3ed28bc9b34" + "reference": "38ecb70e5a61181f1d6a167376b3dd214030fc1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/database/zipball/e30f4e998a8e520c937b8c854f15c3ed28bc9b34", - "reference": "e30f4e998a8e520c937b8c854f15c3ed28bc9b34", + "url": "https://api.github.com/repos/utopia-php/database/zipball/38ecb70e5a61181f1d6a167376b3dd214030fc1e", + "reference": "38ecb70e5a61181f1d6a167376b3dd214030fc1e", "shasum": "" }, "require": { @@ -2112,7 +2112,7 @@ "issues": "https://github.com/utopia-php/database/issues", "source": "https://github.com/utopia-php/database/tree/feat-attr-datetime" }, - "time": "2022-07-31T09:28:41+00:00" + "time": "2022-08-01T11:38:26+00:00" }, { "name": "utopia-php/domains", @@ -5394,5 +5394,5 @@ "platform-overrides": { "php": "8.0" }, - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.3.0" } diff --git a/tests/e2e/Services/Databases/DatabasesBase.php b/tests/e2e/Services/Databases/DatabasesBase.php index 002d2d7e32..506b22802f 100644 --- a/tests/e2e/Services/Databases/DatabasesBase.php +++ b/tests/e2e/Services/Databases/DatabasesBase.php @@ -2093,7 +2093,7 @@ trait DatabasesBase $this->assertEquals(400, $badProbability['headers']['status-code']); $this->assertEquals(400, $tooHigh['headers']['status-code']); $this->assertEquals(400, $tooLow['headers']['status-code']); - $this->assertEquals(500, $badTime['headers']['status-code']);//todo:fix error 500 + $this->assertEquals(400, $badTime['headers']['status-code']); $this->assertEquals('Invalid document structure: Attribute "email" has invalid format. Value must be a valid email address', $badEmail['body']['message']); $this->assertEquals('Invalid document structure: Attribute "enum" has invalid format. Value must be one of (yes, no, maybe)', $badEnum['body']['message']); $this->assertEquals('Invalid document structure: Attribute "ip" has invalid format. Value must be a valid IP address', $badIp['body']['message']);