Skip to content

Commit 2e8576e

Browse files
added validation check in createDocuments
1 parent b6541a9 commit 2e8576e

2 files changed

Lines changed: 52 additions & 9 deletions

File tree

src/Database/Database.php

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4534,15 +4534,17 @@ public function createDocuments(
45344534

45354535
$document = $this->encode($collection, $document);
45364536

4537-
$validator = new Structure(
4538-
$collection,
4539-
$this->adapter->getIdAttributeType(),
4540-
$this->adapter->getMinDateTime(),
4541-
$this->adapter->getMaxDateTime(),
4542-
$this->adapter->getSupportForAttributes()
4543-
);
4544-
if (!$validator->isValid($document)) {
4545-
throw new StructureException($validator->getDescription());
4537+
if ($this->validate) {
4538+
$validator = new Structure(
4539+
$collection,
4540+
$this->adapter->getIdAttributeType(),
4541+
$this->adapter->getMinDateTime(),
4542+
$this->adapter->getMaxDateTime(),
4543+
$this->adapter->getSupportForAttributes()
4544+
);
4545+
if (!$validator->isValid($document)) {
4546+
throw new StructureException($validator->getDescription());
4547+
}
45464548
}
45474549

45484550
if ($this->resolveRelationships) {

tests/e2e/Adapter/Scopes/DocumentTests.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6185,4 +6185,45 @@ public function testCreateUpdateDocumentsMismatch(): void
61856185
$database->deleteCollection($colName);
61866186
}
61876187

6188+
public function testBypassStructureWithSupportForAttributes(): void
6189+
{
6190+
/** @var Database $database */
6191+
$database = static::getDatabase();
6192+
6193+
$collectionId = 'successive_update_single';
6194+
Authorization::cleanRoles();
6195+
Authorization::setRole(Role::any()->toString());
6196+
6197+
$database->createCollection($collectionId);
6198+
$database->createAttribute($collectionId, 'attrA', Database::VAR_STRING, 50, true);
6199+
$database->createAttribute($collectionId, 'attrB', Database::VAR_STRING, 50, true);
6200+
6201+
// bypass required
6202+
$database->disableValidation();
6203+
6204+
$permissions = [Permission::read(Role::any()), Permission::write(Role::any()), Permission::update(Role::any()), Permission::delete(Role::any())];
6205+
$docs = $database->createDocuments($collectionId, [
6206+
new Document(['attrA' => null,'attrB' => 'B','$permissions' => $permissions])
6207+
]);
6208+
6209+
$docs = $database->find($collectionId);
6210+
foreach ($docs as $doc) {
6211+
$this->assertArrayHasKey('attrA', $doc->getAttributes());
6212+
$this->assertNull($doc->getAttribute('attrA'));
6213+
$this->assertEquals('B', $doc->getAttribute('attrB'));
6214+
}
6215+
// reset
6216+
$database->enableValidation();
6217+
6218+
try {
6219+
$database->createDocuments($collectionId, [
6220+
new Document(['attrA' => null,'attrB' => 'B','$permissions' => $permissions])
6221+
]);
6222+
$this->fail('Failed to throw exception');
6223+
} catch (Exception $e) {
6224+
$this->assertInstanceOf(StructureException::class, $e);
6225+
}
6226+
6227+
$database->deleteCollection($collectionId);
6228+
}
61886229
}

0 commit comments

Comments
 (0)