package com.perforce.workshop.tjuricek.p4oauth;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
/**
*
*/
public class PasswordCodeTest implements WebdriverTest {
private WebDriver webDriver;
private String accessToken;
@Test
public void passwordGrantTest() {
webDriver.get("https://localhost:8444/password");
// We should be redirected to the p4oauth instance now
WebElement nameEl = webDriver.findElement(By.cssSelector("[name=client_id]"));
nameEl.clear();
nameEl.sendKeys("jdoe");
webDriver.findElement(By.cssSelector("[name=password]"))
.sendKeys("johndoe1A");
webDriver.findElement(By.cssSelector("button[type=submit]"))
.click();
// We redirect back to the test server, to a page that does a couple
// of operations.
//
// 1. A background POST to p4oauth to get the authorization code
// 2. A background POST to the test server to list files locally
//
//
getWait().until(visibilityOfElementLocated(By.cssSelector("#results")));
String paths = webDriver.findElement(By.cssSelector("#results")).getText();
assertTrue(paths.contains("doh"));
accessToken = webDriver.findElement(By.id("access-token")).getText().trim();
assertNotNull(accessToken);
}
@Test(dependsOnMethods = "passwordGrantTest")
public void fetchP4TokenAfterPasswordGrant() {
webDriver.get("https://localhost:8444/fetcher?client_id=jdoe&access_token=" + accessToken);
// Again, we'll wait for the handler page to be called and list files
// locally, but, there will be no access token returned
getWait().until(visibilityOfElementLocated(By.cssSelector("#results")));
String paths = webDriver.findElement(By.cssSelector("#results")).getText();
assertTrue(paths.contains("doh"));
}
@Override
public WebDriver getWebDriver() {
return webDriver;
}
@Override
public void setWebDriver(WebDriver webDriver) {
this.webDriver = webDriver;
}
@BeforeSuite
public void setup() {
initWebdriver();
}
@AfterSuite
public void cleanup() {
stopWebDriver();
}
}