]> source.dussan.org Git - sonarqube.git/commitdiff
Restore search of all rules for SQALE
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 16 Mar 2015 15:57:33 +0000 (16:57 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 16 Mar 2015 15:57:33 +0000 (16:57 +0100)
server/sonar-server/src/main/java/org/sonar/server/rule/RubyRuleService.java
server/sonar-server/src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java

index d74a98a06bcb5cf30b8dfb80dc99acc36b6ca612..12227d24e2698ba49f885d9bee2517cbd19be57c 100644 (file)
@@ -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<Rule> result = service.search(query, options);
-    return new PagedResult<Rule>(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<Rule> result = service.search(query, options);
+      return new PagedResult<>(result.getHits(), PagingResult.create(options.getLimit(), pageIndex, result.getTotal()));
+    } else {
+      List<Rule> rules = newArrayList(service.search(query, new QueryContext().setScroll(true)).scroll());
+      return new PagedResult<>(rules, PagingResult.create(Integer.MAX_VALUE, 1, rules.size()));
+    }
   }
 
   /**
index 42b11bfb467443053100ac49c7ee128e84b7ce76..777f540f15d3168c0ad5dff7048333a0870f7c9b 100644 (file)
@@ -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<Rule> 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<String, Object> params = newHashMap();
+    params.put("pageSize", "-1");
+    PagedResult<Rule> 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));