package net.rrm.ehour.it.driver;
import net.rrm.ehour.it.AbstractScenario;
import net.rrm.ehour.it.WicketBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import java.util.concurrent.TimeUnit;
import static net.rrm.ehour.it.AbstractScenario.Driver;
import static net.rrm.ehour.it.driver.AssignmentAdminDriver.assignToProject;
import static net.rrm.ehour.it.driver.CustomerManagementDriver.createActiveCustomer;
import static net.rrm.ehour.it.driver.EhourApplicationDriver.loginAdmin;
import static net.rrm.ehour.it.driver.EhourApplicationDriver.logout;
import static net.rrm.ehour.it.driver.ItUtil.findElement;
import static net.rrm.ehour.it.driver.ItUtil.waitUntil;
import static net.rrm.ehour.it.driver.ProjectDriver.ACTIVE_PROJECT;
import static net.rrm.ehour.it.driver.ProjectDriver.createActiveProjectForActiveCustomer;
import static net.rrm.ehour.it.driver.UserManagementDriver.*;
import static org.junit.Assert.assertTrue;
public abstract class TimesheetDriver {
public static void createUserAndAssign() {
loginAdmin();
loadUserManagement();
createRegularUser();
createActiveCustomer();
createActiveProjectForActiveCustomer();
assignToProject(REGULAR_USER, ACTIVE_PROJECT);
logout();
}
public static void amIOnTheTimesheet() {
assertTrue(findElement("contentContainer_timesheetFrame_title") != null);
}
public static boolean isBookingHoursPossible(int day) {
try {
AbstractScenario.Driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
String wicketPath = "contentContainer_timesheetFrame_timesheetFrame__body_timesheetForm_blueFrame_blueFrame__body_customers_0_rows_0_days_" + day + "_day_day";
Driver.findElement(WicketBy.wicketPath(wicketPath));
return true;
} catch (org.openqa.selenium.NoSuchElementException nse) {
return false;
}
finally {
AbstractScenario.Driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
}
// this can only navigate backwards
public static void navigateToMonth(String month) {
while (!findElement("sidePanel_calendarFrame_currentMonth").getText().equals(month)) {
findElement("sidePanel_calendarFrame_previousMonthLink").click();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void clickInWeek(int week) {
findElement("sidePanel_calendarFrame_weeks_" + week).click();
}
public static void bookHours(int day, Float hours) {
findElement("contentContainer_timesheetFrame_timesheetFrame__body_timesheetForm_blueFrame_blueFrame__body_customers_0_rows_0_day" + day + "_day").sendKeys(hours.toString());
}
public static void addDayComment(int day, String comment) {
String base = openDayCommentModal(day);
findElement(base + "_dayWin_content_comment").sendKeys(comment);
findElement(base + "_dayWin_content_submit").click();
}
public static String openDayCommentModal(int day) {
String base = String.format("contentContainer_timesheetFrame_timesheetFrame__body_timesheetForm_blueFrame_blueFrame__body_customers_0_rows_0_day%d", day);
findElement(base + "_commentLink").click();
return base;
}
public static void cancelDayCommentModal(int day) {
String path = String.format("contentContainer_timesheetFrame_timesheetFrame__body_timesheetForm_blueFrame_blueFrame__body_customers_0_rows_0_day%d_dayWin_content_cancel", day);
findElement(path).click();
}
public static void submitTimesheet() {
findElement("contentContainer_timesheetFrame_timesheetFrame__body_timesheetForm_commentsFrame_commentsFrame__body_submitButton").click();
}
public static void assertServerMessage(String expectedMessage) {
waitUntil(ExpectedConditions.textToBePresentInElementLocated(WicketBy.wicketPath("contentContainer_timesheetFrame_timesheetFrame__body_timesheetForm_commentsFrame_commentsFrame__body_serverMessage"), expectedMessage));
}
}