Package com.orientechnologies.orient.core.metadata.schema

Source Code of com.orientechnologies.orient.core.metadata.schema.OClassImplTest

package com.orientechnologies.orient.core.metadata.schema;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertTrue;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.core.exception.OSchemaException;
import com.orientechnologies.orient.core.record.impl.ODocument;

public class OClassImplTest {

  private ODatabaseDocumentTx db;

  @BeforeMethod
  public void setUp() {
    db = new ODatabaseDocumentTx("memory:" + OClassImplTest.class.getSimpleName());
    if (db.exists()) {
      db.open("admin", "admin");
    } else
      db.create();
  }

  @AfterMethod
  public void after() {
    db.close();
  }

  @AfterClass
  public void afterClass() {
    db.open("admin", "admin");
    db.drop();
  }

  /**
   * If class was not abstract and we call {@code setAbstract(false)} clusters should not be changed.
   *
   * @throws Exception
   */
  @Test
  public void testSetAbstractClusterNotChanged() throws Exception {
    final OSchema oSchema = db.getMetadata().getSchema();

    OClass oClass = oSchema.createClass("Test1");
    final int oldClusterId = oClass.getDefaultClusterId();

    oClass.setAbstract(false);

    Assert.assertEquals(oClass.getDefaultClusterId(), oldClusterId);
  }

  /**
   * If class was abstract and we call {@code setAbstract(false)} a new non default cluster should be created.
   *
   * @throws Exception
   */
  @Test
  public void testSetAbstractShouldCreateNewClusters() throws Exception {
    final OSchema oSchema = db.getMetadata().getSchema();

    OClass oClass = oSchema.createAbstractClass("Test2");

    oClass.setAbstract(false);

    Assert.assertFalse(oClass.getDefaultClusterId() == -1);
    Assert.assertFalse(oClass.getDefaultClusterId() == db.getDefaultClusterId());
  }

  @Test(expectedExceptions = OSchemaException.class)
  public void testCreatePropertyFailOnExistingData() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test3");

    ODocument document = new ODocument("Test3");

    document.field("some", "String");
    db.save(document);
    db.commit();
    oClass.createProperty("some", OType.INTEGER);

  }

  @Test(expectedExceptions = OSchemaException.class)
  public void testCreatePropertyFailOnExistingDataLinkList() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test4");

    ODocument document = new ODocument("Test4");
    ArrayList<ODocument> list = new ArrayList<ODocument>();
    list.add(new ODocument("Test4"));
    document.field("some", list);
    db.save(document);
    db.commit();
    oClass.createProperty("some", OType.EMBEDDEDLIST);

  }

  @Test(expectedExceptions = OSchemaException.class)
  public void testCreatePropertyFailOnExistingDataLinkSet() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test5");

    ODocument document = new ODocument("Test5");
    Set<ODocument> list = new HashSet<ODocument>();
    list.add(new ODocument("Test5"));
    document.field("somelinkset", list);
    db.save(document);
    db.commit();
    oClass.createProperty("somelinkset", OType.EMBEDDEDSET);

  }

  @Test(expectedExceptions = OSchemaException.class)
  public void testCreatePropertyFailOnExistingDataEmbeddetSet() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test6");

    ODocument document = new ODocument("Test6");
    Set<ODocument> list = new HashSet<ODocument>();
    list.add(new ODocument("Test6"));
    document.field("someembededset", list, OType.EMBEDDEDSET);
    db.save(document);
    db.commit();
    oClass.createProperty("someembededset", OType.LINKSET);

  }

  @Test(expectedExceptions = OSchemaException.class)
  public void testCreatePropertyFailOnExistingDataEmbeddedList() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test7");

    ODocument document = new ODocument("Test7");
    List<ODocument> list = new ArrayList<ODocument>();
    list.add(new ODocument("Test7"));
    document.field("someembeddedlist", list, OType.EMBEDDEDLIST);
    db.save(document);
    db.commit();
    oClass.createProperty("someembeddedlist", OType.LINKLIST);

  }

  @Test(expectedExceptions = OSchemaException.class)
  public void testCreatePropertyFailOnExistingDataEmbeddedMap() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test8");

    ODocument document = new ODocument("Test8");
    Map<String, ODocument> map = new HashMap<String, ODocument>();
    map.put("test", new ODocument("Test8"));
    document.field("someembededmap", map, OType.EMBEDDEDMAP);
    db.save(document);
    db.commit();
    oClass.createProperty("someembededmap", OType.LINKMAP);

  }

  @Test(expectedExceptions = OSchemaException.class)
  public void testCreatePropertyFailOnExistingDataLinkMap() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test9");

    ODocument document = new ODocument("Test9");
    Map<String, ODocument> map = new HashMap<String, ODocument>();
    map.put("test", new ODocument("Test8"));
    document.field("somelinkmap", map, OType.LINKMAP);
    db.save(document);
    db.commit();
    oClass.createProperty("somelinkmap", OType.EMBEDDEDMAP);

  }

  @Test
  public void testCreatePropertyCastable() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test10");

    ODocument document = new ODocument("Test10");
    // TODO add boolan and byte
    document.field("test1", (short) 1);
    document.field("test2", 1);
    document.field("test3", 4L);
    document.field("test4", 3.0f);
    document.field("test5", 3.0D);
    document.field("test6", 4);
    db.save(document);
    db.commit();
    oClass.createProperty("test1", OType.INTEGER);
    oClass.createProperty("test2", OType.LONG);
    oClass.createProperty("test3", OType.DOUBLE);
    oClass.createProperty("test4", OType.DOUBLE);
    oClass.createProperty("test5", OType.DECIMAL);
    oClass.createProperty("test6", OType.FLOAT);

    ODocument doc1 = db.load(document.getIdentity());
    assertEquals(doc1.fieldType("test1"), OType.INTEGER);
    assertTrue(doc1.field("test1") instanceof Integer);
    assertEquals(doc1.fieldType("test2"), OType.LONG);
    assertTrue(doc1.field("test2") instanceof Long);
    assertEquals(doc1.fieldType("test3"), OType.DOUBLE);
    assertTrue(doc1.field("test3") instanceof Double);
    assertEquals(doc1.fieldType("test4"), OType.DOUBLE);
    assertTrue(doc1.field("test4") instanceof Double);
    assertEquals(doc1.fieldType("test5"), OType.DECIMAL);
    assertTrue(doc1.field("test5") instanceof BigDecimal);
    assertEquals(doc1.fieldType("test6"), OType.FLOAT);
    assertTrue(doc1.field("test6") instanceof Float);
  }

  @Test
  public void testCreatePropertyCastableColection() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test11");

    ODocument document = new ODocument("Test11");
    document.field("test1", new ArrayList<ODocument>(), OType.EMBEDDEDLIST);
    document.field("test2", new ArrayList<ODocument>(), OType.LINKLIST);
    document.field("test3", new HashSet<ODocument>(), OType.EMBEDDEDSET);
    document.field("test4", new HashSet<ODocument>(), OType.LINKSET);
    document.field("test5", new HashMap<String, ODocument>(), OType.EMBEDDEDMAP);
    document.field("test6", new HashMap<String, ODocument>(), OType.LINKMAP);
    db.save(document);
    db.commit();
    oClass.createProperty("test1", OType.LINKLIST);
    oClass.createProperty("test2", OType.EMBEDDEDLIST);
    oClass.createProperty("test3", OType.LINKSET);
    oClass.createProperty("test4", OType.EMBEDDEDSET);
    oClass.createProperty("test5", OType.LINKMAP);
    oClass.createProperty("test6", OType.EMBEDDEDMAP);

    ODocument doc1 = db.load(document.getIdentity());
    assertEquals(doc1.fieldType("test1"), OType.LINKLIST);
    assertEquals(doc1.fieldType("test2"), OType.EMBEDDEDLIST);
    assertEquals(doc1.fieldType("test3"), OType.LINKSET);
    assertEquals(doc1.fieldType("test4"), OType.EMBEDDEDSET);
    assertEquals(doc1.fieldType("test5"), OType.LINKMAP);
    assertEquals(doc1.fieldType("test6"), OType.EMBEDDEDMAP);

  }

  @Test
  public void testCreatePropertyIdKeep() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test12");
    OProperty prop = oClass.createProperty("test2", OType.STRING);
    Integer id = prop.getId();
    oClass.dropProperty("test2");
    prop = oClass.createProperty("test2", OType.STRING);
    assertEquals(id, prop.getId());
  }

  @Test
  public void testRenameProperty() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test13");
    OProperty prop = oClass.createProperty("test1", OType.STRING);
    Integer id = prop.getId();
    prop.setName("test2");
    assertNotEquals(id, prop.getId());
  }

  @Test
  public void testChangeTypeProperty() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test14");
    OProperty prop = oClass.createProperty("test1", OType.SHORT);
    Integer id = prop.getId();
    prop.setType(OType.INTEGER);
    assertNotEquals(id, prop.getId());
  }

  @Test
  public void testRenameBackProperty() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test15");
    OProperty prop = oClass.createProperty("test1", OType.STRING);
    Integer id = prop.getId();
    prop.setName("test2");
    assertNotEquals(id, prop.getId());
    prop.setName("test1");
    assertEquals(id, prop.getId());
  }

  @Test(expectedExceptions = IllegalArgumentException.class)
  public void testSetUncastableType() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test16");
    OProperty prop = oClass.createProperty("test1", OType.STRING);
    prop.setType(OType.INTEGER);
  }

  @Test
  public void testFindById() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test17");
    OProperty prop = oClass.createProperty("testaaa", OType.STRING);
    OGlobalProperty global = oSchema.getGlobalPropertyById(prop.getId());

    assertEquals(prop.getId(), global.getId());
    assertEquals(prop.getName(), global.getName());
    assertEquals(prop.getType(), global.getType());
  }

  @Test
  public void testFindByIdDrop() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test18");
    OProperty prop = oClass.createProperty("testaaa", OType.STRING);
    Integer id = prop.getId();
    oClass.dropProperty("testaaa");
    OGlobalProperty global = oSchema.getGlobalPropertyById(id);

    assertEquals(id, global.getId());
    assertEquals("testaaa", global.getName());
    assertEquals(OType.STRING, global.getType());
  }

  @Test
  public void testChangePropertyTypeCastable() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test19");

    oClass.createProperty("test1", OType.SHORT);
    oClass.createProperty("test2", OType.INTEGER);
    oClass.createProperty("test3", OType.LONG);
    oClass.createProperty("test4", OType.FLOAT);
    oClass.createProperty("test5", OType.DOUBLE);
    oClass.createProperty("test6", OType.INTEGER);

    ODocument document = new ODocument("Test19");
    // TODO add boolan and byte
    document.field("test1", (short) 1);
    document.field("test2", 1);
    document.field("test3", 4L);
    document.field("test4", 3.0f);
    document.field("test5", 3.0D);
    document.field("test6", 4);
    db.save(document);
    db.commit();

    oClass.getProperty("test1").setType(OType.INTEGER);
    oClass.getProperty("test2").setType(OType.LONG);
    oClass.getProperty("test3").setType(OType.DOUBLE);
    oClass.getProperty("test4").setType(OType.DOUBLE);
    oClass.getProperty("test5").setType(OType.DECIMAL);
    oClass.getProperty("test6").setType(OType.FLOAT);

    ODocument doc1 = db.load(document.getIdentity());
    assertEquals(doc1.fieldType("test1"), OType.INTEGER);
    assertTrue(doc1.field("test1") instanceof Integer);
    assertEquals(doc1.fieldType("test2"), OType.LONG);
    assertTrue(doc1.field("test2") instanceof Long);
    assertEquals(doc1.fieldType("test3"), OType.DOUBLE);
    assertTrue(doc1.field("test3") instanceof Double);
    assertEquals(doc1.fieldType("test4"), OType.DOUBLE);
    assertTrue(doc1.field("test4") instanceof Double);
    assertEquals(doc1.fieldType("test5"), OType.DECIMAL);
    assertTrue(doc1.field("test5") instanceof BigDecimal);
    assertEquals(doc1.fieldType("test6"), OType.FLOAT);
    assertTrue(doc1.field("test6") instanceof Float);
  }

  @Test
  public void testChangePropertyName() {
    final OSchema oSchema = db.getMetadata().getSchema();
    OClass oClass = oSchema.createClass("Test20");

    oClass.createProperty("test1", OType.SHORT);
    oClass.createProperty("test2", OType.INTEGER);
    oClass.createProperty("test3", OType.LONG);
    oClass.createProperty("test4", OType.FLOAT);
    oClass.createProperty("test5", OType.DOUBLE);
    oClass.createProperty("test6", OType.INTEGER);

    ODocument document = new ODocument("Test20");
    // TODO add boolan and byte
    document.field("test1", (short) 1);
    document.field("test2", 1);
    document.field("test3", 4L);
    document.field("test4", 3.0f);
    document.field("test5", 3.0D);
    document.field("test6", 4);
    db.save(document);
    db.commit();

    oClass.getProperty("test1").setName("test1a");
    oClass.getProperty("test2").setName("test2a");
    oClass.getProperty("test3").setName("test3a");
    oClass.getProperty("test4").setName("test4a");
    oClass.getProperty("test5").setName("test5a");
    oClass.getProperty("test6").setName("test6a");

    ODocument doc1 = db.load(document.getIdentity());
    assertEquals(doc1.fieldType("test1a"), OType.SHORT);
    assertTrue(doc1.field("test1a") instanceof Short);
    assertEquals(doc1.fieldType("test2a"), OType.INTEGER);
    assertTrue(doc1.field("test2a") instanceof Integer);
    assertEquals(doc1.fieldType("test3a"), OType.LONG);
    assertTrue(doc1.field("test3a") instanceof Long);
    assertEquals(doc1.fieldType("test4a"), OType.FLOAT);
    assertTrue(doc1.field("test4a") instanceof Float);
    assertEquals(doc1.fieldType("test5a"), OType.DOUBLE);
    assertTrue(doc1.field("test5") instanceof Double);
    assertEquals(doc1.fieldType("test6a"), OType.INTEGER);
    assertTrue(doc1.field("test6a") instanceof Integer);
  }

}
TOP

Related Classes of com.orientechnologies.orient.core.metadata.schema.OClassImplTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.