/* * Copyright [2014] [Christian Loehnert, krampenschiesser@gmail.com] * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.ks.idnadrev.review.planweek; import de.ks.LauncherRunner; import de.ks.activity.ActivityCfg; import de.ks.fxcontrols.weekview.WeekHelper; import de.ks.fxcontrols.weekview.WeekViewAppointment; import de.ks.idnadrev.ActivityTest; import de.ks.idnadrev.entity.Task; import de.ks.persistence.PersistentWork; import de.ks.scheduler.Schedule; import de.ks.util.FXPlatform; import javafx.collections.ObservableList; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import javax.persistence.EntityManager; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalTime; import java.time.Year; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; @RunWith(LauncherRunner.class) public class PlanWeekActivityTest extends ActivityTest { private PlanWeek planWeek; @Override protected Class<? extends ActivityCfg> getActivityClass() { return PlanWeekActivity.class; } @Override protected void createTestData(EntityManager em) { LocalDate firstDayOfWeek = new WeekHelper().getFirstDayOfWeek(LocalDate.now()); Task proposed = new Task("proposed"); Schedule schedule = new Schedule(); schedule.setProposedWeek(new WeekHelper().getWeek(LocalDate.now())); schedule.setProposedWeekDay(DayOfWeek.THURSDAY); proposed.setSchedule(schedule); em.persist(proposed); Task scheduled = new Task("scheduled"); schedule = new Schedule(); schedule.setScheduledDate(firstDayOfWeek.plusDays(1)); schedule.setScheduledTime(LocalTime.of(12, 0)); scheduled.setSchedule(schedule); em.persist(scheduled); } @Before public void setUp() throws Exception { planWeek = activityController.getControllerInstance(PlanWeek.class); } @Test public void testResolveProposedAndScheduled() throws Exception { assertEquals(2, planWeek.viewController.getTasks().size()); assertEquals(planWeek.weekView.getEntries().toString(), 2, planWeek.weekView.getEntries().size()); } @Test public void testCreateAppointment() throws Exception { LocalDate firstDayOfWeek = new WeekHelper().getFirstDayOfWeek(LocalDate.now()); assertEquals(DayOfWeek.MONDAY, firstDayOfWeek.getDayOfWeek());//sanity on sunday morning WeekViewAppointment<Task> appointment = planWeek.createAppointment(PersistentWork.forName(Task.class, "proposed")); assertEquals(firstDayOfWeek.plusDays(3), appointment.getStartDate()); assertNull(appointment.getStartTime()); appointment = planWeek.createAppointment(PersistentWork.forName(Task.class, "scheduled")); assertEquals(firstDayOfWeek.plusDays(1), appointment.getStartDate()); assertEquals(LocalTime.of(12, 0), appointment.getStartTime()); } @Test public void testReplan() throws Exception { WeekViewAppointment<Task> proposed = planWeek.createAppointment(PersistentWork.forName(Task.class, "proposed")); WeekViewAppointment<Task> scheduled = planWeek.createAppointment(PersistentWork.forName(Task.class, "scheduled")); planWeek.changeSchedule(proposed, LocalDate.now(), LocalTime.of(13, 0)); planWeek.changeSchedule(scheduled, LocalDate.now(), null); PersistentWork.wrap(() -> { Schedule schedule = PersistentWork.forName(Task.class, "proposed").getSchedule(); assertEquals(0, schedule.getProposedWeek()); assertEquals(0, schedule.getProposedYear()); assertNull(schedule.getProposedWeekDay()); assertEquals(LocalDate.now(), schedule.getScheduledDate()); assertEquals(LocalTime.of(13, 0), schedule.getScheduledTime()); }); PersistentWork.wrap(() -> { Schedule schedule = PersistentWork.forName(Task.class, "scheduled").getSchedule(); WeekHelper weekHelper = new WeekHelper(); int week = weekHelper.getWeek(LocalDate.now()); DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); assertEquals(week, schedule.getProposedWeek()); assertEquals(Year.now().getValue(), schedule.getProposedYear()); assertEquals(dayOfWeek, schedule.getProposedWeekDay()); assertNull(schedule.getScheduledDate()); assertNull(schedule.getScheduledTime()); }); } @Test public void testStartDragOutOfRange() throws Exception { FXPlatform.invokeLater(() -> planWeek.weekView.weekOfYearProperty().set(planWeek.weekView.getWeekOfYear() + 2)); activityController.waitForDataSource(); WeekViewAppointment<Task> appointment = planWeek.createAppointment(PersistentWork.forName(Task.class, "proposed")); ObservableList<WeekViewAppointment<Task>> entries = planWeek.weekView.getEntries(); assertEquals(0, entries.size()); FXPlatform.invokeLater(() -> planWeek.weekView.startAppointmentDrag(appointment)); assertEquals(1, entries.size()); assertEquals(planWeek.weekView.getFirstDayOfWeek(), entries.get(0).getStartDate()); } }