package org.nutz.dao.test.mapping; import static org.junit.Assert.assertEquals; import org.junit.Test; import org.nutz.dao.TableName; import org.nutz.dao.test.DaoCase; import org.nutz.dao.test.meta.Base; import org.nutz.dao.test.meta.Platoon; import org.nutz.dao.test.meta.Soldier; import org.nutz.dao.test.meta.Tank; import org.nutz.trans.Atom; public class DynamicManyManyTest extends DaoCase { private Platoon platoon; @Override protected void before() { pojos.init(); platoon = pojos.create4Platoon(Base.make("blue"), "seals"); } @Override protected void after() { Platoon p = dao.fetch(Platoon.class, "seals"); pojos.dropPlatoon(p.getId()); } @Test public void delete_links() { TableName.run(platoon, new Atom() { public void run() { Tank t = dao.fetchLinks(dao.fetch(Tank.class, "T92"), "members"); assertEquals(3, t.getMembers().size()); dao.deleteLinks(t, "members"); assertEquals(2, dao.count(Soldier.class)); assertEquals(2, dao.count("dao_d_m_soldier_tank_" + platoon.getId())); } }); } @Test public void delete_links_partly() { TableName.run(platoon, new Atom() { public void run() { Tank t = dao.fetchLinks(dao.fetch(Tank.class, "T92"), "members"); t.getMembers().remove("Mick"); dao.deleteLinks(t, "members"); assertEquals(2, dao.count(Tank.class)); assertEquals(3, dao.count(Soldier.class)); assertEquals(3, dao.count("dao_d_m_soldier_tank_" + platoon.getId())); } }); } @Test public void delete_with() { TableName.run(platoon, new Atom() { public void run() { Tank t = dao.fetchLinks(dao.fetch(Tank.class, "T92"), "members"); dao.deleteWith(t, "members"); assertEquals(1, dao.count(Tank.class)); assertEquals(2, dao.count(Soldier.class)); assertEquals(2, dao.count("dao_d_m_soldier_tank_" + platoon.getId())); } }); } @Test public void delete_with_partly() { TableName.run(platoon, new Atom() { public void run() { Tank t = dao.fetchLinks(dao.fetch(Tank.class, "T92"), "members"); t.getMembers().remove("Peter"); dao.deleteWith(t, "members"); assertEquals(1, dao.count(Tank.class)); assertEquals(3, dao.count(Soldier.class)); assertEquals(3, dao.count("dao_d_m_soldier_tank_" + platoon.getId())); } }); } @Test public void clear_links() { TableName.run(platoon, new Atom() { public void run() { Tank t = dao.fetchLinks(dao.fetch(Tank.class, "T92"), "members"); dao.clearLinks(t, "members"); assertEquals(5, dao.count(Soldier.class)); assertEquals(3, dao.count("dao_d_m_soldier_tank_" + platoon.getId())); } }); } @Test public void update_links() { TableName.run(platoon, new Atom() { public void run() { Tank t = dao.fetchLinks(dao.fetch(Tank.class, "T92"), "members"); t.setWeight(42); t.getMembers().get("ZZH").setAge(30); t.getMembers().get("Mick").setAge(22); t.getMembers().get("Peter").setAge(28); dao.updateLinks(t, "members"); assertEquals(30, dao.fetch(Soldier.class, "ZZH").getAge()); assertEquals(22, dao.fetch(Soldier.class, "Mick").getAge()); assertEquals(28, dao.fetch(Soldier.class, "Peter").getAge()); assertEquals(0, dao.fetch(Tank.class, "T92").getWeight()); } }); } @Test public void update_with() { TableName.run(platoon, new Atom() { public void run() { Tank t = dao.fetchLinks(dao.fetch(Tank.class, "T92"), "members"); t.setWeight(42); t.getMembers().get("ZZH").setAge(30); t.getMembers().get("Mick").setAge(22); t.getMembers().get("Peter").setAge(28); dao.updateWith(t, "members"); assertEquals(30, dao.fetch(Soldier.class, "ZZH").getAge()); assertEquals(22, dao.fetch(Soldier.class, "Mick").getAge()); assertEquals(28, dao.fetch(Soldier.class, "Peter").getAge()); assertEquals(42, dao.fetch(Tank.class, "T92").getWeight()); } }); } }