private void verify(Consumer<TestRequest> requestPopulator, RuleDefinitionDto... expectedRules) { TestRequest request = ws.newRequest(); requestPopulator.accept(request); Rules.SearchResponse response = request .executeProtobuf(Rules.SearchResponse.class); assertThat(response.getP()).isEqualTo(1); RuleKey[] expectedRuleKeys = stream(expectedRules).map(RuleDefinitionDto::getKey).collect(MoreCollectors.toList()).toArray(new RuleKey[0]); assertThat(response.getRulesList()) .extracting(r -> RuleKey.parse(r.getKey())) .containsExactlyInAnyOrder(expectedRuleKeys); assertThat(response.getTotal()).isEqualTo(expectedRules.length); assertThat(response.getRulesCount()).isEqualTo(expectedRules.length); }
@SafeVarargs private final <T> void checkField(RuleDefinitionDto rule, String fieldName, Extractor<Rule, T> responseExtractor, T... expected) { SearchResponse result = ws.newRequest() .setParam("f", fieldName) .executeProtobuf(SearchResponse.class); assertThat(result.getRulesList()).extracting(Rule::getKey).containsExactly(rule.getKey().toString()); assertThat(result.getRulesList()).extracting(responseExtractor).containsExactly(expected); }
private static List<LoadedActiveRule> readPage(SearchResponse response) { List<LoadedActiveRule> loadedRules = new LinkedList<>(); List<Rule> rulesList = response.getRulesList(); Map<String, ActiveList> actives = response.getActives().getActives();
private static void readPage(Rules.Builder rulesBuilder, Map<String, ActiveRules.Builder> activeRulesBuildersByQProfile, SearchResponse response) { Builder ruleBuilder = Rules.Rule.newBuilder(); for (Rule r : response.getRulesList()) { RuleKey ruleKey = RuleKey.parse(r.getKey());
private static List<LoadedActiveRule> readPage(SearchResponse response) { List<LoadedActiveRule> loadedRules = new LinkedList<>(); List<Rule> rulesList = response.getRulesList(); Map<String, ActiveList> actives = response.getActives().getActives();
private static List<LoadedActiveRule> readPage(SearchResponse response) { List<LoadedActiveRule> loadedRules = new LinkedList<>(); List<Rule> rulesList = response.getRulesList(); Map<String, ActiveList> actives = response.getActives().getActives();
.executeProtobuf(SearchResponse.class); assertThat(result.getRulesList()) .extracting(Rule::getKey) .containsExactlyInAnyOrder(
@Test public void compare_to_another_profile() { OrganizationDto organization = db.organizations().insert(); QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(JAVA)); QProfileDto anotherProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(JAVA)); RuleDefinitionDto commonRule = db.rules().insertRule(r -> r.setLanguage(JAVA)).getDefinition(); RuleDefinitionDto profileRule1 = db.rules().insertRule(r -> r.setLanguage(JAVA)).getDefinition(); RuleDefinitionDto profileRule2 = db.rules().insertRule(r -> r.setLanguage(JAVA)).getDefinition(); RuleDefinitionDto profileRule3 = db.rules().insertRule(r -> r.setLanguage(JAVA)).getDefinition(); RuleDefinitionDto anotherProfileRule1 = db.rules().insertRule(r -> r.setLanguage(JAVA)).getDefinition(); RuleDefinitionDto anotherProfileRule2 = db.rules().insertRule(r -> r.setLanguage(JAVA)).getDefinition(); db.qualityProfiles().activateRule(profile, commonRule); db.qualityProfiles().activateRule(profile, profileRule1); db.qualityProfiles().activateRule(profile, profileRule2); db.qualityProfiles().activateRule(profile, profileRule3); db.qualityProfiles().activateRule(anotherProfile, commonRule); db.qualityProfiles().activateRule(anotherProfile, anotherProfileRule1); db.qualityProfiles().activateRule(anotherProfile, anotherProfileRule2); indexRules(); indexActiveRules(); SearchResponse result = ws.newRequest() .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QPROFILE, profile.getKee()) .setParam(PARAM_ACTIVATION, "false") .setParam(PARAM_COMPARE_TO_PROFILE, anotherProfile.getKee()) .executeProtobuf(SearchResponse.class); assertThat(result.getRulesList()) .extracting(Rule::getKey) .containsExactlyInAnyOrder(anotherProfileRule1.getKey().toString(), anotherProfileRule2.getKey().toString()); }
@Test public void search_for_active_rules_is_ignored_when_not_member_of_paid_organization() { OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); // Rule1 is activated on profile RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("java")); RuleActivation activation = RuleActivation.create(rule1.getId(), BLOCKER, null); qProfileRules.activateAndCommit(db.getSession(), profile, singleton(activation)); // Rule2 is not activated RuleDefinitionDto rule2 = db.rules().insert(r -> r.setLanguage("java")); indexRules(); SearchResponse result = ws.newRequest() .setParam(FIELDS, "actives") .setParam(PARAM_QPROFILE, profile.getKee()) .setParam(PARAM_ACTIVATION, "true") .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(SearchResponse.class); // the 2 rules are returned as filter on profile is ignored assertThat(result.getRulesList()).extracting(Rule::getKey) .containsExactlyInAnyOrder(rule1.getKey().toString(), rule2.getKey().toString()); }
@Test public void return_note_login() { OrganizationDto organization = db.organizations().insert(); UserDto user1 = db.users().insertUser(); RuleDefinitionDto rule1 = db.rules().insert(); db.rules().insertOrUpdateMetadata(rule1, user1, organization); UserDto disableUser = db.users().insertDisabledUser(); RuleDefinitionDto rule2 = db.rules().insert(); db.rules().insertOrUpdateMetadata(rule2, disableUser, organization); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "noteLogin") .setParam("organization", organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getRulesList()) .extracting(Rule::getKey, Rule::getNoteLogin) .containsExactlyInAnyOrder( tuple(rule1.getKey().toString(), user1.getLogin()), tuple(rule2.getKey().toString(), disableUser.getLogin())); }
@Test public void should_not_return_tags_of_foreign_organization() { OrganizationDto organizationWithSpecificTags = db.organizations().insert(); OrganizationDto myOrganization = db.organizations().insert(); RuleDefinitionDto rule = db.rules().insert(setSystemTags("system1", "system2")); insertMetadata(organizationWithSpecificTags, rule, setTags("tag1", "tag2")); indexRules(); SearchResponse result = ws.newRequest() .setParam("facets", "tags") .setParam("f", "tags") .setParam("organization", myOrganization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getRulesList()).extracting(Rule::getKey).containsExactly(rule.getKey().toString()); assertThat(result.getFacets().getFacets(0).getValuesList()) .extracting(v -> tuple(v.getVal(), v.getCount())) .containsExactly( tuple("system1", 1L), tuple("system2", 1L)); }
@Test public void search_for_active_rules_when_member_of_paid_organization() { OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); // Rule1 is activated on profile RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("java")); RuleActivation activation = RuleActivation.create(rule1.getId(), BLOCKER, null); qProfileRules.activateAndCommit(db.getSession(), profile, singleton(activation)); // Rule2 is not activated RuleDefinitionDto rule2 = db.rules().insert(r -> r.setLanguage("java")); userSession.logIn(db.users().insertUser()).addMembership(organization); indexRules(); SearchResponse result = ws.newRequest() .setParam(FIELDS, "actives") .setParam(PARAM_QPROFILE, profile.getKee()) .setParam(PARAM_ACTIVATION, "true") .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getRulesList()).extracting(Rule::getKey) .containsExactlyInAnyOrder(rule1.getKey().toString()); }
@Test public void statuses_facet_should_be_sticky() { RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("java")); RuleDefinitionDto rule2 = db.rules().insert(r -> r.setLanguage("java").setStatus(RuleStatus.BETA)); RuleDefinitionDto rule3 = db.rules().insert(r -> r.setLanguage("java").setStatus(RuleStatus.DEPRECATED)); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "status") .setParam("status", "DEPRECATED") .executeProtobuf(SearchResponse.class); assertThat(result.getRulesCount()).isEqualTo(3); assertThat(result.getRulesList()).extracting("key", "status.name").containsExactlyInAnyOrder( tuple(rule1.getKey().toString(), rule1.getStatus().name()), tuple(rule2.getKey().toString(), rule2.getStatus().name()), tuple(rule3.getKey().toString(), rule3.getStatus().name())); }
@Test public void should_return_organization_specific_tags() { OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java")); RuleMetadataDto metadata = insertMetadata(organization, rule, setTags("tag1", "tag2")); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "tags") .setParam("organization", organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getRulesList()).extracting(Rule::getKey).containsExactly(rule.getKey().toString()); assertThat(result.getRulesList()) .extracting(Rule::getTags).flatExtracting(Rules.Tags::getTagsList) .containsExactly(metadata.getTags().toArray(new String[0])); }