private boolean hasTestStage(final TestResult result) { return !result.getSteps().isEmpty() || !result.getAttachments().isEmpty(); }
private List<TestResultContainer> findParents(final List<TestResultContainer> groups, final String id, final Set<String> seen) { return groups.stream() .filter(container -> container.getChildren().contains(id)) .filter(container -> !seen.contains(container.getUuid())) .collect(Collectors.toList()); }
private void convert(final Supplier<String> uidGenerator, final Path resultsDirectory, final ResultsVisitor visitor, final List<TestResultContainer> groups, final TestResult result) { final io.qameta.allure.entity.TestResult dest = new io.qameta.allure.entity.TestResult(); dest.setUid(uidGenerator.get()); dest.setHistoryId(result.getHistoryId()); dest.setFullName(result.getFullName()); dest.setName(firstNonNull(result.getName(), result.getFullName(), "Unknown test")); dest.setTime(Time.create(result.getStart(), result.getStop())); dest.setDescription(result.getDescription()); dest.setDescriptionHtml(result.getDescriptionHtml()); dest.setStatus(convert(result.getStatus())); Optional.ofNullable(result.getStatusDetails()).ifPresent(details -> { dest.setStatusMessage(details.getMessage()); dest.setStatusTrace(details.getTrace()); }); dest.setLinks(convert(result.getLinks(), this::convert)); dest.setLabels(convert(result.getLabels(), this::convert)); dest.setParameters(getParameters(result)); dest.addLabelIfNotExists(RESULT_FORMAT, ALLURE2_RESULTS_FORMAT); if (hasTestStage(result)) { dest.setTestStage(getTestStage(resultsDirectory, visitor, result)); } final List<TestResultContainer> parents = findAllParents(groups, result.getUuid(), new HashSet<>()); dest.getBeforeStages().addAll(getStages(parents, fixture -> getBefore(resultsDirectory, visitor, fixture))); dest.getAfterStages().addAll(getStages(parents, fixture -> getAfter(resultsDirectory, visitor, fixture))); visitor.visitTestResult(dest); }
private StageResult convert(final Path source, final ResultsVisitor visitor, final FixtureResult result) { final StageResult stageResult = new StageResult() .setName(result.getName()) .setTime(convert(result.getStart(), result.getStop())) .setStatus(convert(result.getStatus())) .setSteps(convert(result.getSteps(), step -> convert(source, visitor, step))) .setDescription(result.getDescription()) .setDescriptionHtml(result.getDescriptionHtml()) .setAttachments(convert(result.getAttachments(), attach -> convert(source, visitor, attach))) .setParameters(convert(result.getParameters(), this::convert)); Optional.of(result) .map(ExecutableItem::getStatusDetails) .ifPresent(statusDetails -> { stageResult.setStatusMessage(statusDetails.getMessage()); stageResult.setStatusTrace(statusDetails.getTrace()); }); return stageResult; }
private Step convert(final Path source, final ResultsVisitor visitor, final StepResult step) { final Step result = new Step() .setName(step.getName()) .setStatus(convert(step.getStatus())) .setTime(convert(step.getStart(), step.getStop())) .setParameters(convert(step.getParameters(), this::convert)) .setAttachments(convert(step.getAttachments(), attachment -> convert(source, visitor, attachment))) .setSteps(convert(step.getSteps(), s -> convert(source, visitor, s))); Optional.of(step) .map(ExecutableItem::getStatusDetails) .ifPresent(statusDetails -> { result.setStatusMessage(statusDetails.getMessage()); result.setStatusTrace(statusDetails.getTrace()); }); return result; }
private StageResult getTestStage(final Path source, final ResultsVisitor visitor, final TestResult result) { final StageResult testStage = new StageResult(); testStage.setSteps(convert(result.getSteps(), step -> convert(source, visitor, step))); testStage.setAttachments(convert(result.getAttachments(), attachment -> convert(source, visitor, attachment))); testStage.setStatus(convert(result.getStatus())); testStage.setDescription(result.getDescription()); testStage.setDescriptionHtml(result.getDescriptionHtml()); Optional.of(result) .map(ExecutableItem::getStatusDetails) .ifPresent(statusDetails -> { testStage.setStatusMessage(statusDetails.getMessage()); testStage.setStatusTrace(statusDetails.getTrace()); }); return testStage; }
public static TestResult randomTestResult() throws IOException { long start = randomStart(); return new TestResult() .withName(randomTestResultName()) .withStart(start) .withStop(start + randomDuration()); }
private Attachment convert(final Path source, final ResultsVisitor visitor, final io.qameta.allure.model.Attachment attachment) { final Path attachmentFile = source.resolve(attachment.getSource()); if (Files.isRegularFile(attachmentFile)) { final Attachment found = visitor.visitAttachmentFile(attachmentFile); if (nonNull(attachment.getType())) { found.setType(attachment.getType()); } if (nonNull(attachment.getName())) { found.setName(attachment.getName()); } return found; } else { visitor.error("Could not find attachment " + attachment.getSource() + " in directory " + source); return new Attachment() .setType(attachment.getType()) .setName(attachment.getName()) .setSize(0L); } }
private Stream<StageResult> getBefore(final Path source, final ResultsVisitor visitor, final TestResultContainer container) { return convert(container.getBefores(), fixture -> convert(source, visitor, fixture)).stream() .sorted(BY_START); }
private Stream<StageResult> getAfter(final Path source, final ResultsVisitor visitor, final TestResultContainer container) { return convert(container.getAfters(), fixture -> convert(source, visitor, fixture)).stream() .sorted(BY_START); }
private Status convert(final io.qameta.allure.model.Status status) { if (Objects.isNull(status)) { return Status.UNKNOWN; } return Stream.of(Status.values()) .filter(item -> item.value().equalsIgnoreCase(status.value())) .findAny() .orElse(Status.UNKNOWN); }
private List<Parameter> getParameters(final TestResult result) { final TreeSet<Parameter> parametersSet = new TreeSet<>( comparing(Parameter::getName, nullsFirst(naturalOrder())) .thenComparing(Parameter::getValue, nullsFirst(naturalOrder())) ); parametersSet.addAll(convert(result.getParameters(), this::convert)); return new ArrayList<>(parametersSet); }
private List<TestResultContainer> findAllParents(final List<TestResultContainer> groups, final String id, final Set<String> seen) { final List<TestResultContainer> result = new ArrayList<>(); final List<TestResultContainer> parents = findParents(groups, id, seen); result.addAll(parents); for (TestResultContainer container : parents) { result.addAll(findAllParents(groups, container.getUuid(), seen)); } return result; }
@Override public FixtureResult withStart(Long value) { setStart(value); return this; }
@Override public FixtureResult withStatus(Status value) { setStatus(value); return this; }
@Override public FixtureResult withDescription(String value) { setDescription(value); return this; }
@Override public FixtureResult withDescriptionHtml(String value) { setDescriptionHtml(value); return this; }