package de.dhbw.humbuch.viewmodel; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; 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.Grade; import de.dhbw.humbuch.model.entity.Student; import de.dhbw.humbuch.model.entity.TestPersistenceInitialiser; /** * Test persisting of "uploaded" students in StudentInformationViewModel. * Test different kinds of persisting: delta import and non-delta import. * * @author Benjamin Räthlein * */ @RunWith(GuiceJUnitRunner.class) @GuiceModules({ TestModuleWithoutSingletons.class }) public class StudentInformationViewModelTest extends BaseTest { private StudentInformationViewModel vm; private DAO<Student> daoStudent; @Inject public void setInjected(TestPersistenceInitialiser persistenceInitialiser, Provider<EntityManager> emProvider, StudentInformationViewModel studentInformationViewModel, DAO<Student> daoStudent) { this.daoStudent = daoStudent; super.setInjected(persistenceInitialiser, emProvider); this.vm = studentInformationViewModel; } private void importTwoStudents(boolean fullImport) { Grade grade = new Grade.Builder(5, "").build(); List<Student> students = new ArrayList<Student>(); Student student1 = new Student.Builder(4, "Roberto", "Rastapopoulos", null, grade).build(); Student student2 = new Student.Builder(5, "Bianca", "Castafiore", null, grade).build(); students.add(student1); students.add(student2); vm.persistStudents(students, fullImport); } private void importThreeStudents(){ Grade grade = new Grade.Builder(7, "").build(); List<Student> students = new ArrayList<Student>(); Student student1 = new Student.Builder(1, "Tim", "Tintin", null, grade).build(); Student student2 = new Student.Builder(2, "Struppi", "Milou", null, grade).build(); Student student3 = new Student.Builder(3, "Archibald", "Haddock", null, grade).build(); students.add(student1); students.add(student2); students.add(student3); vm.persistStudents(students, true); } private void overrideStudentWithId(int id){ Grade grade = new Grade.Builder(7, "").build(); List<Student> students = new ArrayList<Student>(); Student student1 = new Student.Builder(id, "Balduin", "Bienlein", null, grade).build(); students.add(student1); vm.persistStudents(students, true); } @Before public void refreshViewModel() { vm.refresh(); } @Test public void testStateInitialisation() { assertNotNull(vm.students.get()); } @Test public void testFullImport() { importThreeStudents(); refreshViewModel(); importTwoStudents(true); refreshViewModel(); assertEquals(2, daoStudent.findAll().size()); assertEquals("Bianca", daoStudent.find(5).getFirstname()); } @Test public void testDeltaImport() { importThreeStudents(); refreshViewModel(); importTwoStudents(false); refreshViewModel(); assertEquals(5, daoStudent.findAll().size()); assertEquals("Milou", daoStudent.find(2).getLastname()); } @Test public void updateStudentByImport(){ importThreeStudents(); refreshViewModel(); int id = 3; assertEquals("Haddock", daoStudent.find(id).getLastname()); overrideStudentWithId(id); refreshViewModel(); assertEquals("Bienlein", daoStudent.find(id).getLastname()); } }