From fc72c208075814254df049c0b07b840bac69c45b Mon Sep 17 00:00:00 2001 From: amirdeljouyi Date: Fri, 3 Jul 2026 00:26:55 +0200 Subject: [PATCH] test: cover embedded document validation --- .../core/record/impl/ODocumentTest.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/core/src/test/java/com/orientechnologies/orient/core/record/impl/ODocumentTest.java b/core/src/test/java/com/orientechnologies/orient/core/record/impl/ODocumentTest.java index ce08c604414..70386431576 100755 --- a/core/src/test/java/com/orientechnologies/orient/core/record/impl/ODocumentTest.java +++ b/core/src/test/java/com/orientechnologies/orient/core/record/impl/ODocumentTest.java @@ -12,6 +12,7 @@ import com.orientechnologies.orient.core.db.OrientDB; import com.orientechnologies.orient.core.db.document.ODatabaseDocumentAbstract; import com.orientechnologies.orient.core.db.record.ridbag.ORidBag; +import com.orientechnologies.orient.core.exception.OValidationException; import com.orientechnologies.orient.core.id.ORecordId; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OProperty; @@ -93,6 +94,57 @@ public void testClearResetsFieldTypes() throws Exception { assertEquals(doc.fieldType("binary"), null); } + @Test + public void testValidateEmbeddedRejectsRecordIdValue() { + final String name = dbName + "_embeddedRid"; + ODatabaseSession db = null; + OrientDB odb = null; + try { + odb = OCreateDatabaseUtil.createDatabase(name, "memory:", OCreateDatabaseUtil.TYPE_MEMORY); + db = odb.open(name, defaultDbAdminCredentials, OCreateDatabaseUtil.NEW_ADMIN_PASSWORD); + + OClass clazz = db.getMetadata().getSchema().createClass("EmbeddedRidOwner"); + OProperty property = clazz.createProperty("embedded", OType.EMBEDDED); + + try { + ODocument.validateEmbedded(property, new ORecordId(1, 2)); + org.junit.Assert.fail("Expected embedded RecordID value to be rejected"); + } catch (OValidationException expected) { + assertTrue(expected.getMessage().contains("RecordID")); + } + } finally { + if (db != null) db.close(); + if (odb != null) { + odb.drop(name); + odb.close(); + } + } + } + + @Test + public void testValidateEmbeddedAcceptsLinkedEmbeddedDocument() { + final String name = dbName + "_embeddedLinked"; + ODatabaseSession db = null; + OrientDB odb = null; + try { + odb = OCreateDatabaseUtil.createDatabase(name, "memory:", OCreateDatabaseUtil.TYPE_MEMORY); + db = odb.open(name, defaultDbAdminCredentials, OCreateDatabaseUtil.NEW_ADMIN_PASSWORD); + + OSchema schema = db.getMetadata().getSchema(); + OClass embeddedClass = schema.createClass("EmbeddedLinkedValue"); + OClass ownerClass = schema.createClass("EmbeddedLinkedOwner"); + OProperty property = ownerClass.createProperty("embedded", OType.EMBEDDED, embeddedClass); + + ODocument.validateEmbedded(property, new ODocument(embeddedClass)); + } finally { + if (db != null) db.close(); + if (odb != null) { + odb.drop(name); + odb.close(); + } + } + } + @Test public void testResetResetsFieldTypes() throws Exception { ODocument doc = new ODocument();