From 4a97e3539c69b00802f88a30e10a4cbc0d8336d7 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Mon, 16 Mar 2015 16:57:33 +0100 Subject: [PATCH] Restore search of all rules for SQALE --- .../sonar/server/rule/RubyRuleService.java | 15 ++++++++----- .../server/rule/RubyRuleServiceTest.java | 21 +++++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/RubyRuleService.java b/server/sonar-server/src/main/java/org/sonar/server/rule/RubyRuleService.java index d74a98a06bc..12227d24e26 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/RubyRuleService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/RubyRuleService.java @@ -92,11 +92,16 @@ public class RubyRuleService implements ServerComponent, Startable { QueryContext options = new QueryContext(); Integer pageSize = RubyUtils.toInteger(params.get("pageSize")); int size = pageSize != null ? pageSize : 50; - Integer page = RubyUtils.toInteger(params.get("p")); - int pageIndex = page != null ? page : 1; - options.setPage(pageIndex, size); - Result result = service.search(query, options); - return new PagedResult(result.getHits(), PagingResult.create(options.getLimit(), pageIndex, result.getTotal())); + if (size > -1) { + Integer page = RubyUtils.toInteger(params.get("p")); + int pageIndex = page != null ? page : 1; + options.setPage(pageIndex, size); + Result result = service.search(query, options); + return new PagedResult<>(result.getHits(), PagingResult.create(options.getLimit(), pageIndex, result.getTotal())); + } else { + List rules = newArrayList(service.search(query, new QueryContext().setScroll(true)).scroll()); + return new PagedResult<>(rules, PagingResult.create(Integer.MAX_VALUE, 1, rules.size())); + } } /** diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java index 42b11bfb467..777f540f15d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java @@ -30,13 +30,16 @@ import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; +import org.sonar.server.paging.PagedResult; import org.sonar.server.rule.index.RuleQuery; import org.sonar.server.search.QueryContext; import org.sonar.server.search.Result; import org.sonar.server.user.UserSession; import java.util.HashMap; +import java.util.List; +import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Maps.newHashMap; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.any; @@ -135,6 +138,24 @@ public class RubyRuleServiceTest { assertThat(optionsCaptor.getValue().getOffset()).isEqualTo(0); } + @Test + public void search_all_rules() throws Exception { + List rules = newArrayList(mock(Rule.class)); + Result serviceResult = mock(Result.class); + when(serviceResult.scroll()).thenReturn(rules.iterator()); + + when(ruleService.search(any(RuleQuery.class), any(QueryContext.class))).thenReturn(serviceResult); + + HashMap params = newHashMap(); + params.put("pageSize", "-1"); + PagedResult result = service.find(params); + + verify(serviceResult).scroll(); + + verify(ruleService).search(ruleQueryCaptor.capture(), optionsCaptor.capture()); + assertThat(result.paging().pageSize()).isEqualTo(Integer.MAX_VALUE); + } + @Test public void update_rule() throws Exception { when(ruleService.search(any(RuleQuery.class), any(QueryContext.class))).thenReturn(mock(Result.class)); -- 2.39.5