@Test
public void findWithMultipleTagTypes() {
Tag rootTag = Tags.tag(Tags.ROOT_TAG, "root");
Tag tagA = Tags.tag("A", "inputA", rootTag);
Tag tagB = Tags.tag("B", "inputB", rootTag);
Tag tagC1 = Tags.tag("C", "inputC1", tagB);
Tag tagC2 = Tags.tag("C", "inputC2", tagB);
Tag tagD1 = Tags.tag("D", "inputD1", tagA);
Tag tagD2 = Tags.tag("D", "inputD2", tagA);
RuleOutput outputA = new RuleOutput("RuleA", "A", Collections.<ConditionFailure> emptySet(), Collections.singleton(tagA));
RuleOutput outputB = new RuleOutput("RuleB", "B", Collections.<ConditionFailure> emptySet(), Collections.singleton(tagB));
RuleOutput outputC = new RuleOutput("RuleC", "C", Collections.<ConditionFailure> emptySet(), Arrays.asList(tagC1, tagC2));
RuleOutput outputD1 = new RuleOutput("RuleD", "D", Collections.<ConditionFailure> emptySet(), Collections.singleton(tagD1));
RuleOutput outputD2 = new RuleOutput("RuleD", "D", Collections.<ConditionFailure> emptySet(), Collections.singleton(tagD2));
storage.store(Arrays.asList(outputA, outputB, outputC, outputD1, outputD2));
Collection<RuleOutput> outputs = storage.findLatestResultsByTagType(new HashSet<>(Arrays.asList("D", "C")));
assertThat(outputs, hasSize(3));
assertThat(outputs, containsInAnyOrder(outputD1, outputD2, outputC));
}
}