package com.orientechnologies.orient.core.metadata.schema;
import com.orientechnologies.orient.core.db.document.ODatabaseDocument;
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.core.exception.OSchemaException;
import com.orientechnologies.orient.core.sql.OCommandSQL;
import org.junit.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.junit.Assert.assertNotNull;
import static org.testng.AssertJUnit.*;
public class AlterPropertyTest {
private ODatabaseDocument db;
@BeforeMethod
public void before() {
db = new ODatabaseDocumentTx("memory:" + AlterPropertyTest.class.getSimpleName());
db.create();
}
@AfterMethod
public void after() {
db.drop();
}
@Test
public void testPropertyRenaming() {
OSchema schema = db.getMetadata().getSchema();
OClass classA = schema.createClass("TestPropertyRenaming");
OProperty property = classA.createProperty("propertyOld", OType.STRING);
assertEquals(property, classA.getProperty("propertyOld"));
assertNull(classA.getProperty("propertyNew"));
property.setName("propertyNew");
assertNull(classA.getProperty("propertyOld"));
assertEquals(property, classA.getProperty("propertyNew"));
}
@Test
public void testPropertyRenamingReload() {
OSchema schema = db.getMetadata().getSchema();
OClass classA = schema.createClass("TestPropertyRenaming");
OProperty property = classA.createProperty("propertyOld", OType.STRING);
assertEquals(property, classA.getProperty("propertyOld"));
assertNull(classA.getProperty("propertyNew"));
property.setName("propertyNew");
schema.reload();
classA = schema.getClass("TestPropertyRenaming");
assertNull(classA.getProperty("propertyOld"));
assertEquals(property, classA.getProperty("propertyNew"));
}
@Test
public void testLinkedMapPropertyLinkedType() {
OSchema schema = db.getMetadata().getSchema();
OClass classA = schema.createClass("TestMapProperty");
try {
classA.createProperty("propertyMap", OType.LINKMAP, OType.STRING);
fail("create linkmap property should not allow linked type");
} catch (OSchemaException e) {
}
OProperty prop = classA.getProperty("propertyMap");
assertNull(prop);
}
@Test
public void testLinkedMapPropertyLinkedClass() {
OSchema schema = db.getMetadata().getSchema();
OClass classA = schema.createClass("TestMapProperty");
OClass classLinked = schema.createClass("LinkedClass");
try {
classA.createProperty("propertyString", OType.STRING, classLinked);
fail("create linkmap property should not allow linked type");
} catch (OSchemaException e) {
}
OProperty prop = classA.getProperty("propertyString");
assertNull(prop);
}
@Test
public void testRemoveLinkedClass() {
OSchema schema = db.getMetadata().getSchema();
OClass classA = schema.createClass("TestRemoveLinkedClass");
OClass classLinked = schema.createClass("LinkedClass");
OProperty prop = classA.createProperty("propertyLink", OType.LINK, classLinked);
assertNotNull(prop.getLinkedClass());
prop.setLinkedClass(null);
assertNull(prop.getLinkedClass());
}
@Test
public void testRemoveLinkedClassSQL() {
OSchema schema = db.getMetadata().getSchema();
OClass classA = schema.createClass("TestRemoveLinkedClass");
OClass classLinked = schema.createClass("LinkedClass");
OProperty prop = classA.createProperty("propertyLink", OType.LINK, classLinked);
assertNotNull(prop.getLinkedClass());
db.command(new OCommandSQL("alter property TestRemoveLinkedClass.propertyLink linkedclass null")).execute();
assertNull(prop.getLinkedClass());
}
@Test
public void testMax() {
OSchema schema = db.getMetadata().getSchema();
OClass classA = schema.createClass("TestWrongMax");
OProperty prop = classA.createProperty("dates", OType.EMBEDDEDLIST, OType.DATE);
db.command(new OCommandSQL("alter property TestWrongMax.dates max 2016-05-25")).execute();
try {
db.command(new OCommandSQL("alter property TestWrongMax.dates max '2016-05-25'")).execute();
Assert.fail();
} catch (Exception e) {
}
}
@Test
public void testAlterPropertyWithDot() {
OSchema schema = db.getMetadata().getSchema();
db.command(new OCommandSQL("create class testAlterPropertyWithDot")).execute();
db.command(new OCommandSQL("create property testAlterPropertyWithDot.`a.b` STRING")).execute();
schema.reload();
Assert.assertNotNull(schema.getClass("testAlterPropertyWithDot").getProperty("a.b"));
db.command(new OCommandSQL("alter property testAlterPropertyWithDot.`a.b` name c")).execute();
schema.reload();
Assert.assertNull(schema.getClass("testAlterPropertyWithDot").getProperty("a.b"));
Assert.assertNotNull(schema.getClass("testAlterPropertyWithDot").getProperty("c"));
}
}