package com.vaadin.tests.components.calendar; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.core.IsNot.not; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import java.util.List; import org.junit.Test; import org.openqa.selenium.WebElement; import com.vaadin.testbench.By; import com.vaadin.testbench.customelements.CalendarElement; import com.vaadin.tests.tb3.MultiBrowserTest; public class CalendarReadOnlyTest extends MultiBrowserTest { @Override public void setup() throws Exception { super.setup(); openTestURL("restartApplication&readonly"); } @Test public void weekViewCanBeOpenedFromMonthView() { openWeekView(); assertTrue("Calendar wasn't in week view.", getCalendar().hasWeekView()); } @Test public void dayViewCanBeOpenedFromMonthView() { openDayView(); assertTrue("Calendar wasn't in day view.", getCalendar().hasDayView()); } @Test public void dayViewCanBeOpenedFromWeekView() { openWeekView(); getCalendar().getDayHeaders().get(0).click(); assertTrue("Calendar wasn't in day view.", getCalendar().hasDayView()); } @Test public void weekViewCanBeBrowsedForwards() { openWeekView(); String firstDayOfCurrentWeek = getVisibleFirstDay(); getCalendar().next(); String firstDayOfNextWeek = getVisibleFirstDay(); assertThat("Week didn't change.", firstDayOfCurrentWeek, is(not(firstDayOfNextWeek))); } @Test public void weekViewCanBeBrowsedBackwards() { openWeekView(); String firstDayOfCurrentWeek = getVisibleFirstDay(); getCalendar().back(); String firstDayOfPreviousWeek = getVisibleFirstDay(); assertThat("Week didn't change.", firstDayOfCurrentWeek, is(not(firstDayOfPreviousWeek))); } @Test public void dayViewCanBeBrowsedForwards() { openDayView(); String currentDay = getVisibleFirstDay(); getCalendar().next(); String nextDay = getVisibleFirstDay(); assertThat("Day didn't change.", currentDay, is(not(nextDay))); } @Test public void dayViewCanBeBrowsedBackwards() { openDayView(); String currentDay = getVisibleFirstDay(); getCalendar().back(); String previousDay = getVisibleFirstDay(); assertThat("Day didn't change.", currentDay, is(not(previousDay))); } @Test public void hiddenEventsCanBeExpanded() { WebElement dayWithEvents = getFirstDayWithEvents(); assertThat("Incorrect event count.", getVisibleEvents(dayWithEvents).size(), is(2)); toggleExpandEvents(dayWithEvents).click(); assertThat("Incorrect event count.", getVisibleEvents(dayWithEvents).size(), is(4)); toggleExpandEvents(dayWithEvents).click(); assertThat("Incorrect event count.", getVisibleEvents(dayWithEvents).size(), is(2)); } private CalendarElement getCalendar() { return $(CalendarElement.class).first(); } private void openDayView() { getCalendar().getDayNumbers().get(0).click(); } private void openWeekView() { getCalendar().getWeekNumbers().get(0).click(); } private String getVisibleFirstDay() { return getCalendar().getDayHeaders().get(0).getText(); } private WebElement getFirstDayWithEvents() { for (WebElement monthDay : getCalendar().getMonthDays()) { if (getVisibleEvents(monthDay).size() > 0) { return monthDay; } } return null; } private WebElement toggleExpandEvents(WebElement dayWithEvents) { return dayWithEvents .findElement(By.className("v-calendar-bottom-spacer")); } private List<WebElement> getVisibleEvents(WebElement dayWithEvents) { return dayWithEvents.findElements(By.className("v-calendar-event")); } }