import org.sonar.api.ServerComponent;
import org.sonar.api.rule.RuleKey;
+import org.sonar.server.rule.ProfileRuleQuery;
+import org.sonar.server.rule.ProfileRules;
import org.sonar.server.user.UserSession;
import java.util.List;
private final QProfileSearch search;
private final QProfileOperations operations;
+ private final ProfileRules rules;
- public QProfiles(QProfileSearch search, QProfileOperations operations) {
+ public QProfiles(QProfileSearch search, QProfileOperations operations, ProfileRules rules) {
this.search = search;
this.operations = operations;
+ this.rules = rules;
}
public List<QProfile> searchProfiles() {
// ACTIVE RULES
- public void searchActiveRules(Integer profileId) {
- throw new UnsupportedOperationException();
+ public QProfileRuleResult searchActiveRules(ProfileRuleQuery query, Paging paging) {
+ return rules.searchActiveRules(query, paging);
}
public void searchInactiveRules(Integer profileId) {
import static org.elasticsearch.index.query.FilterBuilders.*;
import static org.elasticsearch.index.query.QueryBuilders.multiMatchQuery;
+import static org.sonar.server.rule.RuleRegistry.INDEX_RULES;
+import static org.sonar.server.rule.RuleRegistry.TYPE_ACTIVE_RULE;
+import static org.sonar.server.rule.RuleRegistry.TYPE_RULE;
public class ProfileRules {
+ private static final String FIELD_PARENT = "_parent";
+ private static final String FIELD_SOURCE = "_source";
+
private final SearchIndex index;
public ProfileRules(SearchIndex index) {
public QProfileRuleResult searchActiveRules(ProfileRuleQuery query, Paging paging) {
BoolFilterBuilder filter = boolFilter().must(
termFilter("profileId", query.profileId()),
- hasParentFilter("rule", parentRuleFilter(query))
+ hasParentFilter(TYPE_RULE, parentRuleFilter(query))
);
addMustTermOrTerms(filter, "severity", query.severities());
- SearchRequestBuilder builder = index.client().prepareSearch("rules").setTypes("active_rule")
+ SearchRequestBuilder builder = index.client().prepareSearch(INDEX_RULES).setTypes(TYPE_ACTIVE_RULE)
.setFilter(filter)
- .addFields("_source", "_parent")
+ .addFields(FIELD_SOURCE, FIELD_PARENT)
.setSize(paging.pageSize())
.setFrom(paging.offset());
SearchHits hits = index.executeRequest(builder);
List<QProfileRule> result = Lists.newArrayList();
for (SearchHit hit: hits.getHits()) {
activeRuleSources.add(hit.sourceAsMap());
- parentIds[hitCounter] = hit.field("_parent").value();
+ parentIds[hitCounter] = hit.field(FIELD_PARENT).value();
hitCounter ++;
}
if (hitCounter > 0) {
- MultiGetItemResponse[] responses = index.client().prepareMultiGet().add("rules", "rule", parentIds)
+ MultiGetItemResponse[] responses = index.client().prepareMultiGet().add(INDEX_RULES, TYPE_RULE, parentIds)
.execute().actionGet().getResponses();
for (int i = 0; i < hitCounter; i ++) {
*/
public class RuleRegistry {
+ public static final String INDEX_RULES = "rules";
+ public static final String TYPE_RULE = "rule";
+ public static final String TYPE_ACTIVE_RULE = "active_rule";
+
private static final String PARAM_NAMEORKEY = "nameOrKey";
private static final String PARAM_STATUS = "status";
- private static final String INDEX_RULES = "rules";
- private static final String TYPE_RULE = "rule";
- private static final String TYPE_ACTIVE_RULE = "active_rule";
private SearchIndex searchIndex;
private RuleDao ruleDao;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
+import org.sonar.server.rule.ProfileRuleQuery;
+import org.sonar.server.rule.ProfileRules;
import org.sonar.server.user.UserSession;
import java.util.Map;
import static com.google.common.collect.Maps.newHashMap;
+import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class QProfilesTest {
@Mock
QProfileOperations operations;
+ @Mock
+ ProfileRules rules;
+
QProfiles qProfiles;
@Before
public void setUp() throws Exception {
- qProfiles = new QProfiles(search, operations);
+ qProfiles = new QProfiles(search, operations, rules);
}
@Test(expected = UnsupportedOperationException.class)
qProfiles.removeAllProjects(null);
}
- @Test(expected = UnsupportedOperationException.class)
public void testSearchActiveRules() throws Exception {
- qProfiles.searchActiveRules(null);
+ final int profileId = 42;
+ ProfileRuleQuery query = ProfileRuleQuery.create(profileId );
+ Paging paging = Paging.create(20, 1);
+ QProfileRuleResult result = mock(QProfileRuleResult.class);
+ when(rules.searchActiveRules(query, paging)).thenReturn(result);
+ assertThat(qProfiles.searchActiveRules(query, paging)).isEqualTo(result);
}
@Test(expected = UnsupportedOperationException.class)