package net.thucydides.core.statistics.service;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import net.thucydides.core.ThucydidesSystemProperty;
import net.thucydides.core.guice.Injectors;
import net.thucydides.core.model.Story;
import net.thucydides.core.model.TestOutcome;
import net.thucydides.core.model.TestTag;
import net.thucydides.core.model.features.ApplicationFeature;
import net.thucydides.core.requirements.CoreTagProvider;
import net.thucydides.core.util.EnvironmentVariables;
import java.util.Set;
/**
* Legacy tag provider that builds tags based on the Feature/Story structure, if the @WithTag annotation is not used.
* If the @WithTag annotation is used, @Feature classes will not be used.
*/
public class FeatureStoryTagProvider implements TagProvider, CoreTagProvider {
private final EnvironmentVariables environmentVariables;
public FeatureStoryTagProvider() {
this(Injectors.getInjector().getProvider(EnvironmentVariables.class).get() );
}
public FeatureStoryTagProvider(EnvironmentVariables environmentVariables) {
this.environmentVariables = environmentVariables;
}
public Set<TestTag> getTagsFor(final TestOutcome testOutcome) {
Set<TestTag> tags = Sets.newHashSet();
addStoryTagIfPresent(testOutcome, tags);
addFeatureTagIfPresent(testOutcome, tags);
return ImmutableSet.copyOf(tags);
}
private void addStoryTagIfPresent(TestOutcome testOutcome, Set<TestTag> tags) {
Story story = testOutcome.getUserStory();
if (story != null && shouldAddStoryTags()) {
tags.add(story.asTag());
}
}
private boolean shouldAddStoryTags() {
return environmentVariables.getPropertyAsBoolean(ThucydidesSystemProperty.USE_TEST_CASE_FOR_STORY_TAG,true);
}
private void addFeatureTagIfPresent(TestOutcome testOutcome, Set<TestTag> tags) {
ApplicationFeature feature = testOutcome.getFeature();
if (feature != null) {
tags.add(TestTag.withName(feature.getName()).andType("feature"));
}
}
}