package com.redheap.selenium.components;
import com.redheap.selenium.component.AdfCalendar;
import com.redheap.selenium.pages.CalendarDemoPage;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import org.junit.Test;
public class CalendarTest extends PageTestBase<CalendarDemoPage> {
private final DateFormat yyyymmdd = new SimpleDateFormat("yyyyMMdd");
@Test
public void testCalendarActiveDay() {
AdfCalendar calendar = pages.goHome().findCalendar();
Date activeDay = calendar.getActiveDayFromDom();
calendar.findPreviousButton().click();
assertNotEquals(activeDay, calendar.getActiveDayFromDom());
}
@Test
public void testCalendarViews() {
AdfCalendar calendar = pages.goHome().findCalendar();
assertEquals(AdfCalendar.View.MONTH, calendar.getView());
calendar.findDayViewButton().click();
assertEquals(AdfCalendar.View.DAY, calendar.getView());
calendar.findWeekViewButton().click();
assertEquals(AdfCalendar.View.WEEK, calendar.getView());
calendar.findMonthViewButton().click();
assertEquals(AdfCalendar.View.MONTH, calendar.getView());
calendar.findListViewButton().click();
assertEquals(AdfCalendar.View.LIST, calendar.getView());
}
@Test
public void testToday() {
AdfCalendar calendar = pages.goHome().findCalendar();
Date activeDay = calendar.getActiveDayFromDom();
calendar.findPreviousButton().click();
assertNotEquals(activeDay, calendar.getActiveDayFromDom());
calendar.findTodayButton().click();
assertEquals(activeDay, calendar.getActiveDayFromDom());
}
@Test
public void testPreviousNext() {
AdfCalendar calendar = pages.goHome().findCalendar();
Date activeDay = calendar.getActiveDayFromDom();
calendar.findPreviousButton().click();
assertNotEquals(activeDay, calendar.getActiveDayFromDom());
calendar.findNextButton().click();
assertEquals(activeDay, calendar.getActiveDayFromDom());
calendar.findNextButton().click();
assertNotEquals(activeDay, calendar.getActiveDayFromDom());
calendar.findPreviousButton().click();
assertEquals(activeDay, calendar.getActiveDayFromDom());
}
@Test
public void testActiveDay() {
AdfCalendar calendar = pages.goHome().findCalendar();
Calendar midnightToday = Calendar.getInstance();
midnightToday.set(Calendar.HOUR_OF_DAY, 0);
midnightToday.set(Calendar.MINUTE, 0);
midnightToday.set(Calendar.SECOND, 0);
midnightToday.set(Calendar.MILLISECOND, 0);
assertEquals(midnightToday.getTime(), calendar.getActiveDayFromDom());
calendar.findPreviousButton().click();
Calendar monthAgo = (Calendar) midnightToday.clone();
monthAgo.add(Calendar.MONTH, -1);
assertEquals(monthAgo.getTime(), calendar.getActiveDayFromDom());
}
@Test
public void testActivitiesInView() {
AdfCalendar calendar = pages.goHome().findCalendar();
// exact number is unknown as sample app uses random data
assertThat(calendar.getActivitiesInViewCount(), greaterThan(10));
calendar.clickActivityInView(0);
// TODO: how can we test if click succeeded?
}
@Test
public void testMoreLinksInView() {
AdfCalendar calendar = pages.goHome().findCalendar();
// exact number is unknown as sample app uses random data
assertThat(calendar.getMoreLinksInViewCount(), greaterThan(5));
calendar.clickMoreLinkInView(0);
assertEquals(AdfCalendar.View.DAY, calendar.getView());
}
@Test
public void testDateLink() {
AdfCalendar calendar = pages.goHome().findCalendar();
// exact number is unknown as test app uses random data
assertTrue(calendar.getDateLinkCount() > 10);
calendar.clickDateLink(0);
assertEquals(AdfCalendar.View.DAY, calendar.getView());
}
@Test
public void testCreatePopup() {
CalendarDemoPage page = pages.goHome();
AdfCalendar calendar = page.findCalendar();
assertNull("popup should not be openend before click", page.findCreatePopupAllDay());
assertNull("popup should not be openend before click", page.findCreatePopupFrom());
assertNull("popup should not be openend before click", page.findCreatePopupTo());
final int day = 15;
calendar.createDayActivity(day);
assertTrue("popup should open with all-day activity", (Boolean) page.findCreatePopupAllDay().getValue());
assertThat(page.findCreatePopupTo().getSubmittedValue(), containsString("/" + (day + 1) + "/"));
}
@Test
public void testHover() {
CalendarDemoPage page = pages.goHome();
AdfCalendar calendar = page.findCalendar();
calendar.hoverActivityInView(0);
assertEquals("NOTE: This popup is for demo purposes only; it is not part of the built in functionality of the calendar.",
page.findPopupNote().getValue());
}
@Test
public void testActivitiesText() {
CalendarDemoPage page = pages.goHome();
AdfCalendar calendar = page.findCalendar();
for (int i = 0, n = calendar.getActivitiesInViewCount(); i < n; i++) {
String label = calendar.getActivityInViewLabel(i);
assertTrue("activity " + i + " should have a label, not " + label, StringUtils.isNotBlank(label));
}
}
@Test
public void testGoToDateMonth() throws ParseException {
CalendarDemoPage page = pages.goHome();
AdfCalendar calendar = page.findCalendar();
calendar.findMonthViewButton().click();
// browse back to first day of month
calendar.goToDate(yyyymmdd.parse("20150301"));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.MONTH), is(Calendar.MARCH));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.YEAR), is(2015));
// browse back to middle of month
calendar.goToDate(yyyymmdd.parse("20150115"));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.MONTH), is(Calendar.JANUARY));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.YEAR), is(2015));
// browse forward to last day of month
calendar.goToDate(yyyymmdd.parse("20150430"));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.MONTH), is(Calendar.APRIL));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.YEAR), is(2015));
}
@Test
public void testGoToDateWeek() throws ParseException {
CalendarDemoPage page = pages.goHome();
AdfCalendar calendar = page.findCalendar();
calendar.findWeekViewButton().click();
// browse back to first day of week
calendar.goToDate(yyyymmdd.parse("20150504")); // monday
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.MONTH), is(Calendar.MAY));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.YEAR), is(2015));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.WEEK_OF_YEAR), is(19));
// browse back to middle of week
calendar.goToDate(yyyymmdd.parse("20150422")); // wednesday
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.MONTH), is(Calendar.APRIL));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.YEAR), is(2015));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.WEEK_OF_YEAR), is(17));
// browse forward to last day of week
calendar.goToDate(yyyymmdd.parse("20150516")); // saturday
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.MONTH), is(Calendar.MAY));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.YEAR), is(2015));
//assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.WEEK_OF_YEAR), is(20));
}
@Test
public void testGoToDateDay() throws ParseException {
CalendarDemoPage page = pages.goHome();
AdfCalendar calendar = page.findCalendar();
calendar.findMonthViewButton().click();
// quickly browse by month to target month
calendar.goToDate(yyyymmdd.parse("20150301"));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.MONTH), is(Calendar.MARCH));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.YEAR), is(2015));
// switch to day and browse back to within february
calendar.findDayViewButton().click();
calendar.goToDate(yyyymmdd.parse("20150227"));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.DAY_OF_MONTH), is(27));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.MONTH), is(Calendar.FEBRUARY));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.YEAR), is(2015));
// browse forward
calendar.goToDate(yyyymmdd.parse("20150302"));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.DAY_OF_MONTH), is(2));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.MONTH), is(Calendar.MARCH));
assertThat(calendar.getActiveDayFromDomCalendar().get(Calendar.YEAR), is(2015));
}
public static void main(String[] args) {
String[] args2 = { CalendarTest.class.getName() };
org.junit.runner.JUnitCore.main(args2);
}
@Override
protected Class<CalendarDemoPage> getPageClass() {
return CalendarDemoPage.class;
}
@Override
protected String getJspxName() {
return "calendar.jspx";
}
}