package org.nutz.dao.test.normal;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.nutz.dao.DaoException;
import org.nutz.dao.FieldFilter;
import org.nutz.dao.test.DaoCase;
import org.nutz.dao.test.meta.EmtryObject;
import org.nutz.dao.test.meta.Pet;
import org.nutz.trans.Atom;
public class FieldFilterTest extends DaoCase {
private static Pet pet(String name) {
Pet p = new Pet();
p.setName(name);
return p;
}
@Override
protected void before() {
dao.create(Pet.class, true);
dao.insert(pet("xb"));
}
@Test
public void test_insert_by_filter() {
// insert one pet
final Pet p = pet("xh").setNickName("XiaoHei");
FieldFilter.create(Pet.class, "id|name").run(new Atom() {
public void run() {
dao.insert(p);
}
});
Pet p2 = dao.fetch(Pet.class, p.getId());
assertNull(p2.getNickName());
}
@Test
public void test_update_by_filter() {
final Pet p = dao.fetch(Pet.class, "xb");
p.setNickName("XiaoBai");
FieldFilter.create(Pet.class, "id|name").run(new Atom() {
public void run() {
dao.update(p);
}
});
Pet p2 = dao.fetch(Pet.class, p.getId());
assertNull(p2.getNickName());
}
@Test
public void test_select_by_filter() {
dao.update(dao.fetch(Pet.class, "xb").setNickName("XiaoBai"));
assertEquals("XiaoBai", dao.fetch(Pet.class, "xb").getNickName());
final Pet[] pets = new Pet[1];
FieldFilter.create(Pet.class, "id|name").run(new Atom() {
public void run() {
pets[0] = dao.fetch(Pet.class, "xb");
}
});
assertNull(pets[0].getNickName());
}
@Test
public void test_query_by_filter() {
dao.update(dao.fetch(Pet.class, "xb").setNickName("XiaoBai"));
assertEquals("XiaoBai", dao.fetch(Pet.class, "xb").getNickName());
final List<Pet> pets = new ArrayList<Pet>();
FieldFilter.create(Pet.class, "id|name").run(new Atom() {
public void run() {
pets.add(dao.query(Pet.class, null, null).get(0));
}
});
assertNull(pets.get(0).getNickName());
}
// Issue 435
@Test(expected = DaoException.class)
public void test_filter_no_field_match() {
dao.create(EmtryObject.class, true);
final EmtryObject obj = new EmtryObject();
// 应该抛出一个DaoException,因为没有任何的字段需要插入!
FieldFilter.create(EmtryObject.class, "id").run(new Atom() {
public void run() {
dao.insert(obj);
}
});
}
}