parent
0f2a12646b
commit
45eefaebd3
@ -1,249 +0,0 @@ |
|||||||
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.tests; |
|
||||||
|
|
||||||
import static org.hamcrest.MatcherAssert.assertThat; |
|
||||||
import static org.hamcrest.Matchers.containsString; |
|
||||||
import static org.junit.Assert.assertEquals; |
|
||||||
import static org.junit.Assert.assertNotNull; |
|
||||||
|
|
||||||
import java.awt.GraphicsEnvironment; |
|
||||||
import java.time.YearMonth; |
|
||||||
import java.time.ZonedDateTime; |
|
||||||
import java.time.format.TextStyle; |
|
||||||
import java.util.Arrays; |
|
||||||
import java.util.List; |
|
||||||
import java.util.Locale; |
|
||||||
import java.util.concurrent.TimeUnit; |
|
||||||
import java.util.concurrent.atomic.AtomicInteger; |
|
||||||
|
|
||||||
import javax.persistence.EntityManager; |
|
||||||
import javax.persistence.EntityTransaction; |
|
||||||
import javax.persistence.TypedQuery; |
|
||||||
|
|
||||||
import org.hamcrest.Matchers; |
|
||||||
import org.junit.jupiter.api.AfterEach; |
|
||||||
import org.junit.jupiter.api.BeforeAll; |
|
||||||
import org.junit.jupiter.api.BeforeEach; |
|
||||||
import org.junit.jupiter.api.Disabled; |
|
||||||
import org.junit.jupiter.api.Test; |
|
||||||
import org.openqa.selenium.By; |
|
||||||
import org.openqa.selenium.WebDriver; |
|
||||||
import org.openqa.selenium.WebElement; |
|
||||||
import org.openqa.selenium.chrome.ChromeDriver; |
|
||||||
import org.openqa.selenium.chrome.ChromeOptions; |
|
||||||
import org.openqa.selenium.support.ui.WebDriverWait; |
|
||||||
import org.springframework.beans.factory.annotation.Autowired; |
|
||||||
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; |
|
||||||
import org.springframework.boot.test.context.SpringBootTest; |
|
||||||
import org.springframework.boot.web.server.LocalServerPort; |
|
||||||
import org.springframework.test.context.TestPropertySource; |
|
||||||
|
|
||||||
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.TestDatabaseHelper; |
|
||||||
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; |
|
||||||
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEventBuilder; |
|
||||||
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.GroupDef; |
|
||||||
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; |
|
||||||
|
|
||||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) |
|
||||||
@AutoConfigureWebTestClient |
|
||||||
@Disabled |
|
||||||
@TestPropertySource(locations = "classpath:test.properties") |
|
||||||
public class VaadinClubhelperApplicationTests { |
|
||||||
|
|
||||||
private static ChromeOptions options; |
|
||||||
|
|
||||||
private static final AtomicInteger idCount = new AtomicInteger(); |
|
||||||
|
|
||||||
@LocalServerPort |
|
||||||
int port; |
|
||||||
|
|
||||||
@Autowired |
|
||||||
EntityManager entityManager; |
|
||||||
|
|
||||||
@Autowired |
|
||||||
TestDatabaseHelper testDatabaseHelper; |
|
||||||
|
|
||||||
private WebDriver driver; |
|
||||||
private ZonedDateTime now; |
|
||||||
private WebDriverWait driverWait; |
|
||||||
|
|
||||||
@BeforeAll |
|
||||||
static void setupDriverConfiguration() { |
|
||||||
|
|
||||||
if (System.getProperty("webdriver.chrome.driver") == null) { |
|
||||||
System.setProperty("webdriver.chrome.driver", System.getenv("webdriver.chrome.driver")); |
|
||||||
} |
|
||||||
|
|
||||||
options = new ChromeOptions(); |
|
||||||
options.setHeadless(GraphicsEnvironment.isHeadless()); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@BeforeEach |
|
||||||
void setUp() throws Exception { |
|
||||||
now = ZonedDateTime.now(); |
|
||||||
|
|
||||||
insertDataIntoDatabase(); |
|
||||||
|
|
||||||
driver = new ChromeDriver(options); |
|
||||||
driver.manage().window().maximize(); |
|
||||||
driver.manage().timeouts().implicitlyWait(5L, TimeUnit.SECONDS); |
|
||||||
driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS); |
|
||||||
driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS); |
|
||||||
driverWait = new WebDriverWait(driver, 45L); |
|
||||||
} |
|
||||||
|
|
||||||
public void insertDataIntoDatabase() { |
|
||||||
TypedQuery<GroupDef> query = entityManager.createQuery("FROM groupDef", GroupDef.class); |
|
||||||
if (!query.getResultList().isEmpty()) { |
|
||||||
return; |
|
||||||
} |
|
||||||
EntityTransaction tx = entityManager.getTransaction(); |
|
||||||
tx.begin(); |
|
||||||
|
|
||||||
GroupDef adminGroup = new GroupDef(); |
|
||||||
adminGroup.setName("ADMIN"); |
|
||||||
GroupDef competitorGroup = new GroupDef(); |
|
||||||
competitorGroup.setName("Wettkämpfer"); |
|
||||||
GroupDef participantGroup = new GroupDef(); |
|
||||||
participantGroup.setName("ACTIVE"); |
|
||||||
|
|
||||||
entityManager.persist(adminGroup); |
|
||||||
entityManager.persist(competitorGroup); |
|
||||||
entityManager.persist(participantGroup); |
|
||||||
|
|
||||||
ClubEvent ev = new ClubEventBuilder().withAllDay(true).withId("id" + idCount.incrementAndGet()) |
|
||||||
.withCaption("caption").withDescription("description").withiCalUID("iCalUID").withLocation("location") |
|
||||||
.withOrganizerDisplayName("mtv_allgemein").withStart(now).withEnd(now.plusDays(2)).build(); |
|
||||||
|
|
||||||
entityManager.persist(ev); |
|
||||||
|
|
||||||
ZonedDateTime holidayStart; |
|
||||||
ZonedDateTime holidayEnd; |
|
||||||
|
|
||||||
if (now.getDayOfMonth() >= 15) { |
|
||||||
holidayStart = now.minusDays(30); |
|
||||||
holidayEnd = now.minusDays(1); |
|
||||||
} else { |
|
||||||
|
|
||||||
holidayStart = now.plusDays(1); |
|
||||||
holidayEnd = now.plusDays(30); |
|
||||||
} |
|
||||||
|
|
||||||
ClubEvent holiday = new ClubEventBuilder().withAllDay(true).withId("holiday" + idCount.incrementAndGet()) |
|
||||||
.withCaption("holiday").withDescription("holiday").withiCalUID("iCalUID").withLocation("") |
|
||||||
.withOrganizerDisplayName("Schulferien").withStart(holidayStart).withEnd(holidayEnd).build(); |
|
||||||
|
|
||||||
entityManager.persist(holiday); |
|
||||||
|
|
||||||
Person p = new Person(); |
|
||||||
p.setPrename("prename"); |
|
||||||
p.setSurname("Allgroups"); |
|
||||||
p.setBirth(now.minusYears(13).toLocalDate()); |
|
||||||
p.setUsername("Allgroups"); |
|
||||||
p.setPassword("password"); |
|
||||||
p.setPersongroups(Arrays.asList(adminGroup, competitorGroup, participantGroup)); |
|
||||||
entityManager.persist(p); |
|
||||||
|
|
||||||
p = new Person(); |
|
||||||
p.setPrename("prename"); |
|
||||||
p.setSurname("participant"); |
|
||||||
p.setBirth(now.minusYears(10).toLocalDate()); |
|
||||||
p.setUsername("participant"); |
|
||||||
p.setPassword("password"); |
|
||||||
p.setPersongroups(Arrays.asList(participantGroup)); |
|
||||||
entityManager.persist(p); |
|
||||||
|
|
||||||
p = new Person(); |
|
||||||
p.setPrename("prename"); |
|
||||||
p.setSurname("competitor"); |
|
||||||
p.setBirth(now.minusYears(10).toLocalDate()); |
|
||||||
p.setUsername("competitor"); |
|
||||||
p.setPassword("password"); |
|
||||||
p.setPersongroups(Arrays.asList(competitorGroup, participantGroup)); |
|
||||||
entityManager.persist(p); |
|
||||||
|
|
||||||
tx.commit(); |
|
||||||
} |
|
||||||
|
|
||||||
@AfterEach |
|
||||||
void shutdown() { |
|
||||||
if (driver != null) { |
|
||||||
driver.close(); |
|
||||||
} |
|
||||||
testDatabaseHelper.cleanDatabase(); |
|
||||||
} |
|
||||||
|
|
||||||
@Test |
|
||||||
public void verifyMonthViewComplete() { |
|
||||||
|
|
||||||
loadApplication(); |
|
||||||
|
|
||||||
WebElement monthLabel = driver.findElement(By.id("calendar.month")); |
|
||||||
String month = monthLabel.getText(); |
|
||||||
String expected = YearMonth.now().getMonth().getDisplayName(TextStyle.FULL_STANDALONE, Locale.getDefault()); |
|
||||||
assertThat(month, containsString(expected)); |
|
||||||
|
|
||||||
List<WebElement> days = driver.findElements(By.className("v-calendar-day-number")); |
|
||||||
assertThat(days, Matchers.hasSize(Matchers.greaterThanOrEqualTo(now.getMonth().length(true)))); |
|
||||||
|
|
||||||
WebElement today = driver.findElement(By.className("v-calendar-month-day-today")); |
|
||||||
WebElement todayContent = today.findElement(By.className("v-calendar-event-start")); |
|
||||||
assertEquals("caption", todayContent.getText()); |
|
||||||
|
|
||||||
List<WebElement> allEventElements = driver.findElements(By.className("v-calendar-event")); |
|
||||||
assertThat(allEventElements, Matchers.hasSize(Matchers.greaterThanOrEqualTo(16))); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Test |
|
||||||
public void verifyPersonViewForEvent() { |
|
||||||
|
|
||||||
loadApplication(); |
|
||||||
|
|
||||||
clickTodaysEvent(); |
|
||||||
|
|
||||||
By filterGroupId = By.id("person.filter.groups"); |
|
||||||
waitFor(filterGroupId); |
|
||||||
|
|
||||||
WebElement titleElement = driver.findElement(By.id("event.title")); |
|
||||||
assertEquals("caption", titleElement.getAttribute("value")); |
|
||||||
|
|
||||||
WebElement personList = driver.findElement(By.id("person.grid")).findElement(By.tagName("table")); |
|
||||||
WebElement allGroupsPerson = findElementWithContent(personList, "Allgroups"); |
|
||||||
WebElement competitorPerson = findElementWithContent(personList, "competitor"); |
|
||||||
WebElement participantPerson = findElementWithContent(personList, "participant"); |
|
||||||
|
|
||||||
assertNotNull(allGroupsPerson); |
|
||||||
assertNotNull(competitorPerson); |
|
||||||
assertNotNull(participantPerson); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
public void clickTodaysEvent() { |
|
||||||
WebElement today = findElementWithContent("caption"); |
|
||||||
today.click(); |
|
||||||
} |
|
||||||
|
|
||||||
public void loadApplication() { |
|
||||||
driver.get("http://localhost:" + port); |
|
||||||
waitFor(By.id("calendar.month")); |
|
||||||
} |
|
||||||
|
|
||||||
public void waitFor(final By idMonth) { |
|
||||||
driverWait.until(dr -> { |
|
||||||
return dr.findElements(idMonth).size() > 0 && dr.findElements(idMonth).get(0).isDisplayed(); |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
public WebElement findElementWithContent(String content) { |
|
||||||
return findElementWithContent(null, content); |
|
||||||
} |
|
||||||
|
|
||||||
public WebElement findElementWithContent(WebElement parent, String content) { |
|
||||||
if (parent != null) { |
|
||||||
return parent.findElement(By.xpath(String.format("//*[contains(text(), '%s')]", content))); |
|
||||||
} else { |
|
||||||
return driver.findElement(By.xpath(String.format("//*[contains(text(), '%s')]", content))); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
Loading…
Reference in new issue