Package org.firebrandocm.tests

Source Code of org.firebrandocm.tests.PersistenceOperationTest

/*
* Copyright (C) 2012 47 Degrees, LLC
* http://47deg.com
* hello@47deg.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.firebrandocm.tests;

import org.apache.commons.beanutils.PropertyUtils;
import org.firebrandocm.dao.ClassMetadata;
import org.firebrandocm.dao.Query;
import org.firebrandocm.dao.cql.clauses.Predicate;
import org.junit.BeforeClass;
import org.junit.Test;

import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.*;

import static junit.framework.Assert.*;
import static junit.framework.Assert.assertEquals;
import static org.firebrandocm.dao.cql.QueryBuilder.*;
import static org.firebrandocm.dao.cql.QueryBuilder.from;

/**
*
*/
public class PersistenceOperationTest extends HectorAbstractTestCase {

  @BeforeClass
  public static void init() throws Exception {
    //initWithClasses(FirstEntity.class, SecondEntity.class, FirstEntityCounter.class);
    initWithClasses("org.firebrandocm.tests");
  }

  /**
   *
   * @return a random string on every call
   */
  private static String rds() {
    return UUID.randomUUID().toString();
  }

  @Test
  public void testAutoGeneratedId() {
    FirstEntity entity = factory.getInstance(FirstEntity.class);
    factory.persist(entity);
    assertNotNull(entity.getId());
  }

  @Test
  public void testCount() {
    long amount = 5L;
    for (int i = 0; i < amount; i++) {
      FirstEntity entity = factory.getInstance(FirstEntity.class);
      factory.persist(entity);
    }
    long count = factory.getSingleResult(Long.class, Query.get(select(count(), from(FirstEntity.class))));
    assertEquals(count, amount);
  }

  @Test
  public void testOrder() {
    int amount = 10;
    List<FirstEntity> creationOrderedEntities = new ArrayList<FirstEntity>(amount);
    for (int i = 0; i < amount; i++) {
      FirstEntity entity = factory.getInstance(FirstEntity.class);
      factory.persist(entity);
      creationOrderedEntities.add(entity);
    }
    List<FirstEntity> allEntities = factory.getResultList(FirstEntity.class, Query.get(select(allColumns(), from(FirstEntity.class))));

    assertEquals(amount, creationOrderedEntities.size());
    assertEquals(amount, allEntities.size());
    for (int i = 0; i < amount; i++) {
      FirstEntity entity = creationOrderedEntities.get(i);
      FirstEntity other = allEntities.get(i);
      assertEquals(entity, other);
    }
  }

  @Test
  public void testMappedEntity() {
    SecondEntity secondEntity = factory.getInstance(SecondEntity.class);
    factory.persist(secondEntity);
    FirstEntity entity = factory.getInstance(FirstEntity.class);
    entity.setMappedEntity(secondEntity);
    factory.persist(entity);
    assertNotNull(entity.getId());
    assertNotNull(secondEntity.getId());
    FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId());
    assertEquals(secondEntity, loadedEntity.getMappedEntity());
    assertEquals(secondEntity.getId(), loadedEntity.getMappedEntity().getId());
  }

    @Test
    public void testMappedRecursiveEntity() {
        FirstEntity firstEntity = factory.getInstance(FirstEntity.class);
        SecondEntity secondEntity = factory.getInstance(SecondEntity.class);
        factory.persist(firstEntity);
        factory.persist(secondEntity);
        firstEntity.setMappedEntity(secondEntity);
        secondEntity.setMappedFirstEntity(firstEntity);
        factory.persist(firstEntity);
        factory.persist(secondEntity);
        assertEquals(firstEntity, secondEntity.getMappedFirstEntity());
        assertEquals(secondEntity, firstEntity.getMappedEntity());
    }

  @Test
  public void testMappedCollection() {
    int amount = 5;
    FirstEntity entity = factory.getInstance(FirstEntity.class);
    List<SecondEntity> listProperty = new ArrayList<SecondEntity>();
    for (int i = 0; i < amount; i++) {
      SecondEntity secondEntity = factory.getInstance(SecondEntity.class);
      factory.persist(secondEntity);
      listProperty.add(secondEntity);
    }
    entity.setListProperty(listProperty);
    factory.persist(entity);
    FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId());
    assertNotNull("null list loaded but expected not null", loadedEntity.getListProperty());
    assertEquals(amount, loadedEntity.getListProperty().size());
    //test loaded equals and order
    for (int i = 0; i < amount; i++) {
      assertEquals(entity.getListProperty().get(i), loadedEntity.getListProperty().get(i));
    }
  }

    @Test
    public void testEnumProperty() {
        FirstEntity firstEntity = factory.getInstance(FirstEntity.class);
        firstEntity.setTestEnum(TestEnum.A);
        factory.persist(firstEntity);
        FirstEntity loadedEntity = factory.get(FirstEntity.class, firstEntity.getId());
        assertEquals(TestEnum.A, loadedEntity.getTestEnum());
    }

  @Test
  public void testEmbeddedEntity() {
    OtherEntity otherEntity = new OtherEntity();
    otherEntity.setFirstProperty(rds());
    otherEntity.setNullProperty(null);
    FirstEntity entity = factory.getInstance(FirstEntity.class);
    entity.setOtherEntity(otherEntity);
    factory.persist(entity);
    FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId());
    assertEquals(otherEntity, loadedEntity.getOtherEntity());
    assertNull(loadedEntity.getOtherEntity().getNullProperty());
    assertNull(otherEntity.getNullProperty());
  }

  @Test
  public void testNestedEmbeddedEntity() {
    OtherEntity otherEntity = new OtherEntity();
    otherEntity.setFirstProperty(rds());
    otherEntity.setNullProperty(null);
    ThirdEntity thirdEntity = new ThirdEntity();
    thirdEntity.setSomeProperty(rds());
    otherEntity.setNestedThirdProperty(thirdEntity);
    FirstEntity entity = factory.getInstance(FirstEntity.class);
    entity.setOtherEntity(otherEntity);
    factory.persist(entity);
    FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId());
    assertEquals(otherEntity, loadedEntity.getOtherEntity());
    assertEquals(thirdEntity, loadedEntity.getOtherEntity().getNestedThirdProperty());
    assertEquals(thirdEntity.getSomeProperty(), loadedEntity.getOtherEntity().getNestedThirdProperty().getSomeProperty());
  }

  @Test
  public void testCounterIncrease() {
    long counterInitialValue = 10;
    long counterIncreaseValue = +2;
    long afterPersistCounterExpectedValue = +2;
    long afterPersistCounterIncreaseExpectedValue = 0;
    FirstEntityCounter entity = new FirstEntityCounter();
    entity.setCounterProperty(counterInitialValue);
    entity.setCounterPropertyIncreaseBy(counterIncreaseValue);
    factory.persist(entity);
    assertEquals(afterPersistCounterIncreaseExpectedValue, entity.getCounterPropertyIncreaseBy());
    FirstEntityCounter loadedEntity = factory.get(entity.getClass(), entity.getId());
    assertEquals(afterPersistCounterExpectedValue, loadedEntity.getCounterProperty());
    assertEquals(afterPersistCounterIncreaseExpectedValue, loadedEntity.getCounterPropertyIncreaseBy());
  }

  @Test
  public void testSerializedObjectColumn() {
    FirstEntity entity = new FirstEntity();
    List<Object> list = Arrays.<Object>asList("1", 2, 3.0, 4L);
    entity.setListSerializedAsBytes(new LinkedList<Object>(list));
    factory.persist(entity);
    FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId());
    assertEquals(entity.getListSerializedAsBytes(), loadedEntity.getListSerializedAsBytes());
  }

  @Test
  public void testColumnEagerAccess() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    FirstEntity firstEntity = new FirstEntity();
    firstEntity.setDescription(rds());
    factory.persist(firstEntity);
    testPropertyEagerAccess(FirstEntity.class, firstEntity.getId(), "description");
  }

  @Test
  public void testMappedEntityEagerAccess() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    FirstEntity firstEntity = new FirstEntity();
    SecondEntity secondEntity = new SecondEntity();
    factory.persist(secondEntity);
    firstEntity.setMappedEntity(secondEntity);
    factory.persist(firstEntity);
    testPropertyEagerAccess(FirstEntity.class, firstEntity.getId(), "mappedEntity");
  }

  @Test
  public void testMappedCollectionEagerAccess() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    FirstEntity firstEntity = new FirstEntity();
    List<SecondEntity> listProperty = new ArrayList<SecondEntity>();
    SecondEntity secondEntity = new SecondEntity();
    factory.persist(secondEntity);
    listProperty.add(secondEntity);
    firstEntity.setSecondEagerListProperty(listProperty);
    factory.persist(firstEntity);
    testPropertyEagerAccess(FirstEntity.class, firstEntity.getId(), "secondEagerListProperty");
  }

  @Test
  public void testColumnLazyAccess() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    FirstEntity firstEntity = new FirstEntity();
    firstEntity.setHugeDescription(rds());
    factory.persist(firstEntity);
    testPropertyLazyAccess(FirstEntity.class, firstEntity.getId(), "hugeDescription");
  }

  @Test
  public void testMappedEntityLazyAccess() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    FirstEntity firstEntity = new FirstEntity();
    SecondEntity secondEntity = new SecondEntity();
    factory.persist(secondEntity);
    firstEntity.setSecondLazyMappedEntity(secondEntity);
    factory.persist(firstEntity);
    testPropertyLazyAccess(FirstEntity.class, firstEntity.getId(), "secondLazyMappedEntity");
  }

  @Test
  public void testMappedCollectionLazyAccess() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    FirstEntity firstEntity = new FirstEntity();
    List<SecondEntity> listProperty = new ArrayList<SecondEntity>();
    SecondEntity secondEntity = new SecondEntity();
    factory.persist(secondEntity);
    listProperty.add(secondEntity);
    firstEntity.setListProperty(listProperty);
    factory.persist(firstEntity);
    testPropertyLazyAccess(FirstEntity.class, firstEntity.getId(), "listProperty");
  }

    @Test
    public void testEQByteArrayProperties() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, UnsupportedEncodingException {
        String test = UUID.randomUUID().toString();
        FirstEntity firstEntity = new FirstEntity();
        firstEntity.setSomeBytes(test.getBytes());
        factory.persist(firstEntity);
        FirstEntity loadedEntity = factory.get(FirstEntity.class, firstEntity.getId());
        assertEquals(new String(loadedEntity.getSomeBytes(), "UTF-8"), test);
    }

  @Test
  public void testEQLongIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
    testIndexedPropertyEQ(FirstEntity.class, new HashMap<String, Object>(){{
      put("phone", 123412341234L);
    }});
  }

  @Test
  public void testEQStringIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
    testIndexedPropertyEQ(FirstEntity.class, new HashMap<String, Object>(){{
      put("name", rds());
      put("description", "description'quoted");
    }});
  }

  @Test
  public void testEQDoubleIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
    testIndexedPropertyEQ(FirstEntity.class, new HashMap<String, Object>(){{
      put("score", 76.98);
    }});
  }

  @Test
  public void testRangeLongIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
    testIndexedPropertyRanges(FirstEntity.class, "phone", 1L, 0L, 2L);
  }

  @Test
  public void testRangeStringIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
    testIndexedPropertyRanges(FirstEntity.class, "name", "b", "a", "z");
  }

  @Test
  public void testRangeDoubleIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
    testIndexedPropertyRanges(FirstEntity.class, "score", 1.0, 0.0, 2.0);
  }

  @Test
  public void testRangeDateIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
    Date date = new Date();
    testIndexedPropertyRanges(FirstEntity.class, "date", date, new Date(date.getTime() - 1000), new Date(date.getTime() + 1000));
  }

  @Test
  public void testNamedQuery() {
    assertNotNull(ClassMetadata.getNullSafeNamedQuery(FirstEntity.QUERY_ALL_ENTITIES));
    FirstEntity firstEntity = new FirstEntity();
    factory.persist(firstEntity);
    FirstEntity loadedEntity = factory.getSingleResult(FirstEntity.class, Query.get(FirstEntity.QUERY_ALL_ENTITIES));
    assertEquals(loadedEntity, firstEntity);
  }

  @Test
  public void testNamedQueryWithParams() {
    assertNotNull(ClassMetadata.getNullSafeNamedQuery(FirstEntity.QUERY_ALL_ENTITIES_WITH_PARAMS));
    final FirstEntity firstEntity = new FirstEntity();
    factory.persist(firstEntity);
    FirstEntity loadedEntity = factory.getSingleResult(FirstEntity.class, Query.get(FirstEntity.QUERY_ALL_ENTITIES_WITH_PARAMS, new HashMap<String, Object>(){{
      put("key", firstEntity.getId());
    }}));
    assertEquals(loadedEntity, firstEntity);
  }

  @Test
  public void testPrePersistListener() {
    final FirstEntity firstEntity = new FirstEntity();
    factory.persist(firstEntity);
    assertNotNull(firstEntity.getPrePersistProperty());
  }

  @Test
  public void testDeletion() {
    FirstEntity firstEntity = new FirstEntity();
    firstEntity.setName(rds());
    factory.persist(firstEntity);
    List<?> results = factory.getResultList(FirstEntity.class, Query.get(select(
        allColumns(),
        from(FirstEntity.class)
    )));
    assertEquals(1, results.size());
    factory.remove(firstEntity);
    results = factory.getResultList(FirstEntity.class, Query.get(select(
        allColumns(),
        from(FirstEntity.class)
    )));
    assertEquals(0, results.size());
  }

  @Test
  public void testMappedCounter() {
    FirstEntity entity = new FirstEntity();
    entity.setName(rds());
    factory.persist(entity);
    FirstEntityCounter counter = new FirstEntityCounter();
    factory.persist(counter);
    SecondEntity secondEntity = new SecondEntity();
    factory.persist(secondEntity);
    entity.setCounter(counter);
    entity.setMappedEntity(secondEntity);
    factory.persist(entity);
    FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId());
    assertNotNull(loadedEntity.getCounter());
    assertEquals(counter, loadedEntity.getCounter());
    assertEquals(entity.getCounter(), loadedEntity.getCounter());
  }

  @Test
  public void testPagination() {
    //todo implement composite types once supported in CQL in 1.1 for pagination and ordering support via column composite names and wide rows.
    int amount = 10;
    int start  = 2;
    int limit = 5;
    String startKey = null;
    String endKey = null;
    List<String> allKeys = new ArrayList<String>(amount);
    for (int i = 0; i < amount; i++) {
      FirstEntity entity = new FirstEntity();
      factory.persist(entity);
      if (i == start) {
        startKey = entity.getId();
      }

      if (i == start + limit - 1) {
        endKey = entity.getId();
      }
      allKeys.add(entity.getId());
    }
    Query query = Query.get(select(allColumns(), from(FirstEntity.class), where(range(startKey, endKey)), limit(limit)));
    log.debug(query.getQuery());
    List<FirstEntity> results = factory.getResultList(FirstEntity.class, query);
    assertEquals(limit, results.size());
    assertEquals(startKey, results.get(0).getId());
    assertEquals(endKey, results.get(results.size() - 1).getId());

    query = Query.get(select(allColumns(), from(FirstEntity.class), where(startAt(startKey)), limit(limit)));
    log.debug(query.getQuery());
    results = factory.getResultList(FirstEntity.class, query);
    assertEquals(limit, results.size());
    assertEquals(startKey, results.get(0).getId());
    assertEquals(endKey, results.get(results.size() - 1).getId());
  }


  private void testIndexedPropertyEQ(Class<?> entityClass, Map<String, Object> params) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
    Object entity = factory.getInstance(entityClass);
    List<Predicate> predicates = new ArrayList<Predicate>();
    for (Map.Entry<String, Object> entry : params.entrySet()) {
      String property = entry.getKey();
      Object value = entry.getValue();
      PropertyUtils.setProperty(entity, property, value);
      predicates.add(eq(property, value));
    }
    factory.persist(entity);
    Object loadedEntity = factory.getSingleResult(entityClass, Query.get(select(
        allColumns(),
        from(entityClass),
        where(predicates.toArray(new Predicate[predicates.size()])))
    ));
    assertEquals(entity, loadedEntity);
  }

  private void testIndexedPropertyRanges(Class<?> entityClass, String property, Object value, Object lesser, Object upper) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
    Object entity = factory.getInstance(entityClass);
    PropertyUtils.setProperty(entity, property, value);
    factory.persist(entity);
    Object loadedEntity = factory.getSingleResult(entityClass, Query.get(select(
        allColumns(),
        from(entityClass),
        where(type(FirstEntity.class), gt(property, lesser))
    )));
    assertEquals(entity, loadedEntity);
    loadedEntity = factory.getSingleResult(entityClass, Query.get(select(
        allColumns(),
        from(entityClass),
        where(type(FirstEntity.class), gte(property, lesser)))
    ));
    assertEquals(entity, loadedEntity);
    loadedEntity = factory.getSingleResult(entityClass, Query.get(select(
        allColumns(),
        from(entityClass),
        where(type(FirstEntity.class), gte(property, value))
    )));
    assertEquals(entity, loadedEntity);
    loadedEntity = factory.getSingleResult(entityClass, Query.get(select(
        allColumns(),
        from(entityClass),
        where(type(FirstEntity.class), lt(property, upper))
    )));
    assertEquals(entity, loadedEntity);
    loadedEntity = factory.getSingleResult(entityClass, Query.get(select(
        allColumns(),
        from(entityClass),
        where(type(FirstEntity.class), lte(property, upper))
    )));
    assertEquals(entity, loadedEntity);
    loadedEntity = factory.getSingleResult(entityClass, Query.get(select(
        allColumns(),
        from(entityClass),
        where(type(FirstEntity.class), lte(property, value))
    )));
    assertEquals(entity, loadedEntity);
    loadedEntity = factory.getSingleResult(entityClass, Query.get(select(
        allColumns(),
        from(entityClass),
        where(type(FirstEntity.class), between(property, lesser, upper))
    )));
    assertEquals(entity, loadedEntity);
  }

  private void testPropertyLazyAccess(Class<?> entityClass, String id, String property) throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    Object loadedEntity = factory.get(entityClass, id);
    Field privateField = entityClass.getDeclaredField(property);
    privateField.setAccessible(true);
    Object fieldValue = privateField.get(loadedEntity);
    assertTrue("expected null or size 0 since getter has not been invoked due to lazy loading", isNullPropertyOrEmptyCollection(fieldValue));
    Object value = PropertyUtils.getProperty(loadedEntity, property);
    assertTrue("expected not null or size > 0  after reading property via getter and property has been lazy loaded", !isNullPropertyOrEmptyCollection(value));
    fieldValue = privateField.get(loadedEntity);
    value = PropertyUtils.getProperty(loadedEntity, property);
    assertTrue("expected not null or size > 0  after reading property via getter and property has been lazy loaded", !isNullPropertyOrEmptyCollection(fieldValue));
    assertSame("expected same memory reference since collection was already loaded", fieldValue, value);
  }

  private void testPropertyEagerAccess(Class<?> entityClass, String id, String property) throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    Object loadedEntity = factory.get(entityClass, id);
    Field privateField = entityClass.getDeclaredField(property);
    privateField.setAccessible(true);
    Object fieldValue = privateField.get(loadedEntity);
    assertTrue("expected not null or size > 0 since collection should be eagerly loaded", !isNullPropertyOrEmptyCollection(fieldValue));
    Object value = PropertyUtils.getProperty(loadedEntity, property);
    assertSame("expected same memory reference since collection was already loaded", fieldValue, value);
  }

  private static boolean isNullPropertyOrEmptyCollection(Object value) {
    boolean match = value == null;
    if (!match) {
      if (Collection.class.isAssignableFrom(value.getClass())) {
        match = ((Collection)value).size() == 0;
      }
    }
    return match;
  }

  @Test
  public void testPropertyEquality() {
    String string = rds();
    Date date = new Date();
    Long longNumber = 3L;
    Double score = 99.0;
    SecondEntity secondEntity = factory.getInstance(SecondEntity.class);
    factory.persist(secondEntity);

    FirstEntity entity = factory.getInstance(FirstEntity.class);
    entity.setName(string);
    entity.setDate(date);
    entity.setPhone(longNumber);
    entity.setScore(score);
    entity.setMappedEntity(secondEntity);
    factory.persist(entity);

    assertNotNull(entity.getId());

    FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId());
    assertEquals(string, loadedEntity.getName());
    assertEquals(date, loadedEntity.getDate());
    assertEquals(longNumber, loadedEntity.getPhone());
    assertEquals(score, loadedEntity.getScore());
    assertEquals(secondEntity, loadedEntity.getMappedEntity());
  }

  @Test
  public void testPersistence() throws Exception {

    FirstEntity a = factory.getInstance(FirstEntity.class);
    a.setName(rds());
    a.setDescription(rds());
    a.setPhone(1L);
    a.setScore(3.0);
    a.setDate(new Date());
    a.setOtherDate(new Date(a.getDate().getTime() - 1000));
    a.setChangedColumnName(rds());
    factory.persist(a);


    //associations
    OtherEntity c = factory.getInstance(OtherEntity.class);
    c.setFirstProperty(rds());

    ThirdEntity thirdEntity = factory.getInstance(ThirdEntity.class);
    thirdEntity.setSomeProperty(rds());

    FourthEntity fourthEntity = factory.getInstance(FourthEntity.class);
    fourthEntity.setSomeProperty(rds());

    thirdEntity.setFourthEntity(fourthEntity);

    c.setNestedThirdProperty(thirdEntity);

    a.setOtherEntity(c);

    //mapped associations
    SecondEntity x = factory.getInstance(SecondEntity.class);
    x.setName(rds());
    factory.persist(x);


    SecondEntity z = factory.getInstance(SecondEntity.class);
    z.setName(rds());



    ThirdEntity embedEntityInRecursiveMappedEntity = new ThirdEntity();
    embedEntityInRecursiveMappedEntity.setSomeProperty(rds());

    z.setEmbedEntityInRecursiveMappedEntity(embedEntityInRecursiveMappedEntity);
    x.setRecursiveMapped(z);
    factory.persist(z);
    factory.persist(x);

    a.setMappedEntity(x);

    factory.persist(a);


    //log.debug("created id is: " + a.getId());
    FirstEntity b = factory.get(FirstEntity.class, a.getId());
    assertNotNull(b);
    assertEquals(b.getId(), a.getId());
    assertEquals(b.getName(), a.getName());
    assertEquals(b.getDescription(), a.getDescription());
    assertEquals(b.getPhone(), a.getPhone());
    assertEquals(b.getScore(), a.getScore());
    assertEquals(b.getDate(), a.getDate());
    assertEquals(b.getOtherDate(), a.getOtherDate());
    assertEquals(b.getChangedColumnName(), a.getChangedColumnName());
    assertTrue(b.getOtherDate().before(a.getDate()));
    assertNotNull(b.getOtherEntity());
    assertNotNull(a.getOtherEntity());
    assertNotNull(a.getMappedEntity());
    assertNotNull(b.getMappedEntity());
    assertNotNull(a.getMappedEntity().getName());
    assertNotNull(b.getMappedEntity().getName());
    assertNotNull(a.getMappedEntity().getRecursiveMapped());
    assertNotNull(b.getMappedEntity().getRecursiveMapped());
    assertNotNull(a.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity());
    assertNotNull(b.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity());
    assertNotNull(a.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity().getSomeProperty());
    assertNotNull(b.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity().getSomeProperty());
    assertEquals(b.getMappedEntity().getName(), a.getMappedEntity().getName());
    assertNotNull(a.getOtherEntity().getNestedThirdProperty());
    assertNotNull(b.getOtherEntity().getNestedThirdProperty());
    assertNotNull(a.getOtherEntity().getNestedThirdProperty().getFourthEntity());
    assertNotNull(b.getOtherEntity().getNestedThirdProperty().getFourthEntity());
    assertNull(a.getOtherEntity().getNestedThirdProperty().getFourthEntityNull());
    assertNull(b.getOtherEntity().getNestedThirdProperty().getFourthEntityNull());
    assertNotNull(a.getOtherEntity());
    assertEquals(b.getOtherEntity(), a.getOtherEntity());
    assertEquals(b.getMappedEntity(), a.getMappedEntity());
    assertEquals(b.getMappedEntity().getRecursiveMapped(), a.getMappedEntity().getRecursiveMapped());
    assertEquals(b.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity(), a.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity());
    assertEquals(b.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity().getSomeProperty(), a.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity().getSomeProperty());
    assertEquals(b.getMappedEntity().getId(), x.getId());
    assertEquals(b.getOtherEntity().getNestedThirdProperty(), a.getOtherEntity().getNestedThirdProperty());
    assertEquals(b.getOtherEntity().getNestedThirdProperty().getFourthEntity(), a.getOtherEntity().getNestedThirdProperty().getFourthEntity());
    assertEquals(b, a);

    String newName = "nameChanged";
    double score = 99.0;
    factory.executeQuery(Integer.class,
        Query.get(update(
            columnFamily("FirstEntity"),
            set(
                assign("name", newName),
                assign("score", score)
            ),
            where(
                keyIn(a.getId())
            )
        ))
    );
    FirstEntity loadedAfterUpdate = factory.get(FirstEntity.class, a.getId());
    assertEquals(newName, loadedAfterUpdate.getName());
    assertEquals(score, loadedAfterUpdate.getScore());

    List<FirstEntity> results = factory.getResultList(FirstEntity.class, Query.get(select(
        allColumns(),
        from("FirstEntity")
    )));
    assertEquals(1, results.size());
  }


}
TOP

Related Classes of org.firebrandocm.tests.PersistenceOperationTest

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.