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); }
@Test public void return_empty_result() { Rules.SearchResponse response = ws.newRequest() .setParam(WebService.Param.FIELDS, "actives") .executeProtobuf(Rules.SearchResponse.class); assertThat(response.getTotal()).isEqualTo(0L); assertThat(response.getP()).isEqualTo(1); assertThat(response.getRulesCount()).isEqualTo(0); }
@Test public void search_debt_rules_with_default_and_overridden_debt_values() { RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java") .setDefRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.name()) .setDefRemediationGapMultiplier("1h") .setDefRemediationBaseEffort("15min")); RuleMetadataDto metadata = insertMetadata(db.getDefaultOrganization(), rule, r -> r.setRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.name()) .setRemediationGapMultiplier("2h") .setRemediationBaseEffort("25min")); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "debtRemFn,debtOverloaded,defaultDebtRemFn") .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getDefaultDebtRemFnCoeff()).isEqualTo("1h"); assertThat(searchedRule.getDefaultDebtRemFnOffset()).isEqualTo("15min"); assertThat(searchedRule.getDefaultDebtRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); assertThat(searchedRule.getDefaultRemFnBaseEffort()).isEqualTo("15min"); assertThat(searchedRule.getDefaultRemFnGapMultiplier()).isEqualTo("1h"); assertThat(searchedRule.getDefaultRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); assertThat(searchedRule.getDebtOverloaded()).isTrue(); assertThat(searchedRule.getDebtRemFnCoeff()).isEqualTo("2h"); assertThat(searchedRule.getDebtRemFnOffset()).isEqualTo("25min"); assertThat(searchedRule.getDebtRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); }
.executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); assertThat(result.getActives()).isNotNull(); assertThat(result.getActives().getActives().get(rule.getKey().toString())).isNotNull();
assertThat(result.getRulesCount()).isEqualTo(1); assertThat(result.getActives()).isNotNull(); assertThat(result.getActives().getActives().get(rule.getKey().toString())).isNotNull();
@Test public void search_debt_rules_with_default_linear_offset_and_overridden_linear_debt() { RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java") .setDefRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.name()) .setDefRemediationGapMultiplier("1h") .setDefRemediationBaseEffort("15min")); RuleMetadataDto metadata = insertMetadata(db.getDefaultOrganization(), rule, r -> r.setRemediationFunction(DebtRemediationFunction.Type.LINEAR.name()) .setRemediationGapMultiplier("1h") .setRemediationBaseEffort(null)); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "debtRemFn,debtOverloaded,defaultDebtRemFn") .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getDefaultDebtRemFnCoeff()).isEqualTo("1h"); assertThat(searchedRule.getDefaultDebtRemFnOffset()).isEqualTo("15min"); assertThat(searchedRule.getDefaultDebtRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); assertThat(searchedRule.getDefaultRemFnBaseEffort()).isEqualTo("15min"); assertThat(searchedRule.getDefaultRemFnGapMultiplier()).isEqualTo("1h"); assertThat(searchedRule.getDefaultRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); assertThat(searchedRule.getDebtOverloaded()).isTrue(); assertThat(searchedRule.getDebtRemFnCoeff()).isEqualTo("1h"); assertThat(searchedRule.getDebtRemFnOffset()).isEmpty(); assertThat(searchedRule.getDebtRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR.name()); }
@Test public void search_debt_rules_with_default_linear_offset_and_overridden_constant_debt() { RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java") .setDefRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.name()) .setDefRemediationGapMultiplier("1h") .setDefRemediationBaseEffort("15min")); RuleMetadataDto metadata = insertMetadata(db.getDefaultOrganization(), rule, r -> r.setRemediationFunction(DebtRemediationFunction.Type.CONSTANT_ISSUE.name()) .setRemediationGapMultiplier(null) .setRemediationBaseEffort("5min")); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "debtRemFn,debtOverloaded,defaultDebtRemFn") .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getDefaultDebtRemFnCoeff()).isEqualTo("1h"); assertThat(searchedRule.getDefaultDebtRemFnOffset()).isEqualTo("15min"); assertThat(searchedRule.getDefaultDebtRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); assertThat(searchedRule.getDefaultRemFnBaseEffort()).isEqualTo("15min"); assertThat(searchedRule.getDefaultRemFnGapMultiplier()).isEqualTo("1h"); assertThat(searchedRule.getDefaultRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); assertThat(searchedRule.getDebtOverloaded()).isTrue(); assertThat(searchedRule.getDebtRemFnCoeff()).isEmpty(); assertThat(searchedRule.getDebtRemFnOffset()).isEqualTo("5min"); assertThat(searchedRule.getDebtRemFnType()).isEqualTo(DebtRemediationFunction.Type.CONSTANT_ISSUE.name()); }
@Test public void search_custom_rules_from_template_key() { RuleDefinitionDto templateRule = db.rules().insert(r -> r.setLanguage("java") .setIsTemplate(true)); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java") .setTemplateId(templateRule.getId())); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "templateKey") .setParam("template_key", templateRule.getRepositoryKey() + ":" + templateRule.getRuleKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getKey()).isEqualTo(rule.getRepositoryKey() + ":" + rule.getRuleKey()); assertThat(searchedRule.getTemplateKey()).isEqualTo(templateRule.getRepositoryKey() + ":" + templateRule.getRuleKey()); }
@Test public void search_template_rules() { RuleDefinitionDto templateRule = db.rules().insert(r -> r.setLanguage("java") .setIsTemplate(true)); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java") .setTemplateId(templateRule.getId())); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "isTemplate") .setParam("is_template", "true") .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getIsTemplate()).isTrue(); assertThat(searchedRule.getKey()).isEqualTo(templateRule.getRepositoryKey() + ":" + templateRule.getRuleKey()); }
@Test public void search_all_active_rules() { OrganizationDto organization = db.organizations().insert(); QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java")); RuleActivation activation = RuleActivation.create(rule.getId(), BLOCKER, null); qProfileRules.activateAndCommit(db.getSession(), profile, singleton(activation)); indexRules(); SearchResponse result = ws.newRequest() .setParam("q", rule.getName()) .setParam("activation", "true") .setParam("organization", organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getKey()).isEqualTo(rule.getRepositoryKey() + ":" + rule.getRuleKey()); assertThat(searchedRule.getName()).isEqualTo(rule.getName()); }
@Test public void active_rules_are_returned_when_member_of_paid_organization() { OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java")); RuleActivation activation = RuleActivation.create(rule.getId(), BLOCKER, null); qProfileRules.activateAndCommit(db.getSession(), profile, singleton(activation)); userSession.logIn(db.users().insertUser()).addMembership(organization); indexRules(); SearchResponse result = ws.newRequest() .setParam(FIELDS, "actives") .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getRulesCount()).isEqualTo(1); assertThat(result.getActives().getActivesMap()).isNotEmpty(); }
@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 return_lang_key_field_when_language_name_is_not_available() { OrganizationDto organization = db.organizations().insert(); String unknownLanguage = "unknown_" + randomAlphanumeric(5); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage(unknownLanguage)); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "langName") .setParam("organization", organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getLangName()).isEqualTo(unknownLanguage); }
@Test public void active_rules_are_not_returned_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")); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java")); RuleActivation activation = RuleActivation.create(rule.getId(), BLOCKER, null); qProfileRules.activateAndCommit(db.getSession(), profile, singleton(activation)); indexRules(); SearchResponse result = ws.newRequest() .setParam(FIELDS, "actives") .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getRulesCount()).isEqualTo(1); assertThat(result.getActives().getActivesMap()).isEmpty(); }
@Test public void do_not_return_external_rule() { db.rules().insert(r -> r.setIsExternal(true)); indexRules(); SearchResponse result = ws.newRequest().executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isZero(); assertThat(result.getRulesCount()).isZero(); }