boolean hasMore = false;
long total = 0L;
if (ruleKeyParam == null) {
- final String ruleSearchParam = request.param("s");
- final int pageSize = request.paramAsInt("ps", 25);
- final int pageIndex = request.paramAsInt("p", 1);
PagedResult<Rule> searchResult = rules.find(RuleQuery.builder()
- .searchQuery(ruleSearchParam)
- .pageSize(pageSize)
- .pageIndex(pageIndex)
- .build());
+ .searchQuery(request.param("s"))
+ .language(request.param("language"))
+ .characteristic(request.param("characteristic"))
+ .pageSize(request.paramAsInt("ps"))
+ .pageIndex(request.paramAsInt("p"))
+ .build());
foundRules = searchResult.results();
hasMore = searchResult.paging().hasNextPage();
total = searchResult.paging().total();
JsonWriter json = response.newJsonWriter();
json.beginObject().name("results").beginArray();
- for(Rule rule: foundRules) {
+ for (Rule rule : foundRules) {
json.beginObject();
writeRule(rule, json);
json.endObject();
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.sonar.api.resources.Language;
import org.sonar.api.resources.Languages;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.server.debt.DebtRemediationFunction;
+import org.sonar.api.server.debt.internal.DefaultDebtRemediationFunction;
import org.sonar.api.server.ws.WsTester;
import org.sonar.server.paging.PagedResult;
import org.sonar.server.paging.PagingResult;
import org.sonar.server.rule.Rules;
import org.sonar.server.user.MockUserSession;
+import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class RuleSearchWsHandlerTest {
.setRepositoryKey("squid")
.setName("Avoid cycle")
.setDescription("Avoid cycle between packages")
- .setLanguage("java");
+ .setLanguage("java")
+ .setDebtCharacteristicKey("REUSABILITY")
+ .setDebtCharacteristicName("Reusability")
+ .setDebtCharacteristicKey("MODULARITY")
+ .setDebtCharacteristicKey("Modularity")
+ .setDebtRemediationFunction(new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET, "1h", "15min"));
WsTester tester;
+ "{'key':'squid:AvoidCycle','name':'Avoid cycle','language':'Java'}"
+ "]}");
}
+
+ @Test
+ public void search_rule_by_language() throws Exception {
+ Rule rule = ruleBuilder.build();
+
+ when(rules.find(any(RuleQuery.class))).thenReturn(
+ new PagedResult<Rule>(ImmutableList.of(rule), PagingResult.create(10, 1, 1)));
+
+ MockUserSession.set();
+ WsTester.TestRequest request = tester.newRequest("list").setParam("language", "java");
+ request.execute().assertJson("{'more':false,'total':1,'results':["
+ + "{'key':'squid:AvoidCycle','name':'Avoid cycle','language':'java'}"
+ + "]}");
+
+ ArgumentCaptor<RuleQuery> ruleQueryCaptor = ArgumentCaptor.forClass(RuleQuery.class);
+ verify(rules).find(ruleQueryCaptor.capture());
+
+ assertThat(ruleQueryCaptor.getValue().language()).isEqualTo("java");
+ }
+
+ @Test
+ public void search_rule_by_characteristic() throws Exception {
+ Rule rule = ruleBuilder.build();
+
+ when(rules.find(any(RuleQuery.class))).thenReturn(
+ new PagedResult<Rule>(ImmutableList.of(rule), PagingResult.create(10, 1, 1)));
+
+ MockUserSession.set();
+ WsTester.TestRequest request = tester.newRequest("list").setParam("characteristic", "MODULARITY");
+ request.execute().assertJson("{'more':false,'total':1,'results':["
+ + "{'key':'squid:AvoidCycle','name':'Avoid cycle','language':'java'}"
+ + "]}");
+
+ ArgumentCaptor<RuleQuery> ruleQueryCaptor = ArgumentCaptor.forClass(RuleQuery.class);
+ verify(rules).find(ruleQueryCaptor.capture());
+
+ assertThat(ruleQueryCaptor.getValue().characteristic()).isEqualTo("MODULARITY");
+ }
}