package com.lateensoft.pathfinder.toolkit.db.dao.table; import com.google.common.collect.Lists; import com.lateensoft.pathfinder.toolkit.dao.DataAccessException; import com.lateensoft.pathfinder.toolkit.db.BaseDatabaseTest; import com.lateensoft.pathfinder.toolkit.model.IdNamePair; import com.lateensoft.pathfinder.toolkit.model.NamedList; import com.lateensoft.pathfinder.toolkit.model.character.PathfinderCharacter; import com.lateensoft.pathfinder.toolkit.util.CharacterUtils; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.junit.Assert.*; @Config(manifest=Config.NONE) @RunWith(RobolectricTestRunner.class) public class PartyDAOTest extends BaseDatabaseTest { private PartyDAO<IdNamePair> partyDao; private PartyMemberNameDAO memberDao; private CharacterModelDAO charDao; private NamedList<IdNamePair> party1; private PathfinderCharacter character1a; private IdNamePair member1a; @Override public void setUp() throws Exception { super.setUp(); memberDao = new PartyMemberNameDAO(Robolectric.application); partyDao = new PartyDAO<IdNamePair>(Robolectric.application, memberDao); charDao = new CharacterModelDAO(Robolectric.application); character1a = CharacterUtils.buildTestCharacter(); charDao.add(character1a); member1a = new IdNamePair(character1a.getId(), character1a.getName()); party1 = new NamedList<IdNamePair>("Party 1", Lists.newArrayList(member1a)); assertTrue(partyDao.add(party1) != -1); } @After public void tearDown() throws Exception { if (partyDao.exists(party1.getId())) { partyDao.remove(party1); } charDao.remove(character1a); } @Test public void removeValid() throws DataAccessException { partyDao.remove(party1); assertNull(partyDao.find(party1.getId())); assertNull(memberDao.find(party1.getId(), member1a.getId())); assertTrue(charDao.exists(member1a.getId())); } @Test(expected=DataAccessException.class) public void removeInvalid() throws DataAccessException { partyDao.remove(party1); partyDao.remove(party1); } @Test public void updateValid() throws DataAccessException { party1.setName("new name"); partyDao.update(party1.idNamePair()); NamedList<IdNamePair> updated = partyDao.findList(party1.getId()); assertEquals(party1, updated); } @Test(expected=DataAccessException.class) public void updateInvalid() throws DataAccessException { party1.setName("new name"); party1.setId(-1L); partyDao.update(party1.idNamePair()); } @Test public void findValidIdNamePair() { IdNamePair foundParty = partyDao.find(party1.getId()); assertEquals(party1.idNamePair(), foundParty); } @Test public void findInvalidIdNamePair() { assertNull(partyDao.find(-1L)); } @Test public void findValidModel() { NamedList<IdNamePair> foundParty = partyDao.findList(party1.getId()); assertEquals(party1, foundParty); } @Test public void findInvalidModel() { assertNull(partyDao.findList(-1L)); } @Test public void findAllWithMember() throws DataAccessException { IdNamePair party2 = new IdNamePair("party 2"); IdNamePair party3 = new IdNamePair("party 3"); IdNamePair party4 = new IdNamePair("party 4"); partyDao.add(party2); partyDao.add(party3); partyDao.add(party4); memberDao.add(party2.getId(), member1a); memberDao.add(party4.getId(), member1a); assertThat(partyDao.findAllWithMember(member1a.getId()), containsInAnyOrder(party1.idNamePair(), party2, party4)); } }