/** * */ package org.jboss.windup.testutil.html; import java.util.ArrayList; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; /** * Contains methods for testing the Jar Dependency report. * * @author mnovotny * */ public class TestDependencyReportUtil extends TestReportUtil { public boolean findDependencyElement(String fileName, String name, String gav, String dependencyHash, String version, String org, List<String> paths) { List<WebElement> elements = getDriver().findElements(By.xpath("//*[@id='" + fileName +"']")); if (elements == null || elements.isEmpty()) { throw new CheckFailedException("Unable to find " + "dependencies" ); } if (elements.size() == 1) { WebElement dependency = elements.get(0); WebElement h4 = dependency.findElement(By.tagName("h4")); if ( h4 != null && h4.getText().equals(fileName)) { return checkDependency(dependency, name, fileName, gav, dependencyHash, version, org, paths); } } else { throw new CheckFailedException("Found more than one dependency of the same filename - " + fileName); } return false; } public int getNumberOfJarsOnPage() { List<WebElement> elements = getDriver().findElements(By.className("dependency")); return (elements != null) ? elements.size() : 0; } public int getNumberOfArchivePathsOnPage(String archiveName) { String id = archiveName + "-paths"; //List<WebElement> pathElements = getDriver().findElements(By.id(id)); List<WebElement> pathElements = getDriver().findElements(By.xpath("//ul[@id='"+id+"']/li")); return (pathElements != null) ? pathElements.size() : 0; } boolean checkDependency (WebElement dependencyElement, String name, String fileName, String gav, String dependencyHash, String version, String org, List<String> paths) { boolean found = false; //1. Maven coordinates if (gav != null && !gav.isEmpty()) { found = isDependencyPropertyExists(dependencyElement, "maven", gav, fileName); if (found) { found = isDependencyPropertyURLExists(dependencyElement, "maven", gav, fileName); } } //2. SHA1 hash if (dependencyHash != null && !dependencyHash.isEmpty() && found) { found = isDependencyPropertyExists(dependencyElement, "hash", dependencyHash, fileName); } //3. Name if (name != null && !name.isEmpty() && found) { found = isDependencyPropertyExists(dependencyElement, "name", name, fileName); } //4. Version if (version != null && !version.isEmpty() && found) { found = isDependencyPropertyExists(dependencyElement, "version", version, fileName); } //5. Organization if (org != null && !org.isEmpty() && found) { found = isDependencyPropertyExists(dependencyElement, "org", org, fileName); } //6. Found paths if (paths != null && !paths.isEmpty() && found) { found = isDependencyPathsExists(dependencyElement, "paths", paths, fileName); } return found; } private boolean isDependencyPathsExists(WebElement traitsElement, String key, final List<String> foundPaths, String dependencyName) { String id = dependencyName + "-"+key; try { List<WebElement> pathElements = traitsElement.findElements(By.xpath("//ul[@id='" + id +"']/li")); if ( pathElements.size() != foundPaths.size()) { return false; } List<String> pathsOnPage = new ArrayList<>(); for (WebElement webElement : pathElements) { pathsOnPage.add(webElement.getText()); } pathsOnPage.removeAll(foundPaths); if (pathsOnPage.isEmpty()) { return true; } } catch (org.openqa.selenium.NoSuchElementException e) { System.err.println("Element not found " + e.getLocalizedMessage()); } return false; } private boolean isDependencyPropertyURLExists(WebElement traitsElement, String key, String value, String dependencyName) { String id = dependencyName+"-"+key; try { WebElement header = traitsElement.findElement(By.id(id)); if (header != null) { WebElement url = traitsElement.findElement(By.partialLinkText(value)); if (url != null) { return true; } } } catch (org.openqa.selenium.NoSuchElementException e) { System.err.println("Element not found " + e.getLocalizedMessage()); } return false; } private boolean isDependencyPropertyExists(WebElement traitsElement, String key, String value, String dependencyName) { String id = dependencyName +"-"+key; try { WebElement header = traitsElement.findElement(By.id(id)); if (header != null && header.getText().endsWith(value)) { return true; } } catch (org.openqa.selenium.NoSuchElementException e) { System.err.println("Element not found " + e.getLocalizedMessage()); } return false; } }