package net.rrm.ehour.it.driver;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Select;
import static net.rrm.ehour.it.AbstractScenario.BASE_URL;
import static net.rrm.ehour.it.AbstractScenario.Driver;
import static net.rrm.ehour.it.driver.CustomerManagementDriver.ACTIVE_CUSTOMER;
import static net.rrm.ehour.it.driver.CustomerManagementDriver.ItCustomer;
import static net.rrm.ehour.it.driver.ItUtil.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public abstract class ProjectDriver {
public static final ItProject ACTIVE_PROJECT = new ItProject("ET", "ET");
public static final ItProject INACTIVE_PROJECT = new ItProject("VPRO", "VPRO");
private static final String PREFIX_FORM = "tabs_panel_projectFormPanel_border_greySquaredFrame_border__body_projectForm_project";
public static void loadProjectAdmin() {
Driver.get(BASE_URL + "/eh/admin/project");
}
public static ItProject createActiveProjectForActiveCustomer() {
return createActiveProjectFor(ACTIVE_CUSTOMER);
}
public static ItProject createActiveProjectFor(ItCustomer customer) {
createProject(ACTIVE_PROJECT, customer, true);
return ACTIVE_PROJECT;
}
public static ItProject createInActiveProjectForActiveCustomer() {
return createInActiveProjectFor(ACTIVE_CUSTOMER);
}
public static ItProject createInActiveProjectFor(ItCustomer customer) {
createProject(INACTIVE_PROJECT, customer, false);
return INACTIVE_PROJECT;
}
public static void createProject(ItProject project, ItCustomer customer, boolean active) {
loadProjectAdmin();
fillProjectForm(project, customer, active);
storeProject();
}
public static void fillProjectForm(ItProject project, ItCustomer customer, boolean active) {
findElement(PREFIX_FORM + ".name").clear();
findElement(PREFIX_FORM + ".name").sendKeys(project.name);
findElement(PREFIX_FORM + ".projectCode").clear();
findElement(PREFIX_FORM + ".projectCode").sendKeys(project.code);
if (!active) {
findElement(PREFIX_FORM + ".active").click();
}
String cust = String.format("%s - %s", customer.code, customer.name);
new Select(findElement(PREFIX_FORM + ".customer")).selectByVisibleText(cust);
}
public static void storeProject() {
findElement("tabs_panel_projectFormPanel_border_greySquaredFrame_border__body_projectForm_submitButton").click();
assertTrue(findElement("tabs_panel_projectFormPanel_border_greySquaredFrame_border__body_projectForm_serverMessage").getText().matches("^[\\s\\S]*Data saved[\\s\\S]*$"));
}
public static void editProject(String projectName) {
WebElement listFilter = findElement(By.id("listFilter"));
listFilter.clear();
listFilter.sendKeys(projectName);
findElement("entrySelectorFrame_entrySelectorFrame__body_projectSelector_entrySelectorFrame_blueBorder_blueBorder__body_listScroll_itemList_0").click();
sleep();
waitForValue("tabs_panel_projectFormPanel_border_greySquaredFrame_border__body_projectForm_project.name", projectName);
}
public static void showOnlyActiveProjects() {
findElement("entrySelectorFrame_entrySelectorFrame__body_projectSelector_entrySelectorFrame_filterForm_filterToggle").click();
}
public static void assertProjectLoaded(String projectName) {
String input = findElement(PREFIX_FORM + ".name").getAttribute("value");
assertEquals(projectName, input);
}
public static void newAssignment() {
findElement("tabs_panel_assignedUserPanel_border_border__body_list_entrySelectorFrame_filterForm_filterInputContainer_addUsers").click();
}
public static void selectUser(int index) {
findElement("tabs_panel_assignedUserPanel_border_border__body_list_allBorder_allBorder__body_users_" + index + "_name").click();
}
public static void setRateForUser(String rate) {
String path = "tabs_panel_assignedUserPanel_border_border__body_form_border_assignmentForm_formComponents_rateRole_projectAssignment.hourlyRate";
findElement(path).clear();
findElement(path).sendKeys(rate);
}
public static void submitAssignment() {
findElement("tabs_panel_assignedUserPanel_border_border__body_form_border_assignmentForm_submitButton").click();
}
public static void selectAssignment(int index) {
findElement("tabs_panel_assignedUserPanel_border_border__body_list_entrySelectorFrame_blueBorder_blueBorder__body_listScroll_itemList_" + index + "_name").click();
}
public static void selectProjectManager(String name) {
new Select(findElement(PREFIX_FORM + ".projectManager")).selectByVisibleText(name);
}
public static class ItProject {
public String name;
public String code;
public ItProject(String name, String code) {
this.name = name;
this.code = code;
}
}
}