package com.aventstack.extentreports.reporter.converters;
import java.util.Date;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import com.aventstack.extentreports.Status;
import com.aventstack.extentreports.model.Log;
import com.aventstack.extentreports.model.Test;
import com.aventstack.extentreports.utils.DateUtil;
public class ExtentHtmlLogConverter {
private static final String DATE_FORMAT = "hh:mm:ss a";
private Element testElement;
private Test test;
public ExtentHtmlLogConverter(Test test, Element testElement) {
this.test = test;
this.testElement = testElement;
}
public void parseAndAddLogsToTest() {
if (test.getLevel() == 0) {
addHtmlLogsToParent();
return;
}
addHtmlLogsToNode();
}
private void addHtmlLogsToParent() {
Elements testSteps = testElement.select(":root > .test-content > .test-steps");
if (!testSteps.isEmpty()) {
Elements logs = testSteps.first().select(".log");
addLogsFromPreExistingMarkup(logs);
}
}
private void addHtmlLogsToNode() {
Elements nodeSteps = testElement.select(":root > .collapsible-body > .node-steps");
if (!nodeSteps.isEmpty()) {
Elements logs = nodeSteps.first().select(".log");
addLogsFromPreExistingMarkup(logs);
}
}
private void addLogsFromPreExistingMarkup(Elements logs) {
for (Element log : logs) {
Status status = getStatus(log);
Date timestamp = getTimestamp(log.select(".timestamp").first());
String details = getDetails(log.select(".step-details").first());
Log logModel = new Log(test);
logModel.setStatus(status);
logModel.setDetails(details);
logModel.setTimestamp(timestamp);
test.getLogContext().add(logModel);
}
}
private Status getStatus(Element trLog) {
String status = trLog.attr("status").toUpperCase();
return Status.valueOf(status);
}
private Date getTimestamp(Element tdTimestamp) {
String timestamp = tdTimestamp.text();
return DateUtil.parse(timestamp, DATE_FORMAT);
}
private String getDetails(Element tdDetails) {
String details = tdDetails.html();
return details;
}
}