aboutsummaryrefslogtreecommitdiffstats
path: root/uitest/src/test/java/com/vaadin/tests/smoke/CalendarSmokeTest.java
blob: 9f5330f538f01404add17fbcdf540137fb4d1355 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package com.vaadin.tests.smoke;

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.elements.CalendarElement;
import com.vaadin.tests.tb3.MultiBrowserTest;

public class CalendarSmokeTest extends MultiBrowserTest {

    @Test
    public void calendarSmokeTest() {
        openTestURL();

        smokeTest();
    }

    @Test
    public void readOnlyCalendarSmokeTest() {
        openTestURL("restartApplication&readonly");

        smokeTest();
    }

    private void smokeTest() {
        openWeekView();

        assertTrue("Calendar wasn't in week view.",
                getCalendar().hasWeekView());
        reload();

        openDayView();
        assertTrue("Calendar wasn't in day view.", getCalendar().hasDayView());
        reload();

        openWeekView();
        getCalendar().getDayHeaders().get(0).click();
        assertTrue("Calendar wasn't in day view.", getCalendar().hasDayView());
        reload();

        openWeekView();
        String firstDayOfCurrentWeek = getVisibleFirstDay();
        getCalendar().next();
        String firstDayOfNextWeek = getVisibleFirstDay();
        assertThat("Week didn't change.", firstDayOfCurrentWeek,
                is(not(firstDayOfNextWeek)));
        reload();

        openDayView();
        String currentDay = getVisibleFirstDay();
        getCalendar().next();
        String nextDay = getVisibleFirstDay();
        assertThat("Day didn't change.", currentDay, is(not(nextDay)));
        reload();

        openDayView();
        currentDay = getVisibleFirstDay();
        getCalendar().back();
        String previousDay = getVisibleFirstDay();
        assertThat("Day didn't change.", currentDay, is(not(previousDay)));
        reload();

        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).isEmpty()) {
                return monthDay;
            }
        }

        return null;
    }

    private void reload() {
        getDriver().navigate().refresh();
    }

    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"));
    }
}