package demo;

import static org.junit.jupiter.api.Assertions.*;

import java.util.List;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
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.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;


class computePrjGradeTest_demo 
{
   private WebDriver driver;
   private String url = "https://www.cs.virginia.edu/~up3f/cs3250/sut/compute-prj-grade.php";

   @BeforeEach
   public void setUp() 
   {
       // uncomment the following based on your web browser

//     System.setProperty("webdriver.gecko.driver", "/path/to/your-gecko-driver");
//     driver = new FirefoxDriver();
//     
//     System.setProperty("webdriver.chrome.driver", "/path/to/your-chrome-driver");
//     driver = new ChromeDriver();   
	   	   
   }

   @AfterEach
   public void teardown()
   {
	  driver.close();
   }

   // @Test
   public void test_pageTitle()
   {
      assertEquals(driver.getTitle(), "Compute Project Grade");	
   }
	   
   // @Test
   public void test_pageContainRequestedDate()
   {
      assertTrue(driver.getPageSource().contains("Drop the lowest score?"));
   }   

   @Test
   public void test_findElementByName()
   {
	  WebElement ele = driver.findElement(By.name("prj1_total"));   
	  assertEquals("100", ele.getAttribute("value"));
   }

   
   @Test
   public void test_findElementByXPath()
   {
	  List<WebElement> lst = driver.findElements(By.xpath("//*[@name='drop_project']"));   
	  for (WebElement e : lst)
	  {
	 	  System.out.println(e.getTagName() + " : " +
	 			  			e.getAttribute("value") + " : " +
	 			  			e.getAttribute("id")	 			  			
	                );
	  }
   }
   
   // input: 50/100, 15/30, 50/100, 50/100, 25/50, 50/100, no drop
   // expect: 
   @Test
   public void test_computeScore_without_drop()
   {
	   // setup
	   WebElement ele = driver.findElement(By.name("prj1"));
	   ele.sendKeys("50");    // enter value
	   ele = driver.findElement(By.name("prj2"));
	   ele.sendKeys("15");
	   ele = driver.findElement(By.name("prj2_total"));
	   ele.clear();     // clear the box
	   ele.sendKeys("30");
	   ele = driver.findElement(By.name("prj3"));
	   ele.sendKeys("50");
	   ele = driver.findElement(By.name("prj4"));
	   ele.sendKeys("50");
	   ele = driver.findElement(By.name("prj5"));
	   ele.sendKeys("25");
	   ele = driver.findElement(By.name("prj5_total"));
	   ele.clear();
	   ele.sendKeys("50");
	   ele = driver.findElement(By.name("prj6"));
	   ele.sendKeys("50");
	   
	   List<WebElement> lst = driver.findElements(By.xpath("//*[@name='drop_project']"));
	   lst.get(1).click();
	   
	   // exe
	   driver.findElement(By.xpath("//*[@type='submit']")).click();
	   
	   // assert
	   assertEquals(true, driver.getPageSource().contains("50.00"));
   }

}
