package edu.ncsu.csc.itrust.selenium;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.support.ui.Select;

import edu.ncsu.csc.itrust.model.old.enums.TransactionType;

/**
 * Makes sure the "specialty" field is available when adding an HCP, creates an
 * HCP with the specialty "Medicine", and makes sure that HCP was successfully
 * created.
 *
 */
public class CreateLTSpecTest extends iTrustSeleniumTest {

	/**
	 * Gives us the standard testing data
	 */
	@Override
	protected void setUp() throws Exception {
		super.setUp();
		gen.clearAllTables();
		gen.standardData();
	}

	/**
	 * Test we can create HCP's as an admin
	 */
	public void testSpecialtyOnForm() throws Exception {
		// login admin
		WebDriver driver = new HtmlUnitDriver();
		driver = login("9000000001", "pw");
		assertEquals("iTrust - Admin Home", driver.getTitle());
		assertLogged(TransactionType.HOME_VIEW, 9000000001L, 0L, "");

		// click on add hcp
		driver.findElement(By.linkText("Add LT")).click();

		// add the hcp
		assertEquals("iTrust - Add LT", driver.getTitle());
		WebElement form = driver.findElement(By.tagName("form"));

		// fill in the information
		WebElement firstName = form.findElement(By.name("firstName"));
		firstName.sendKeys("New");
		WebElement lastName = form.findElement(By.name("lastName"));
		lastName.sendKeys("Person");
		WebElement email = form.findElement(By.name("email"));
		email.sendKeys("nperson@gmail.com");
		// get the dropdown options for the apptType
		Select specialty = new Select(form.findElement(By.name("specialty")));
		// make sure there is such a field
		assertFalse(specialty == null);
		String currentVal = specialty.getAllSelectedOptions().get(0).toString();
		specialty.deselectByValue(currentVal);
		specialty.selectByValue("general");
		/*
		 * I know this seems crazy, selecting an option, and then creating a new
		 * select option to make sure that the right option is selected before
		 * we even submit the form, but this is as close to the previous test
		 * this is based off of as I could think of making it.
		 */
		Select dropbox = new Select(form.findElement(By.name("specialty")));
		assertEquals(1, dropbox.getAllSelectedOptions().size());
		assertEquals("general", dropbox.getFirstSelectedOption().getAttribute(VALUE));
		form.submit();

	}
}
