Skip to content

Commit 0a927fd

Browse files
bruce121Aias00Copilot
authored
Fix: RuleServiceImpl#searchByPage() Selectors now populated from namespace only when condition selectors are null or empty. (#6305)
* fix admin : only populate selectors from namespace when condition selectors are null or empty. * Update shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: aias00 <liuhongyu@apache.org> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 87e0fe8 commit 0a927fd

2 files changed

Lines changed: 49 additions & 14 deletions

File tree

shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
import java.util.ArrayList;
6868
import java.util.Collections;
6969
import java.util.HashSet;
70-
import java.util.LinkedHashSet;
7170
import java.util.List;
7271
import java.util.Map;
7372
import java.util.Objects;
@@ -119,19 +118,15 @@ public PageInfo<RuleVO> searchByPage(final PageCondition<RuleQueryCondition> pag
119118
RuleQueryCondition condition = pageCondition.getCondition();
120119
doConditionPreProcessing(condition);
121120
condition.init();
122-
List<String> namespaceSelectors = Optional.ofNullable(selectorMapper.selectAllByNamespaceId(condition.getNamespaceId()))
123-
.map(list -> list.stream().map(SelectorDO::getId).collect(Collectors.toList()))
124-
.orElse(Collections.emptyList());
125121

126-
List<String> finalSelectors = Optional.ofNullable(condition.getSelectors())
127-
.orElseGet(Collections::emptyList);
128-
129-
if (!namespaceSelectors.isEmpty()) {
130-
Set<String> selectorSet = new LinkedHashSet<>(finalSelectors);
131-
selectorSet.addAll(namespaceSelectors);
132-
finalSelectors = new ArrayList<>(selectorSet);
122+
if (CollectionUtils.isEmpty(condition.getSelectors())) {
123+
// Populate selectors from the namespace only when condition selectors are null or empty.
124+
List<String> namespaceSelectors = Optional.ofNullable(selectorMapper.selectAllByNamespaceId(condition.getNamespaceId()))
125+
.map(list -> list.stream().map(SelectorDO::getId).collect(Collectors.toList()))
126+
.orElse(Collections.emptyList());
127+
condition.setSelectors(namespaceSelectors);
133128
}
134-
condition.setSelectors(finalSelectors);
129+
135130
PageHelper.startPage(pageCondition.getPageNum(), pageCondition.getPageSize());
136131
final Page<RuleDO> doList = CastUtils.cast(ruleMapper.selectByCondition(condition));
137132
PageInfo<RuleVO> doPageInfo = doList.toPageInfo(RuleVO::buildRuleVO);

shenyu-admin/src/test/java/org/apache/shenyu/admin/service/RuleServiceTest.java

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,8 @@ public void testSearchByPage() {
278278
testSelectorMergeScenario(
279279
new ArrayList<>(Arrays.asList("s1", "s3")),
280280
Arrays.asList(selectorDO1, selectorDO2),
281-
3,
282-
Arrays.asList("s1", "s2", "s3")
281+
2,
282+
Arrays.asList("s1", "s3")
283283
);
284284

285285
testSelectorMergeScenario(
@@ -295,6 +295,46 @@ public void testSearchByPage() {
295295
2,
296296
Arrays.asList("s1", "s2")
297297
);
298+
299+
testSearchByPageWithSpecifiedSelectors();
300+
testSearchByPageExpandsNamespaceSelectorsWhenSelectorsEmpty();
301+
}
302+
303+
private void testSearchByPageWithSpecifiedSelectors() {
304+
Page<RuleDO> emptyPage = new Page<>();
305+
PageCondition<RuleQueryCondition> pageCondition = buildPageCondition();
306+
RuleQueryCondition condition = pageCondition.getCondition();
307+
List<String> userSelectors = new ArrayList<>(Arrays.asList("s1", "s3"));
308+
SelectorDO selectorDO1 = SelectorDO.builder().id("s1").build();
309+
SelectorDO selectorDO2 = SelectorDO.builder().id("s2").build();
310+
condition.setSelectors(userSelectors);
311+
312+
given(this.selectorMapper.selectAllByNamespaceId(anyString())).willReturn(Arrays.asList(selectorDO1, selectorDO2));
313+
given(this.ruleMapper.selectByCondition(any(RuleQueryCondition.class))).willReturn(emptyPage);
314+
315+
PageInfo<RuleVO> result = ruleService.searchByPage(pageCondition);
316+
317+
assertNotNull(result);
318+
assertEquals(2, condition.getSelectors().size());
319+
assertTrue(condition.getSelectors().containsAll(Arrays.asList("s1", "s3")));
320+
}
321+
322+
private void testSearchByPageExpandsNamespaceSelectorsWhenSelectorsEmpty() {
323+
Page<RuleDO> emptyPage = new Page<>();
324+
PageCondition<RuleQueryCondition> pageCondition = buildPageCondition();
325+
RuleQueryCondition condition = pageCondition.getCondition();
326+
SelectorDO selectorDO1 = SelectorDO.builder().id("s1").build();
327+
SelectorDO selectorDO2 = SelectorDO.builder().id("s2").build();
328+
condition.setSelectors(Collections.emptyList());
329+
330+
given(this.selectorMapper.selectAllByNamespaceId(anyString())).willReturn(Arrays.asList(selectorDO1, selectorDO2));
331+
given(this.ruleMapper.selectByCondition(any(RuleQueryCondition.class))).willReturn(emptyPage);
332+
333+
PageInfo<RuleVO> result = ruleService.searchByPage(pageCondition);
334+
335+
assertNotNull(result);
336+
assertEquals(2, condition.getSelectors().size());
337+
assertTrue(condition.getSelectors().containsAll(Arrays.asList("s1", "s2")));
298338
}
299339

300340
private void testSelectorMergeScenario(final List<String> userSelectors,

0 commit comments

Comments
 (0)