From 4515f217a93ae11035cb559d029b3bc172536637 Mon Sep 17 00:00:00 2001 From: fogelito Date: Mon, 14 Jul 2025 11:32:48 +0300 Subject: [PATCH 01/14] ID / Sequence attribute use as int --- src/Database/Adapter/MariaDB.php | 4 +++- src/Database/Adapter/SQL.php | 2 +- src/Database/Database.php | 2 ++ src/Database/Validator/Sequence.php | 11 ++++++----- tests/e2e/Adapter/Scopes/DocumentTests.php | 23 +++++++++++----------- 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/Database/Adapter/MariaDB.php b/src/Database/Adapter/MariaDB.php index 2a2d5955c..db7a86bdc 100644 --- a/src/Database/Adapter/MariaDB.php +++ b/src/Database/Adapter/MariaDB.php @@ -910,6 +910,8 @@ public function createDocument(string $collection, Document $document): Document throw new DatabaseException('Error creating document empty "$sequence"'); } + $document['$sequence'] = (int)$document['$sequence']; + if (isset($stmtPermissions)) { $stmtPermissions->execute(); } @@ -1640,7 +1642,7 @@ public function find(string $collection, array $queries = [], ?int $limit = 25, unset($results[$index]['_uid']); } if (\array_key_exists('_id', $document)) { - $results[$index]['$sequence'] = $document['_id']; + $results[$index]['$sequence'] = (int)$document['_id']; unset($results[$index]['_id']); } if (\array_key_exists('_tenant', $document)) { diff --git a/src/Database/Adapter/SQL.php b/src/Database/Adapter/SQL.php index 7324e789f..7983765b8 100644 --- a/src/Database/Adapter/SQL.php +++ b/src/Database/Adapter/SQL.php @@ -369,7 +369,7 @@ public function getDocument(string $collection, string $id, array $queries = [], $document = $document[0]; if (\array_key_exists('_id', $document)) { - $document['$sequence'] = $document['_id']; + $document['$sequence'] = (int)$document['_id']; unset($document['_id']); } if (\array_key_exists('_uid', $document)) { diff --git a/src/Database/Database.php b/src/Database/Database.php index b2d5c0d55..6aed4f8c6 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -6508,6 +6508,8 @@ public function casting(Document $collection, Document $document): Document $node = (bool)$node; break; case self::VAR_INTEGER: + case self::VAR_ID: + case self::VAR_ID: $node = (int)$node; break; case self::VAR_FLOAT: diff --git a/src/Database/Validator/Sequence.php b/src/Database/Validator/Sequence.php index 62417cb29..ecea08d20 100644 --- a/src/Database/Validator/Sequence.php +++ b/src/Database/Validator/Sequence.php @@ -46,14 +46,15 @@ public function isValid($value): bool return false; } - if (gettype($value) !== 'string') { - return false; - } - if ($this->idAttributeType === 'string') { return preg_match('/^[a-f0-9]{24}$/i', $value) === 1; } elseif ($this->idAttributeType === 'int') { - $validator = new Integer(loose: true); + + if (gettype($value) !== 'integer') { + return false; + } + + $validator = new Integer(); if (!$validator->isValid($value)) { return false; } diff --git a/tests/e2e/Adapter/Scopes/DocumentTests.php b/tests/e2e/Adapter/Scopes/DocumentTests.php index 572b2d868..c997fdb48 100644 --- a/tests/e2e/Adapter/Scopes/DocumentTests.php +++ b/tests/e2e/Adapter/Scopes/DocumentTests.php @@ -67,7 +67,7 @@ public function testCreateDocument(): Document 'colors' => ['pink', 'green', 'blue'], 'empty' => [], 'with-dash' => 'Works', - 'id' => '1000000', + 'id' => 1000000, ])); $this->assertNotEmpty(true, $document->getId()); @@ -91,8 +91,8 @@ public function testCreateDocument(): Document $this->assertEquals(['pink', 'green', 'blue'], $document->getAttribute('colors')); $this->assertEquals([], $document->getAttribute('empty')); $this->assertEquals('Works', $document->getAttribute('with-dash')); - $this->assertIsString($document->getAttribute('id')); - $this->assertEquals('1000000', $document->getAttribute('id')); + $this->assertIsInt($document->getAttribute('id')); + $this->assertEquals(1000000, $document->getAttribute('id')); // Test create document with manual internal id $manualIdDocument = $database->createDocument('documents', new Document([ @@ -270,7 +270,7 @@ public function testCreateDocument(): Document * Insert ID attribute with '0' */ $documentId0 = $database->createDocument('documents', new Document([ - 'id' => '0', + 'id' => 0, '$permissions' => [Permission::read(Role::any())], 'string' => '', 'integer_signed' => 1, @@ -285,21 +285,20 @@ public function testCreateDocument(): Document 'with-dash' => '', ])); $this->assertNotEmpty(true, $documentId0->getSequence()); - $this->assertIsString($documentId0->getAttribute('id')); - $this->assertEquals('0', $documentId0->getAttribute('id')); + $this->assertIsInt($documentId0->getAttribute('id')); + $this->assertEquals(0, $documentId0->getAttribute('id')); $documentId0 = $database->getDocument('documents', $documentId0->getId()); $this->assertNotEmpty(true, $documentId0->getSequence()); - $this->assertIsString($documentId0->getAttribute('id')); - $this->assertEquals('0', $documentId0->getAttribute('id')); + $this->assertIsInt($documentId0->getAttribute('id')); + $this->assertEquals(0, $documentId0->getAttribute('id')); $documentId0 = $database->findOne('documents', [ - query::equal('id', ['0']) + query::equal('id', [0]) ]); $this->assertNotEmpty(true, $documentId0->getSequence()); - $this->assertIsString($documentId0->getAttribute('id')); - $this->assertEquals('0', $documentId0->getAttribute('id')); - + $this->assertIsInt($documentId0->getAttribute('id')); + $this->assertEquals(0, $documentId0->getAttribute('id')); return $document; } From 7657f7f8a31c860aed268365a255d763b83347cc Mon Sep 17 00:00:00 2001 From: fogelito Date: Mon, 14 Jul 2025 12:07:51 +0300 Subject: [PATCH 02/14] Cast ID attribute to int --- src/Database/Adapter/Postgres.php | 3 ++- src/Database/Database.php | 7 +++++-- src/Database/Document.php | 6 +++--- tests/e2e/Adapter/Scopes/DocumentTests.php | 8 ++++---- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Database/Adapter/Postgres.php b/src/Database/Adapter/Postgres.php index c4895017f..9eb52469d 100644 --- a/src/Database/Adapter/Postgres.php +++ b/src/Database/Adapter/Postgres.php @@ -1030,6 +1030,7 @@ public function createDocument(string $collection, Document $document): Document $lastInsertedId = $this->getPDO()->lastInsertId(); // Sequence can be manually set as well $document['$sequence'] ??= $lastInsertedId; + $document['$sequence'] = (int)$document['$sequence']; if (isset($stmtPermissions)) { $this->execute($stmtPermissions); @@ -1525,7 +1526,7 @@ public function find(string $collection, array $queries = [], ?int $limit = 25, unset($results[$index]['_uid']); } if (\array_key_exists('_id', $document)) { - $results[$index]['$sequence'] = $document['_id']; + $results[$index]['$sequence'] = (int)$document['_id']; unset($results[$index]['_id']); } if (\array_key_exists('_tenant', $document)) { diff --git a/src/Database/Database.php b/src/Database/Database.php index 6aed4f8c6..420885b95 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -6507,9 +6507,12 @@ public function casting(Document $collection, Document $document): Document case self::VAR_BOOLEAN: $node = (bool)$node; break; - case self::VAR_INTEGER: - case self::VAR_ID: case self::VAR_ID: + if ($this->adapter->getIdAttributeType() === 'int'){ + $node = (int)$node; + } + break; + case self::VAR_INTEGER: $node = (int)$node; break; case self::VAR_FLOAT: diff --git a/src/Database/Document.php b/src/Database/Document.php index 2ed634f46..4a9f192dc 100644 --- a/src/Database/Document.php +++ b/src/Database/Document.php @@ -62,11 +62,11 @@ public function getId(): string } /** - * @return string + * @return mixed */ - public function getSequence(): string + public function getSequence(): mixed { - return $this->getAttribute('$sequence', ''); + return $this->getAttribute('$sequence'); } /** diff --git a/tests/e2e/Adapter/Scopes/DocumentTests.php b/tests/e2e/Adapter/Scopes/DocumentTests.php index c997fdb48..80d7521ba 100644 --- a/tests/e2e/Adapter/Scopes/DocumentTests.php +++ b/tests/e2e/Adapter/Scopes/DocumentTests.php @@ -97,7 +97,7 @@ public function testCreateDocument(): Document // Test create document with manual internal id $manualIdDocument = $database->createDocument('documents', new Document([ '$id' => '56000', - '$sequence' => '56000', + '$sequence' => 56000, '$permissions' => [ Permission::read(Role::any()), Permission::read(Role::user(ID::custom('1'))), @@ -214,7 +214,7 @@ public function testCreateDocument(): Document try { $database->createDocument('documents', new Document([ - '$sequence' => '0', + '$sequence' => 0, '$permissions' => [], 'string' => '', 'integer_signed' => 1, @@ -385,7 +385,7 @@ public function testCreateDocumentsWithAutoIncrement(): void for ($i = $sequence; $i <= ($sequence + $count); $i++) { $documents[] = new Document([ - '$sequence' => (string)$i, + '$sequence' => $i, '$permissions' => [ Permission::read(Role::any()), Permission::create(Role::any()), @@ -4370,7 +4370,7 @@ public function testExceptionCaseInsensitiveDuplicate(Document $document): Docum $database = static::getDatabase(); $document->setAttribute('$id', 'caseSensitive'); - $document->setAttribute('$sequence', '200'); + $document->setAttribute('$sequence', 200); $database->createDocument($document->getCollection(), $document); $document->setAttribute('$id', 'CaseSensitive'); From c06fc16bcbf5346fd65596b6daf99cab359037e5 Mon Sep 17 00:00:00 2001 From: fogelito Date: Mon, 14 Jul 2025 12:24:27 +0300 Subject: [PATCH 03/14] Fix test --- tests/unit/Validator/DocumentsQueriesTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/Validator/DocumentsQueriesTest.php b/tests/unit/Validator/DocumentsQueriesTest.php index 9fe3e0fc7..f485b58c7 100644 --- a/tests/unit/Validator/DocumentsQueriesTest.php +++ b/tests/unit/Validator/DocumentsQueriesTest.php @@ -130,7 +130,7 @@ public function testValidQueries(): void ); $queries = [ - Query::notEqual('id', '1000000'), + Query::notEqual('id', 1000000), Query::equal('description', ['Best movie ever']), Query::equal('description', ['']), Query::equal('is_bool', [false]), From d63e3c4e4dc54ad122f96e87424d80156b6b134c Mon Sep 17 00:00:00 2001 From: fogelito Date: Mon, 14 Jul 2025 12:24:53 +0300 Subject: [PATCH 04/14] Formatting --- src/Database/Database.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Database/Database.php b/src/Database/Database.php index 420885b95..2a6f33fa5 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -6508,7 +6508,7 @@ public function casting(Document $collection, Document $document): Document $node = (bool)$node; break; case self::VAR_ID: - if ($this->adapter->getIdAttributeType() === 'int'){ + if ($this->adapter->getIdAttributeType() === 'int') { $node = (int)$node; } break; From 4d5a1eeafc24a55c04a17c8619d0d6980336a15d Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 15 Jul 2025 08:53:49 +0300 Subject: [PATCH 05/14] Use constant --- src/Database/Database.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Database/Database.php b/src/Database/Database.php index 2b8d1bf46..e3d54b742 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -6511,7 +6511,7 @@ public function casting(Document $collection, Document $document): Document $node = (bool)$node; break; case self::VAR_ID: - if ($this->adapter->getIdAttributeType() === 'int') { + if ($this->adapter->getIdAttributeType() === Database::VAR_ID_INT) { $node = (int)$node; } break; From e001abde7c96438e83279e19f7f1a2933872c813 Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 15 Jul 2025 10:13:06 +0300 Subject: [PATCH 06/14] Fix unit tests --- src/Database/Adapter/SQLite.php | 2 +- tests/unit/Validator/StructureTest.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Database/Adapter/SQLite.php b/src/Database/Adapter/SQLite.php index be2c4b5f7..cc62339ac 100644 --- a/src/Database/Adapter/SQLite.php +++ b/src/Database/Adapter/SQLite.php @@ -609,7 +609,7 @@ public function createDocument(string $collection, Document $document): Document $statment->execute(); $last = $statment->fetch(); - $document['$sequence'] = $last['id']; + $document['$sequence'] = (int)$last['id']; if (isset($stmtPermissions)) { $stmtPermissions->execute(); diff --git a/tests/unit/Validator/StructureTest.php b/tests/unit/Validator/StructureTest.php index 26561d48e..1d87cd3ad 100644 --- a/tests/unit/Validator/StructureTest.php +++ b/tests/unit/Validator/StructureTest.php @@ -213,7 +213,7 @@ public function testNullValues(): void 'published' => true, 'tags' => ['dog', 'cat', 'mouse'], 'feedback' => 'team@appwrite.io', - 'id' => '1000', + 'id' => 1000, ]))); $this->assertEquals(true, $validator->isValid(new Document([ @@ -659,7 +659,7 @@ public function testId(): void Database::VAR_ID_INT ); - $id = '1000'; + $id = 1000; $mongoid = '507f1f77bcf86cd799439011'; /** From e750d60840dfa061d13c1dea991959a515ce0db3 Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 15 Jul 2025 14:01:14 +0300 Subject: [PATCH 07/14] Update Hint --- src/Database/Document.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Database/Document.php b/src/Database/Document.php index 4a9f192dc..edec7a671 100644 --- a/src/Database/Document.php +++ b/src/Database/Document.php @@ -62,9 +62,9 @@ public function getId(): string } /** - * @return mixed + * @return int|string|null */ - public function getSequence(): mixed + public function getSequence(): int|string|null { return $this->getAttribute('$sequence'); } From 7875b4d39e52ca3fb76c3274c63f239f03e407bd Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 15 Jul 2025 17:46:09 +0300 Subject: [PATCH 08/14] $tenant as VAR_ID --- src/Database/Database.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Database/Database.php b/src/Database/Database.php index e3d54b742..4390d4213 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -189,7 +189,7 @@ class Database ], [ '$id' => '$tenant', - 'type' => self::VAR_INTEGER, + 'type' => self::VAR_ID, 'size' => 0, 'required' => false, 'default' => null, From ffb600ebe37ec9a9fdfc0a6caa6ca2b0a8f7ff50 Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 16 Jul 2025 09:57:51 +0300 Subject: [PATCH 09/14] Create document casting --- src/Database/Adapter/MariaDB.php | 2 -- src/Database/Adapter/Postgres.php | 1 - src/Database/Database.php | 2 ++ 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Database/Adapter/MariaDB.php b/src/Database/Adapter/MariaDB.php index 0d58b3c57..8b1b17b94 100644 --- a/src/Database/Adapter/MariaDB.php +++ b/src/Database/Adapter/MariaDB.php @@ -910,8 +910,6 @@ public function createDocument(string $collection, Document $document): Document throw new DatabaseException('Error creating document empty "$sequence"'); } - $document['$sequence'] = (int)$document['$sequence']; - if (isset($stmtPermissions)) { $stmtPermissions->execute(); } diff --git a/src/Database/Adapter/Postgres.php b/src/Database/Adapter/Postgres.php index 02234f0a5..d09bbd032 100644 --- a/src/Database/Adapter/Postgres.php +++ b/src/Database/Adapter/Postgres.php @@ -1030,7 +1030,6 @@ public function createDocument(string $collection, Document $document): Document $lastInsertedId = $this->getPDO()->lastInsertId(); // Sequence can be manually set as well $document['$sequence'] ??= $lastInsertedId; - $document['$sequence'] = (int)$document['$sequence']; if (isset($stmtPermissions)) { $this->execute($stmtPermissions); diff --git a/src/Database/Database.php b/src/Database/Database.php index 0c0ef9cbf..ac0e16acb 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -3673,6 +3673,7 @@ public function createDocument(string $collection, Document $document): Document $document = $this->silent(fn () => $this->populateDocumentRelationships($collection, $document)); } + $document = $this->casting($collection, $document); $document = $this->decode($collection, $document); $this->trigger(self::EVENT_DOCUMENT_CREATE, $document); @@ -3739,6 +3740,7 @@ public function createDocuments( } } + $document = $this->casting($collection, $document); $document = $this->encode($collection, $document); $validator = new Structure( From 54cde9bd7f975b0447064c6c74201420e84340c7 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 17 Jul 2025 16:49:26 +0300 Subject: [PATCH 10/14] Fix tests --- src/Database/Adapter.php | 2 +- src/Database/Adapter/SQL.php | 2 +- tests/e2e/Adapter/Scopes/DocumentTests.php | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Database/Adapter.php b/src/Database/Adapter.php index 27bff9647..b13d2d127 100644 --- a/src/Database/Adapter.php +++ b/src/Database/Adapter.php @@ -747,7 +747,7 @@ abstract public function deleteDocument(string $collection, string $id): bool; * Delete Documents * * @param string $collection - * @param array $sequences + * @param array $sequences * @param array $permissionIds * * @return int diff --git a/src/Database/Adapter/SQL.php b/src/Database/Adapter/SQL.php index a3de41981..c4ec47eb5 100644 --- a/src/Database/Adapter/SQL.php +++ b/src/Database/Adapter/SQL.php @@ -642,7 +642,7 @@ public function updateDocuments(string $collection, Document $updates, array $do * Delete Documents * * @param string $collection - * @param array $sequences + * @param array $sequences * @param array $permissionIds * * @return int diff --git a/tests/e2e/Adapter/Scopes/DocumentTests.php b/tests/e2e/Adapter/Scopes/DocumentTests.php index 80d7521ba..72e5a01c1 100644 --- a/tests/e2e/Adapter/Scopes/DocumentTests.php +++ b/tests/e2e/Adapter/Scopes/DocumentTests.php @@ -253,7 +253,7 @@ public function testCreateDocument(): Document 'empty' => [], 'with-dash' => '', ])); - $this->assertNotEmpty(true, $documentIdNull->getSequence()); + $this->assertArrayHasKey('$sequence', $documentIdNull); $this->assertNull($documentIdNull->getAttribute('id')); $documentIdNull = $database->getDocument('documents', $documentIdNull->getId()); @@ -284,19 +284,19 @@ public function testCreateDocument(): Document 'empty' => [], 'with-dash' => '', ])); - $this->assertNotEmpty(true, $documentId0->getSequence()); + $this->assertArrayHasKey('$sequence', $documentId0); $this->assertIsInt($documentId0->getAttribute('id')); $this->assertEquals(0, $documentId0->getAttribute('id')); $documentId0 = $database->getDocument('documents', $documentId0->getId()); - $this->assertNotEmpty(true, $documentId0->getSequence()); + $this->assertArrayHasKey('$sequence', $documentId0); $this->assertIsInt($documentId0->getAttribute('id')); $this->assertEquals(0, $documentId0->getAttribute('id')); $documentId0 = $database->findOne('documents', [ query::equal('id', [0]) ]); - $this->assertNotEmpty(true, $documentId0->getSequence()); + $this->assertArrayHasKey('$sequence', $documentId0); $this->assertIsInt($documentId0->getAttribute('id')); $this->assertEquals(0, $documentId0->getAttribute('id')); From 1bf59b505f9359dcc1905bc8723d52c318814f22 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 17 Jul 2025 16:54:19 +0300 Subject: [PATCH 11/14] Remove cast int --- src/Database/Adapter/MariaDB.php | 2 +- src/Database/Adapter/Postgres.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Database/Adapter/MariaDB.php b/src/Database/Adapter/MariaDB.php index 8b1b17b94..43716be0f 100644 --- a/src/Database/Adapter/MariaDB.php +++ b/src/Database/Adapter/MariaDB.php @@ -1640,7 +1640,7 @@ public function find(string $collection, array $queries = [], ?int $limit = 25, unset($results[$index]['_uid']); } if (\array_key_exists('_id', $document)) { - $results[$index]['$sequence'] = (int)$document['_id']; + $results[$index]['$sequence'] = $document['_id']; unset($results[$index]['_id']); } if (\array_key_exists('_tenant', $document)) { diff --git a/src/Database/Adapter/Postgres.php b/src/Database/Adapter/Postgres.php index d09bbd032..982244d2b 100644 --- a/src/Database/Adapter/Postgres.php +++ b/src/Database/Adapter/Postgres.php @@ -1525,7 +1525,7 @@ public function find(string $collection, array $queries = [], ?int $limit = 25, unset($results[$index]['_uid']); } if (\array_key_exists('_id', $document)) { - $results[$index]['$sequence'] = (int)$document['_id']; + $results[$index]['$sequence'] = $document['_id']; unset($results[$index]['_id']); } if (\array_key_exists('_tenant', $document)) { From 27cbf0b8bb5c3891d7ee679eaa5f4a75aa4a8314 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 17 Jul 2025 16:55:37 +0300 Subject: [PATCH 12/14] Casting VAR_ID string --- src/Database/Database.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Database/Database.php b/src/Database/Database.php index ac0e16acb..7b2eefb6e 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -6518,6 +6518,9 @@ public function casting(Document $collection, Document $document): Document if ($this->adapter->getIdAttributeType() === Database::VAR_ID_INT) { $node = (int)$node; } + else { + $node = (string)$node; + } break; case self::VAR_INTEGER: $node = (int)$node; From 78a32682609eeeb24376ee707d54e5b00207f1d4 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 17 Jul 2025 16:56:50 +0300 Subject: [PATCH 13/14] Remove cast SQLlite cast --- src/Database/Adapter/SQLite.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Database/Adapter/SQLite.php b/src/Database/Adapter/SQLite.php index cc62339ac..be2c4b5f7 100644 --- a/src/Database/Adapter/SQLite.php +++ b/src/Database/Adapter/SQLite.php @@ -609,7 +609,7 @@ public function createDocument(string $collection, Document $document): Document $statment->execute(); $last = $statment->fetch(); - $document['$sequence'] = (int)$last['id']; + $document['$sequence'] = $last['id']; if (isset($stmtPermissions)) { $stmtPermissions->execute(); From 5e53fba36c382fb59cdd19305d421e1665697cbc Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 17 Jul 2025 17:00:53 +0300 Subject: [PATCH 14/14] stopOnFailure --- phpunit.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpunit.xml b/phpunit.xml index 34365d48d..2a0531cfd 100755 --- a/phpunit.xml +++ b/phpunit.xml @@ -7,7 +7,7 @@ convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" - stopOnFailure="true" + stopOnFailure="false" >