diff --git a/client/src/main/java/io/split/client/dtos/ExcludedSegments.java b/client/src/main/java/io/split/client/dtos/ExcludedSegments.java index 721a802d..9e65fa60 100644 --- a/client/src/main/java/io/split/client/dtos/ExcludedSegments.java +++ b/client/src/main/java/io/split/client/dtos/ExcludedSegments.java @@ -20,4 +20,8 @@ public boolean isStandard() { public boolean isRuleBased() { return RULE_BASED_TYPE.equals(type); } + + public String getSegmentName(){ + return name; + } } diff --git a/client/src/main/java/io/split/client/dtos/RuleBasedSegment.java b/client/src/main/java/io/split/client/dtos/RuleBasedSegment.java index 6643a4e7..56c4756d 100644 --- a/client/src/main/java/io/split/client/dtos/RuleBasedSegment.java +++ b/client/src/main/java/io/split/client/dtos/RuleBasedSegment.java @@ -1,6 +1,6 @@ package io.split.client.dtos; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; public class RuleBasedSegment { @@ -17,7 +17,21 @@ public String toString() { "name='" + name + '\'' + ", status=" + status + ", trafficTypeName='" + trafficTypeName + '\'' + - ", changeNumber=" + changeNumber + + ", changeNumber=" + changeNumber + '\'' + + excludedToString() + '\'' + '}'; } + + public String excludedToString() { + Excluded ts = excluded != null ? excluded : new Excluded(); + if (ts.keys == null) { + ts.keys = new ArrayList<>(); + } + + if (ts.segments == null) { + ts.segments = new ArrayList<>(); + } + + return ", excludedKeys=" + ts.keys + '\'' + ", excludedSegments=" + ts.segments; + } } diff --git a/client/src/main/java/io/split/engine/experiments/ParsedRuleBasedSegment.java b/client/src/main/java/io/split/engine/experiments/ParsedRuleBasedSegment.java index 6cd7a4ba..c0043970 100644 --- a/client/src/main/java/io/split/engine/experiments/ParsedRuleBasedSegment.java +++ b/client/src/main/java/io/split/engine/experiments/ParsedRuleBasedSegment.java @@ -107,12 +107,20 @@ public String toString() { } public Set getSegmentsNames() { - return parsedConditions().stream() + Set segmentNames = excludedSegments() + .stream() + .filter(ExcludedSegments::isStandard) + .map(ExcludedSegments::getSegmentName) + .collect(Collectors.toSet()); + + segmentNames.addAll(parsedConditions().stream() .flatMap(parsedCondition -> parsedCondition.matcher().attributeMatchers().stream()) .filter(ParsedRuleBasedSegment::isSegmentMatcher) .map(ParsedRuleBasedSegment::asSegmentMatcherForEach) .map(UserDefinedSegmentMatcher::getSegmentName) - .collect(Collectors.toSet()); + .collect(Collectors.toSet())); + + return segmentNames; } private static boolean isSegmentMatcher(AttributeMatcher attributeMatcher) { diff --git a/client/src/test/java/io/split/engine/experiments/ParsedRuleBasedSegmentTest.java b/client/src/test/java/io/split/engine/experiments/ParsedRuleBasedSegmentTest.java index 9915207b..25363681 100644 --- a/client/src/test/java/io/split/engine/experiments/ParsedRuleBasedSegmentTest.java +++ b/client/src/test/java/io/split/engine/experiments/ParsedRuleBasedSegmentTest.java @@ -34,7 +34,7 @@ public void works() { Lists.newArrayList(new ParsedCondition(ConditionType.WHITELIST, segmentCombiningMatcher, null, "label")), "user", 123, Lists.newArrayList("mauro@test.io", "gaston@test.io"), excludedSegments); - Assert.assertEquals(Sets.newHashSet("employees"), parsedRuleBasedSegment.getSegmentsNames()); + Assert.assertEquals(Sets.newHashSet("segment2", "segment1", "employees"), parsedRuleBasedSegment.getSegmentsNames()); Assert.assertEquals("another_rule_based_segment", parsedRuleBasedSegment.ruleBasedSegment()); Assert.assertEquals(Lists.newArrayList(new ParsedCondition(ConditionType.WHITELIST, segmentCombiningMatcher, null, "label")), parsedRuleBasedSegment.parsedConditions()); diff --git a/client/src/test/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImplTest.java b/client/src/test/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImplTest.java index 1b59b7c7..32487bf5 100644 --- a/client/src/test/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImplTest.java +++ b/client/src/test/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImplTest.java @@ -61,6 +61,6 @@ public void testMultipleSegment(){ ruleBasedSegmentCache.update(Lists.newArrayList(parsedRuleBasedSegment1, parsedRuleBasedSegment2), null, 123); assertEquals(Lists.newArrayList("another_rule_based_segment", "sample_rule_based_segment"), ruleBasedSegmentCache.ruleBasedSegmentNames()); - assertEquals(Sets.newHashSet("employees"), ruleBasedSegmentCache.getSegments()); + assertEquals(Sets.newHashSet("segment2", "segment1", "employees"), ruleBasedSegmentCache.getSegments()); } } \ No newline at end of file