package de.dhbw.humbuch.viewmodel; import static de.dhbw.humbuch.test.TestUtils.category; import static de.dhbw.humbuch.test.TestUtils.randomUser; import static de.dhbw.humbuch.test.TestUtils.schoolYearFirstTermEnded; import static de.dhbw.humbuch.test.TestUtils.schoolYearFirstTermNotStarted; import static de.dhbw.humbuch.test.TestUtils.schoolYearFirstTermStarted; import static de.dhbw.humbuch.test.TestUtils.schoolYearSecondTermEnded; import static de.dhbw.humbuch.test.TestUtils.schoolYearSecondTermStarted; import static de.dhbw.humbuch.test.TestUtils.settingsEntry; import static de.dhbw.humbuch.test.TestUtils.teachingMaterialInBothTermsOfGrade; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; 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.TestModule; import de.dhbw.humbuch.model.DAO; import de.dhbw.humbuch.model.entity.Category; import de.dhbw.humbuch.model.entity.SchoolYear; import de.dhbw.humbuch.model.entity.SettingsEntry; import de.dhbw.humbuch.model.entity.TeachingMaterial; import de.dhbw.humbuch.model.entity.TestPersistenceInitialiser; import de.dhbw.humbuch.model.entity.User; @RunWith(GuiceJUnitRunner.class) @GuiceModules({ TestModule.class }) public class SettingsViewModelTest extends BaseTest { private SettingsViewModel vm; private Properties properties; private DAO<Category> daoCategory; private DAO<SchoolYear> daoSchoolYear; private DAO<SettingsEntry> daoSettingsEntry; private DAO<TeachingMaterial> daoTeachingMaterial; private DAO<User> daoUser; @Inject public void setInjected(TestPersistenceInitialiser persistenceInitialiser, Provider<EntityManager> emProvider, SettingsViewModel settingsViewModel, Properties properties, DAO<Category> daoCategory, DAO<SchoolYear> daoSchoolYear, DAO<SettingsEntry> daoSettingsEntry, DAO<TeachingMaterial> daoTeachingMaterial, DAO<User> daoUser) { this.properties = properties; this.daoCategory = daoCategory; this.daoSchoolYear = daoSchoolYear; this.daoSettingsEntry = daoSettingsEntry; this.daoTeachingMaterial = daoTeachingMaterial; this.daoUser = daoUser; super.setInjected(persistenceInitialiser, emProvider); this.vm = settingsViewModel; } @Before public void refreshViewModel() { properties.currentUser.set(daoUser.insert(randomUser())); vm.refresh(); } @Test public void testStateInitialisation() { assertNotNull(vm.schoolYears.get()); assertNotNull(vm.categories.get()); assertNotNull(vm.settingsEntries.get()); assertNotNull(vm.userName.get()); assertNotNull(vm.userEmail.get()); } @Test public void testStateCategoriesInsertOne() { daoCategory.insert(category()); daoCategory.insert(category()); vm.refresh(); assertEquals(2, vm.categories.get().size()); } @Test public void testStateCategoriesInsertThreeDeleteOne() { daoCategory.insert(category()); daoCategory.insert(category()); Category category = daoCategory.insert(category()); vm.refresh(); assertEquals(3, vm.categories.get().size()); daoCategory.delete(category); vm.refresh(); assertEquals(2, vm.categories.get().size()); } @Test public void testStateSchoolYearsInsertTwo() { daoSchoolYear.insert(schoolYearSecondTermEnded()); daoSchoolYear.insert(schoolYearFirstTermStarted()); vm.refresh(); assertEquals(2, vm.schoolYears.get().size()); } @Test public void testStateSchoolYearsInsertThreeDeleteOne() { daoSchoolYear.insert(schoolYearSecondTermEnded()); daoSchoolYear.insert(schoolYearFirstTermStarted()); SchoolYear schoolYear = daoSchoolYear .insert(schoolYearSecondTermStarted()); vm.refresh(); assertEquals(3, vm.schoolYears.get().size()); daoSchoolYear.delete(schoolYear); vm.refresh(); assertEquals(2, vm.schoolYears.get().size()); } @Test public void testStateSettingsEntriesInsertTwo() { daoSettingsEntry.insert(settingsEntry()); daoSettingsEntry.insert(settingsEntry()); vm.refresh(); assertEquals(2, vm.settingsEntries.get().size()); } @Test public void testStateSettingsEntriesInsertThreeDeleteOne() { daoSettingsEntry.insert(settingsEntry()); daoSettingsEntry.insert(settingsEntry()); SettingsEntry settingsEntry = daoSettingsEntry.insert(settingsEntry()); vm.refresh(); assertEquals(3, vm.settingsEntries.get().size()); daoSettingsEntry.delete(settingsEntry); vm.refresh(); assertEquals(2, vm.settingsEntries.get().size()); } @Test public void testDoDeleteCategoryNotAllowed() { TeachingMaterial teachingMaterial = daoTeachingMaterial .insert(teachingMaterialInBothTermsOfGrade(6)); vm.refresh(); assertEquals(1, vm.categories.get().size()); vm.doDeleteCategory(teachingMaterial.getCategory()); assertEquals(1, vm.categories.get().size()); } @Test public void testDoDeleteCategoryAllowed() { Category category = daoCategory.insert(category()); vm.refresh(); vm.doDeleteCategory(category); assertEquals(0, vm.categories.get().size()); } @Test public void testDoDeleteSchoolYearNotAllowedWhenInFirstTerm() { SchoolYear schoolYear = daoSchoolYear .insert(schoolYearFirstTermStarted()); vm.refresh(); assertEquals(1, vm.schoolYears.get().size()); vm.doDeleteSchoolYear(schoolYear); assertEquals(1, vm.schoolYears.get().size()); } @Test public void testDoDeleteSchoolYearNotAllowedWhenAfterFirstTerm() { SchoolYear schoolYear = daoSchoolYear .insert(schoolYearFirstTermEnded()); vm.refresh(); assertEquals(1, vm.schoolYears.get().size()); vm.doDeleteSchoolYear(schoolYear); assertEquals(1, vm.schoolYears.get().size()); } @Test public void testDoDeleteSchoolYearNotAllowedWhenInSecondTerm() { SchoolYear schoolYear = daoSchoolYear .insert(schoolYearSecondTermStarted()); vm.refresh(); assertEquals(1, vm.schoolYears.get().size()); vm.doDeleteSchoolYear(schoolYear); assertEquals(1, vm.schoolYears.get().size()); } @Test public void testDoDeleteSchoolYearAllowedWhenBeforeFirstTerm() { SchoolYear schoolYear = daoSchoolYear .insert(schoolYearFirstTermNotStarted()); vm.refresh(); assertEquals(1, vm.schoolYears.get().size()); vm.doDeleteSchoolYear(schoolYear); assertEquals(0, vm.schoolYears.get().size()); } @Test public void testDoDeleteSchoolYearAllowedWhenAfterSecondTerm() { SchoolYear schoolYear = daoSchoolYear .insert(schoolYearSecondTermEnded()); vm.refresh(); assertEquals(1, vm.schoolYears.get().size()); vm.doDeleteSchoolYear(schoolYear); assertEquals(0, vm.schoolYears.get().size()); } @Test public void testDoUpdateSchoolYear() { SchoolYear schoolYear = daoSchoolYear .insert(schoolYearFirstTermStarted()); vm.refresh(); assertEquals(1, vm.schoolYears.get().size()); SchoolYear referenceSchoolYear = schoolYearSecondTermEnded(); schoolYear.setFromDate(referenceSchoolYear.getFromDate()); schoolYear.setEndFirstTerm(referenceSchoolYear.getEndFirstTerm()); schoolYear.setBeginSecondTerm(referenceSchoolYear.getBeginSecondTerm()); schoolYear.setToDate(referenceSchoolYear.getToDate()); vm.doUpdateSchoolYear(schoolYear); schoolYear = vm.schoolYears.get().iterator().next(); assertEquals(referenceSchoolYear.getFromDate(), schoolYear.getFromDate()); assertEquals(referenceSchoolYear.getEndFirstTerm(), schoolYear.getEndFirstTerm()); assertEquals(referenceSchoolYear.getBeginSecondTerm(), schoolYear.getBeginSecondTerm()); assertEquals(referenceSchoolYear.getToDate(), schoolYear.getToDate()); } @Test public void testDoUpdateCategoryAllowed() { final String newName = "NEWNAME"; Category category = daoCategory.insert(category()); vm.refresh(); category.setName(newName); vm.doUpdateCategory(category); assertEquals(newName, vm.categories.get().iterator().next().getName()); } @Test public void testDoUpdateCategoryNotAllowedWithEmptyName() { final String newName = ""; Category category = daoCategory.insert(category()); vm.refresh(); category.setName(newName); vm.doUpdateCategory(category); assertThat(vm.categories.get().iterator().next().getName(), not(newName)); } @Test public void testDoUpdateSettingsEntry() { SettingsEntry settingsEntry = daoSettingsEntry.insert(settingsEntry()); vm.refresh(); assertEquals(1, vm.settingsEntries.get().size()); SettingsEntry referenceSettingsEntry = settingsEntry(); settingsEntry.setSettingStandardValue(referenceSettingsEntry .getSettingStandardValue()); settingsEntry.setSettingValue(referenceSettingsEntry.getSettingValue()); vm.doUpdateSettingsEntry(settingsEntry); assertThat(vm.settingsEntries.get().iterator().next() .getSettingStandardValue(), is(referenceSettingsEntry.getSettingStandardValue())); assertThat( vm.settingsEntries.get().iterator().next().getSettingValue(), is(referenceSettingsEntry.getSettingValue())); } @Test public void testDoUpdateUserAllowedWithChangeOfEmailandUsername() { final String NEW_USERNAME = "NEW_USERNAME"; final String NEW_USEREMAIL = "NEW_USEREMAIL@EMAIL.DE"; vm.doUpdateUser(NEW_USERNAME, NEW_USEREMAIL); assertThat(vm.userName.get(), is(NEW_USERNAME)); assertThat(vm.userEmail.get(), is(NEW_USEREMAIL)); } @Test public void testDoUpdateUserAllowedWithChangeOfEmail() { final String NEW_USERNAME = vm.userName.get(); final String NEW_USEREMAIL = "NEW_USEREMAIL@EMAIL.DE"; vm.doUpdateUser(NEW_USERNAME, NEW_USEREMAIL); assertThat(vm.userName.get(), is(NEW_USERNAME)); assertThat(vm.userEmail.get(), is(NEW_USEREMAIL)); } @Test public void testDoUpdateUserAllowedWithChangeOfUsername() { final String NEW_USERNAME = "NEW_USERNAME"; final String NEW_USEREMAIL = vm.userEmail.get(); vm.doUpdateUser(NEW_USERNAME, NEW_USEREMAIL); assertThat(vm.userName.get(), is(NEW_USERNAME)); assertThat(vm.userEmail.get(), is(NEW_USEREMAIL)); } @Test public void testDoUpdateUserNotAllowedWithChangeOfUsernameToExistingUsername() { final User secondUser = daoUser.insert(randomUser()); final String NEW_USERNAME = secondUser.getUsername(); final String OLDER_USEREMAIL = vm.userEmail.get(); vm.doUpdateUser(NEW_USERNAME, OLDER_USEREMAIL); assertThat(vm.userName.get(), not(NEW_USERNAME)); assertThat(vm.userEmail.get(), is(OLDER_USEREMAIL)); } @Test public void testDoUpdateUserNotAllowedWithChangeOfEmailToExistingEmail() { final User secondUser = daoUser.insert(randomUser()); final String OLD_USERNAME = vm.userName.get(); final String NEW_USEREMAIL = secondUser.getEmail(); vm.doUpdateUser(OLD_USERNAME, NEW_USEREMAIL); assertThat(vm.userName.get(), is(OLD_USERNAME)); assertThat(vm.userEmail.get(), not(NEW_USEREMAIL)); } @Test public void testDoUpdateUserNotAllowedWithChangeOfEmailAndUsernameToExistingEmailAndUsername() { final User secondUser = daoUser.insert(randomUser()); final String NEW_USERNAME = secondUser.getUsername(); final String NEW_USEREMAIL = secondUser.getEmail(); vm.doUpdateUser(NEW_USERNAME, NEW_USEREMAIL); assertThat(vm.userName.get(), not(NEW_USERNAME)); assertThat(vm.userEmail.get(), not(NEW_USEREMAIL)); } }