package browserTest;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.eclipse.egit.github.core.CommitComment;
import org.eclipse.egit.github.core.Repository;
import org.eclipse.egit.github.core.client.GitHubClient;
import org.eclipse.egit.github.core.service.CommitService;
import org.eclipse.egit.github.core.service.RepositoryService;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class BrowserTest {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
private String testUserName;
private String testUserPass;
@Before
public void setUp() throws Exception {
testUserName = System.getProperty("testUserName");
testUserPass = System.getProperty("testUserPass");
driver = new FirefoxDriver();
baseUrl = "http://pdfreviewcanary-ncsudlf.rhcloud.com/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testUploadReview() throws Exception {
int successCounter = 0;
try {
driver.get(baseUrl + "/");
successCounter++;
driver.findElement(By.id("login")).click();
driver.findElement(By.id("login_field")).clear();
driver.findElement(By.id("login_field")).sendKeys(testUserName);
driver.findElement(By.id("password")).clear();
driver.findElement(By.id("password")).sendKeys(testUserPass);
driver.findElement(By.name("commit")).click();
successCounter++;
driver.findElement(By.id("showWriterBtn")).click();
driver.findElement(By.linkText("pdf-reviewer")).click();
driver.findElement(By.linkText("testing-review-pdf")).click();
driver.findElement(By.linkText("test.pdf")).click();
driver.findElement(By.linkText("(Myself) - pdf-reviewer")).click();
driver.findElement(By.id("customTags")).clear();
driver.findElement(By.id("customTags")).sendKeys("[Selenium]");
driver.findElement(By.id("submitReview")).click();
successCounter++;
driver.findElement(By.cssSelector("button.close")).click();
driver.findElement(By.id("showStatusBtn")).click();
successCounter++;
driver.findElement(By.linkText("Review Now")).click();
File file = new File("strangeAnnotations.pdf");
driver.findElement(By.id("pdf-file")).sendKeys(file.getAbsolutePath());
driver.findElement(By.id("upload")).click();
driver.findElement(By.linkText("here")).click();
successCounter++;
driver.findElement(By.cssSelector("a.js-selected-navigation-item.sunken-menu-item > span.octicon.octicon-issue-opened")).click();
driver.findElement(By.linkText("Selenium")).click();
driver.findElement(By.cssSelector("input.js-check-all")).click();
successCounter++;
} catch (Exception e) {
e.printStackTrace();
}
reportSuccesses(successCounter);
}
private void reportSuccesses(int successCounter) throws IOException {
System.out.println(successCounter +" things went well");
GitHubClient client = new GitHubClient();
String botUserName = System.getProperty("testUserName");
String botPassword = System.getProperty("testUserPass");
client.setCredentials(botUserName, botPassword);
String sha = System.getenv("TRAVIS_COMMIT");
System.out.println("making a comment on commit "+sha);
RepositoryService repoService = new RepositoryService(client);
Repository repo = repoService.getRepository("DeveloperLiberationFront", "Pdf-Reviewer");
CommitService service = new CommitService(client);
CommitComment comment = new CommitComment();
String message = "step | pass?\n" +
"--- | --- \n" +
"canary site online | :fire: \n" +
"authenticated with GitHub | :fire: \n" +
"no carry over reviews | ::fire: \n" +
"created request | :fire: \n" +
"Uploaded pdf | :fire: \n" +
"Found issues in GitHub | :fire: \n";
for(int i = 0; i< successCounter; i++) {
message = message.replaceFirst(":fire:", ":white_check_mark:");
}
comment.setBody(message);
service.addComment(repo, sha, comment);
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
private boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
private String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
}