package org.nutz.dao.test.entity;
import org.junit.Test;
import static org.junit.Assert.*;
import org.nutz.dao.DaoException;
import org.nutz.dao.entity.Entity;
import org.nutz.dao.entity.MappingField;
import org.nutz.dao.impl.entity.field.ManyLinkField;
import org.nutz.dao.impl.entity.field.ManyManyLinkField;
import org.nutz.dao.test.DaoCase;
import org.nutz.dao.test.meta.Base;
import org.nutz.dao.test.meta.Pet;
import org.nutz.dao.test.meta.Platoon;
import org.nutz.dao.test.normal.Pet2;
public class EntityParsingTest extends DaoCase {
private <T> Entity<T> en(Class<T> type) {
return dao.getEntity(type);
}
@Test
public void test_pk_and_name_in_same_pojo() {
Entity<TO6> en = en(TO6.class);
assertEquals(2, en.getCompositePKFields().size());
assertEquals("id", en.getNameField().getName());
}
@Test
public void test_extends_tables_name() {
Entity<?> en = en(Pet.class);
Entity<?> en2 = en(Pet2.class);
assertEquals(en.getTableName(), en2.getTableName());
assertEquals(en.getViewName(), en2.getViewName());
}
@Test
public void test_override_field() {
Entity<?> en = en(Pet2.class);
MappingField ef = en.getField("nickName");
assertEquals("alias", ef.getColumnName());
assertEquals(1, en.cloneBeforeInsertMacroes().size());
}
@Test
public void eval_manys() {
Entity<?> en = en(Base.class);
ManyLinkField link = (ManyLinkField) en.getLinkFields("platoons").get(0);
assertEquals("platoons", link.getName());
assertEquals("org.nutz.dao.test.meta.Platoon", link.getLinkedEntity().getType().getName());
assertEquals("baseName", link.getLinkedField().getName());
assertEquals("name", link.getHostField().getName());
}
@Test
public void eval_manys_with_null_field() {
Entity<?> en = en(Base.class);
ManyLinkField link = (ManyLinkField) en.getLinkFields("wavebands").get(0);
assertEquals("wavebands", link.getName());
assertEquals("org.nutz.dao.test.meta.WaveBand", link.getLinkedEntity().getType().getName());
assertNull(link.getLinkedField());
assertNull(link.getHostField());
}
@Test
public void eval_manymany() {
Entity<?> en = en(Base.class);
ManyManyLinkField link = (ManyManyLinkField) en.getLinkFields("fighters").get(0);
assertEquals("dao_m_base_fighter", link.getRelationName());
}
@Test
public void eval_id_name() {
Entity<?> en = en(Platoon.class);
assertEquals("id", en.getIdField().getName());
assertEquals("name", en.getNameField().getName());
}
@Test
public void test_pk_multiple() {
Entity<?> en = en(TO0.class);
assertEquals(2, en.getCompositePKFields().size());
assertEquals("t_o0", en.getViewName());
assertEquals("id", en.getCompositePKFields().get(0).getName());
assertEquals("name", en.getCompositePKFields().get(1).getName());
assertNull(en.getIdField());
assertNull(en.getNameField());
assertTrue(en.getField("id").isCompositePk());
assertTrue(en.getField("name").isCompositePk());
}
@Test
public void test_pk_id() {
Entity<?> en = en(TO1.class);
assertTrue(en.getCompositePKFields().isEmpty());
assertEquals("t_o1", en.getViewName());
assertEquals("id", en.getIdField().getName());
assertEquals("name", en.getNameField().getName());
assertFalse(en.getField("id").isCompositePk());
assertFalse(en.getField("name").isCompositePk());
}
@Test
public void test_pk_name() {
Entity<?> en = en(TO2.class);
assertTrue(en.getCompositePKFields().isEmpty());
assertEquals("t_o2", en.getViewName());
assertEquals("id", en.getIdField().getName());
assertEquals("name", en.getNameField().getName());
assertFalse(en.getField("id").isCompositePk());
assertFalse(en.getField("name").isCompositePk());
}
@Test
public void test_pk_order() {
Entity<?> en = en(TO4.class);
assertEquals(2, en.getCompositePKFields().size());
assertEquals("t_o4", en.getViewName());
assertEquals("masterId", en.getCompositePKFields().get(0).getName());
assertEquals("id", en.getCompositePKFields().get(1).getName());
assertNull(en.getIdField());
assertNull(en.getNameField());
assertTrue(en.getField("masterId").isCompositePk());
assertTrue(en.getField("id").isCompositePk());
}
@Test
public void test_complex_pojo_without_db() {
Entity<?> en = en(TO5.class);
assertEquals("toid", en.getField("id").getColumnName());
}
@Test(expected=DaoException.class)
public void test_entity_with_two_id() {
dao.create(ErrPet.class, true);
}
}