package de.dhbw.humbuch.viewmodel; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.Calendar; import java.util.Date; import javax.persistence.EntityManager; import org.hibernate.criterion.Restrictions; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import com.google.inject.Inject; import com.google.inject.Provider; import de.dhbw.humbuch.guice.GuiceJUnitRunner; import de.dhbw.humbuch.guice.GuiceJUnitRunner.GuiceModules; import de.dhbw.humbuch.guice.TestModuleWithoutSingletons; import de.dhbw.humbuch.model.DAO; import de.dhbw.humbuch.model.entity.BorrowedMaterial; import de.dhbw.humbuch.model.entity.TeachingMaterial; import de.dhbw.humbuch.model.entity.TestPersistenceInitialiser; @RunWith(GuiceJUnitRunner.class) @GuiceModules({ TestModuleWithoutSingletons.class }) /** * @author Martin Wentzel */ public class TeachingMaterialViewModelTest extends BaseTest { private TeachingMaterialViewModel teachingMaterialViewModel; private DAO<TeachingMaterial> daoTeachingMaterial; private DAO<BorrowedMaterial> daoBorrowedMaterial; @Inject public void setInjected(TestPersistenceInitialiser persistenceInitialiser, Provider<EntityManager> emProvider, TeachingMaterialViewModel dunningViewModel, DAO<TeachingMaterial> daoTeachingMaterial, DAO<BorrowedMaterial> daoBorrowedMaterial) { super.setInjected(persistenceInitialiser, emProvider); this.teachingMaterialViewModel = dunningViewModel; this.daoTeachingMaterial = daoTeachingMaterial; this.daoBorrowedMaterial = daoBorrowedMaterial; } private Date today() { Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); return calendar.getTime(); } private void addNullTeachingMaterial() { TeachingMaterial teachingMaterial = null; teachingMaterialViewModel.doUpdateTeachingMaterial(teachingMaterial); } private void addTeachingMaterial(){ TeachingMaterial teachingMaterial = new TeachingMaterial.Builder(null, "Book1", null, today()).build(); teachingMaterialViewModel.doUpdateTeachingMaterial(teachingMaterial); } private void updateTeachingMaterial() { TeachingMaterial teachingMaterial = daoTeachingMaterial.findSingleWithCriteria(Restrictions.eq("name", "Book1")); teachingMaterial.setName("Book2"); teachingMaterialViewModel.doUpdateTeachingMaterial(teachingMaterial); } private void deleteTeachingMaterial() { TeachingMaterial teachingMaterial = daoTeachingMaterial.findSingleWithCriteria(Restrictions.eq("name", "Book1")); teachingMaterialViewModel.doDeleteTeachingMaterial(teachingMaterial); } private void borrowTeachingMaterial() { TeachingMaterial teachingMaterial = daoTeachingMaterial.findSingleWithCriteria(Restrictions.eq("name", "Book1")); BorrowedMaterial borrowedMaterial = new BorrowedMaterial.Builder(null, teachingMaterial, today()).build(); borrowedMaterial.setReceived(true); daoBorrowedMaterial.insert(borrowedMaterial); } @Before public void refreshDunningViewModel() { teachingMaterialViewModel.refresh(); } @Test public void testStateInitialisation() { assertNotNull(teachingMaterialViewModel.teachingMaterials.get()); } @Test public void testInitialTeachingMaterials() { assertEquals(0, teachingMaterialViewModel.teachingMaterials.get().size()); } @Test public void testAddNullTeachingMaterial() { addNullTeachingMaterial(); assertEquals(0, teachingMaterialViewModel.teachingMaterials.get().size()); } @Test public void testAddTeachingMaterial() { addTeachingMaterial(); assertEquals(1, teachingMaterialViewModel.teachingMaterials.get().size()); } @Test public void testUpdateTeachingMaterial() { addTeachingMaterial(); updateTeachingMaterial(); assertEquals(1, teachingMaterialViewModel.teachingMaterials.get().size()); } @Test public void testDeleteUnborrowedTeachingMaterial() { addTeachingMaterial(); deleteTeachingMaterial(); assertEquals(0, teachingMaterialViewModel.teachingMaterials.get().size()); } @Test public void testDeleteBorrowedTeachingMaterial() { addTeachingMaterial(); borrowTeachingMaterial(); deleteTeachingMaterial(); assertEquals(1, teachingMaterialViewModel.teachingMaterials.get().size()); } }