Browse Source

SONAR-16303 Change RuleDescriptionFormatter from a static helper to regular bean

tags/9.5.0.56709
Zipeng WU 2 years ago
parent
commit
b26a95828a
35 changed files with 92 additions and 210 deletions
  1. 2
    0
      server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java
  2. 6
    6
      server/sonar-server-common/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java
  3. 0
    144
      server/sonar-server-common/src/main/java/org/sonar/server/rule/HotspotRuleDescription.java
  4. 1
    3
      server/sonar-server-common/src/main/java/org/sonar/server/rule/RuleDescriptionFormatter.java
  5. 1
    1
      server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleDoc.java
  6. 1
    1
      server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexer.java
  7. 2
    1
      server/sonar-server-common/src/test/java/org/sonar/server/rule/DefaultRuleFinderTest.java
  8. 6
    5
      server/sonar-server-common/src/test/java/org/sonar/server/rule/RuleDescriptionFormatterTest.java
  9. 4
    4
      server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleDocTest.java
  10. 1
    1
      server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java
  11. 7
    5
      server/sonar-webserver-api/src/main/java/org/sonar/server/rule/CachingRuleFinder.java
  12. 5
    3
      server/sonar-webserver-api/src/main/java/org/sonar/server/rule/WebServerRuleFinderImpl.java
  13. 12
    11
      server/sonar-webserver-api/src/test/java/org/sonar/server/rule/CachingRuleFinderTest.java
  14. 1
    1
      server/sonar-webserver-api/src/test/java/org/sonar/server/rule/WebServerRuleFinderImplTest.java
  15. 0
    2
      server/sonar-webserver-core/src/test/java/org/sonar/server/rule/RegisterRulesTest.java
  16. 1
    1
      server/sonar-webserver-es/src/test/java/org/sonar/server/es/RecoveryIndexerTest.java
  17. 4
    2
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleMapper.java
  18. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/WebIssueStorageTest.java
  19. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/AddCommentActionTest.java
  20. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/AssignActionTest.java
  21. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java
  22. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/DoTransitionActionTest.java
  23. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/IssueUpdaterTest.java
  24. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetSeverityActionTest.java
  25. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetTagsActionTest.java
  26. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetTypeActionTest.java
  27. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileExportersTest.java
  28. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesNotificationTest.java
  29. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/builtin/BuiltInQProfileInsertImplTest.java
  30. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/builtin/BuiltInQProfileRepositoryImplTest.java
  31. 2
    2
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/CreateActionTest.java
  32. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java
  33. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java
  34. 4
    2
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java
  35. 2
    0
      server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java

+ 2
- 0
server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java View File

@@ -138,6 +138,7 @@ import org.sonar.server.qualitygate.notification.QGChangeEmailTemplate;
import org.sonar.server.qualitygate.notification.QGChangeNotificationHandler;
import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.rule.index.RuleIndex;
import org.sonar.server.rule.index.RuleIndexer;
import org.sonar.server.setting.DatabaseSettingLoader;
@@ -353,6 +354,7 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer {

private static void populateLevel4(Container container, Props props) {
container.add(
RuleDescriptionFormatter.class,
ResourceTypes.class,
DefaultResourceTypes.get(),


+ 6
- 6
server/sonar-server-common/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java View File

@@ -40,8 +40,6 @@ import org.sonar.db.rule.RuleDao;
import org.sonar.db.rule.RuleDto;
import org.sonar.db.rule.RuleParamDto;

import static org.sonar.server.rule.RuleDescriptionFormatter.getDescriptionAsHtml;

/**
* Will be removed in the future.
*/
@@ -49,10 +47,12 @@ public class DefaultRuleFinder implements ServerRuleFinder {

private final DbClient dbClient;
private final RuleDao ruleDao;
private final RuleDescriptionFormatter ruleDescriptionFormatter;

public DefaultRuleFinder(DbClient dbClient) {
public DefaultRuleFinder(DbClient dbClient, RuleDescriptionFormatter ruleDescriptionFormatter) {
this.dbClient = dbClient;
this.ruleDao = dbClient.ruleDao();
this.ruleDescriptionFormatter = ruleDescriptionFormatter;
}

@Override
@@ -131,7 +131,7 @@ public class DefaultRuleFinder implements ServerRuleFinder {
return rules;
}

private static org.sonar.api.rules.Rule toRule(RuleDto rule, List<RuleParamDto> params) {
private org.sonar.api.rules.Rule toRule(RuleDto rule, List<RuleParamDto> params) {
String severity = rule.getSeverityString();

org.sonar.api.rules.Rule apiRule = new org.sonar.api.rules.Rule();
@@ -147,9 +147,9 @@ public class DefaultRuleFinder implements ServerRuleFinder {
.setSeverity(severity != null ? RulePriority.valueOf(severity) : null)
.setStatus(rule.getStatus().name())
.setSystemTags(rule.getSystemTags().toArray(new String[rule.getSystemTags().size()]))
.setTags(rule.getTags().toArray(new String[rule.getTags().size()]))
.setDescription(getDescriptionAsHtml(rule));
.setTags(rule.getTags().toArray(new String[rule.getTags().size()]));

Optional.ofNullable(ruleDescriptionFormatter.getDescriptionAsHtml(rule)).ifPresent(apiRule::setDescription);

List<org.sonar.api.rules.RuleParam> apiParams = new ArrayList<>();
for (RuleParamDto param : params) {

+ 0
- 144
server/sonar-server-common/src/main/java/org/sonar/server/rule/HotspotRuleDescription.java View File

@@ -1,144 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2022 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.server.rule;

import java.util.Optional;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import org.sonar.db.rule.RuleDto;

import static java.util.Optional.ofNullable;

/***
* Temporary rule split before we have a better
* solution to specify security hotspot.
*/
public class HotspotRuleDescription {
private static final HotspotRuleDescription NO_DESCRIPTION = new HotspotRuleDescription(null, null, null);

@CheckForNull
private final String risk;
@CheckForNull
private final String vulnerable;
@CheckForNull
private final String fixIt;

private HotspotRuleDescription(@Nullable String risk, @Nullable String vulnerable, @Nullable String fixIt) {
this.risk = risk;
this.vulnerable = vulnerable;
this.fixIt = fixIt;
}

public static HotspotRuleDescription from(RuleDto dto) {
String description = RuleDescriptionFormatter.getDescriptionAsHtml(dto);
return from(description);
}

private static HotspotRuleDescription from(@Nullable String description) {
if (description == null) {
return NO_DESCRIPTION;
}

String[] split = extractSection("", description);
description = split[0];
String ruleDescriptionSection = split[1];

split = extractSection("<h2>Exceptions</h2>", description);
description = split[0];
String exceptions = split[1];

split = extractSection("<h2>Ask Yourself Whether</h2>", description);
description = split[0];
String askSection = split[1];

split = extractSection("<h2>Sensitive Code Example</h2>", description);
description = split[0];
String sensitiveSection = split[1];

split = extractSection("<h2>Noncompliant Code Example</h2>", description);
description = split[0];
String noncompliantSection = split[1];

split = extractSection("<h2>Recommended Secure Coding Practices</h2>", description);
description = split[0];
String recommendedSection = split[1];

split = extractSection("<h2>Compliant Solution</h2>", description);
description = split[0];
String compliantSection = split[1];

split = extractSection("<h2>See</h2>", description);
description = split[0];
String seeSection = split[1];

return new HotspotRuleDescription(
trimToNull(ruleDescriptionSection + exceptions + description),
trimToNull(askSection + sensitiveSection + noncompliantSection),
trimToNull(recommendedSection + compliantSection + seeSection));
}

private static String trimToNull(String input) {
return input.isEmpty() ? null : input;
}

private static String[] extractSection(String beginning, String description) {
String endSection = "<h2>";
int beginningIndex = description.indexOf(beginning);
if (beginningIndex != -1) {
int endIndex = description.indexOf(endSection, beginningIndex + beginning.length());
if (endIndex == -1) {
endIndex = description.length();
}
return new String[]{
description.substring(0, beginningIndex) + description.substring(endIndex),
description.substring(beginningIndex, endIndex)
};
} else {
return new String[]{description, ""};
}

}

public Optional<String> getRisk() {
return ofNullable(risk);
}

public Optional<String> getVulnerable() {
return ofNullable(vulnerable);
}

public Optional<String> getFixIt() {
return ofNullable(fixIt);
}

public boolean isComplete() {
return risk != null && vulnerable != null && fixIt != null;
}

@Override
public String toString() {
return "HotspotRuleDescription{" +
"risk='" + risk + '\'' +
", vulnerable='" + vulnerable + '\'' +
", fixIt='" + fixIt + '\'' +
'}';
}

}

+ 1
- 3
server/sonar-server-common/src/main/java/org/sonar/server/rule/RuleDescriptionFormatter.java View File

@@ -61,10 +61,8 @@ public class RuleDescriptionFormatter {
RESOURCES_SECTION_KEY, "Resources"
);

private RuleDescriptionFormatter() { /* static helpers */ }

@CheckForNull
public static String getDescriptionAsHtml(RuleDto ruleDto) {
public String getDescriptionAsHtml(RuleDto ruleDto) {
if (ruleDto.getDescriptionFormat() == null) {
return null;
}

+ 1
- 1
server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleDoc.java View File

@@ -295,7 +295,7 @@ public class RuleDoc extends BaseDoc {
return ReflectionToStringBuilder.toString(this);
}

public static RuleDoc of(RuleForIndexingDto dto, SecurityStandards securityStandards) {
public static RuleDoc createFrom(RuleForIndexingDto dto, SecurityStandards securityStandards) {
return new RuleDoc()
.setUuid(dto.getUuid())
.setKey(dto.getRuleKey().toString())

+ 1
- 1
server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexer.java View File

@@ -160,7 +160,7 @@ public class RuleIndexer implements ResilientIndexer {
.sorted(SQ_CATEGORY_KEYS_ORDERING)
.collect(joining(", ")));
}
return RuleDoc.of(dto, securityStandards);
return RuleDoc.createFrom(dto, securityStandards);
}



+ 2
- 1
server/sonar-server-common/src/test/java/org/sonar/server/rule/DefaultRuleFinderTest.java View File

@@ -35,6 +35,7 @@ import org.sonar.db.rule.RuleDto.Scope;

import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;

public class DefaultRuleFinderTest {

@@ -80,7 +81,7 @@ public class DefaultRuleFinderTest {
.setScope(Scope.MAIN)
.setStatus(RuleStatus.READY);

private final DefaultRuleFinder underTest = new DefaultRuleFinder(dbClient);
private final DefaultRuleFinder underTest = new DefaultRuleFinder(dbClient, mock(RuleDescriptionFormatter.class));

@Before
public void setup() {

+ 6
- 5
server/sonar-server-common/src/test/java/org/sonar/server/rule/RuleDescriptionFormatterTest.java View File

@@ -34,18 +34,19 @@ public class RuleDescriptionFormatterTest {

private static final RuleDescriptionSectionDto HTML_SECTION = createDefaultRuleDescriptionSection("uuid", "<span class=\"example\">*md* ``description``</span>");
private static final RuleDescriptionSectionDto MARKDOWN_SECTION = createDefaultRuleDescriptionSection("uuid", "*md* ``description``");
private static final RuleDescriptionFormatter ruleDescriptionFormatter = new RuleDescriptionFormatter();

@Test
public void getMarkdownDescriptionAsHtml() {
RuleDto rule = new RuleDto().setDescriptionFormat(RuleDto.Format.MARKDOWN).addRuleDescriptionSectionDto(MARKDOWN_SECTION).setType(RuleType.BUG);
String html = RuleDescriptionFormatter.getDescriptionAsHtml(rule);
String html = ruleDescriptionFormatter.getDescriptionAsHtml(rule);
assertThat(html).isEqualTo("<strong>md</strong> <code>description</code>");
}

@Test
public void getHtmlDescriptionAsIs() {
RuleDto rule = new RuleDto().setDescriptionFormat(RuleDto.Format.HTML).addRuleDescriptionSectionDto(HTML_SECTION).setType(RuleType.BUG);
String html = RuleDescriptionFormatter.getDescriptionAsHtml(rule);
String html = ruleDescriptionFormatter.getDescriptionAsHtml(rule);
assertThat(html).isEqualTo(HTML_SECTION.getContent());
}

@@ -59,7 +60,7 @@ public class RuleDescriptionFormatterTest {
.addRuleDescriptionSectionDto(section1)
.addRuleDescriptionSectionDto(section2)
.addRuleDescriptionSectionDto(section3);
String html = RuleDescriptionFormatter.getDescriptionAsHtml(rule);
String html = ruleDescriptionFormatter.getDescriptionAsHtml(rule);
assertThat(html)
.contains(
"<h2>What is the risk?</h2>"
@@ -74,7 +75,7 @@ public class RuleDescriptionFormatterTest {
@Test
public void handleEmptyDescription() {
RuleDto rule = new RuleDto().setDescriptionFormat(RuleDto.Format.HTML).setType(RuleType.BUG);
String result = RuleDescriptionFormatter.getDescriptionAsHtml(rule);
String result = ruleDescriptionFormatter.getDescriptionAsHtml(rule);
assertThat(result).isNull();
}

@@ -82,7 +83,7 @@ public class RuleDescriptionFormatterTest {
public void handleNullDescriptionFormat() {
RuleDescriptionSectionDto sectionWithNullFormat = createDefaultRuleDescriptionSection("uuid", "whatever");
RuleDto rule = new RuleDto().addRuleDescriptionSectionDto(sectionWithNullFormat).setType(RuleType.BUG);
String result = RuleDescriptionFormatter.getDescriptionAsHtml(rule);
String result = ruleDescriptionFormatter.getDescriptionAsHtml(rule);
assertThat(result).isNull();
}


+ 4
- 4
server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleDocTest.java View File

@@ -40,7 +40,7 @@ public class RuleDocTest {
ruleForIndexingDto.setTemplateRepository("repoKey");
SecurityStandards securityStandards = fromSecurityStandards(ruleDto.getSecurityStandards());

RuleDoc ruleDoc = RuleDoc.of(ruleForIndexingDto, securityStandards);
RuleDoc ruleDoc = RuleDoc.createFrom(ruleForIndexingDto, securityStandards);

assertThat(ruleDoc.getId()).isEqualTo(ruleDto.getUuid());
assertThat(ruleDoc.key()).isEqualTo(ruleForIndexingDto.getRuleKey());
@@ -75,7 +75,7 @@ public class RuleDocTest {
RuleForIndexingDto ruleForIndexingDto = RuleForIndexingDto.fromRuleDto(ruleDto);
SecurityStandards securityStandards = fromSecurityStandards(ruleDto.getSecurityStandards());

RuleDoc ruleDoc = RuleDoc.of(ruleForIndexingDto, securityStandards);
RuleDoc ruleDoc = RuleDoc.createFrom(ruleForIndexingDto, securityStandards);
assertThat(ruleDoc.htmlDescription()).isEmpty();
}

@@ -92,7 +92,7 @@ public class RuleDocTest {
RuleForIndexingDto ruleForIndexingDto = RuleForIndexingDto.fromRuleDto(ruleDto);
SecurityStandards securityStandards = fromSecurityStandards(ruleDto.getSecurityStandards());

RuleDoc ruleDoc = RuleDoc.of(ruleForIndexingDto, securityStandards);
RuleDoc ruleDoc = RuleDoc.createFrom(ruleForIndexingDto, securityStandards);
assertThat(ruleDoc.htmlDescription())
.contains(section1.getContent())
.contains(section2.getContent())
@@ -112,7 +112,7 @@ public class RuleDocTest {
RuleForIndexingDto ruleForIndexingDto = RuleForIndexingDto.fromRuleDto(ruleDto);
SecurityStandards securityStandards = fromSecurityStandards(ruleDto.getSecurityStandards());

RuleDoc ruleDoc = RuleDoc.of(ruleForIndexingDto, securityStandards);
RuleDoc ruleDoc = RuleDoc.createFrom(ruleForIndexingDto, securityStandards);
assertThat(ruleDoc.htmlDescription())
.contains(convertToHtml(section1.getContent()))
.contains(convertToHtml(section2.getContent()))

+ 1
- 1
server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java View File

@@ -106,7 +106,7 @@ public class RuleIndexTest {

private RuleIndex underTest = new RuleIndex(es.client(), system2);
private UuidFactory uuidFactory = UuidFactoryFast.getInstance();
@Test
public void search_all_rules() {
createRule();

+ 7
- 5
server/sonar-webserver-api/src/main/java/org/sonar/server/rule/CachingRuleFinder.java View File

@@ -59,8 +59,10 @@ public class CachingRuleFinder implements ServerRuleFinder {
private final Map<String, RuleDto> ruleDtosByUuid;
private final Map<RuleDto, Rule> ruleByRuleDto;
private final Map<RuleKey, Rule> rulesByKey;
private final RuleDescriptionFormatter ruleDescriptionFormatter;

public CachingRuleFinder(DbClient dbClient) {
public CachingRuleFinder(DbClient dbClient, RuleDescriptionFormatter ruleDescriptionFormatter) {
this.ruleDescriptionFormatter = ruleDescriptionFormatter;
try (DbSession dbSession = dbClient.openSession(false)) {
List<RuleDto> dtos = dbClient.ruleDao().selectAll(dbSession);
this.ruleDtosByKey = dtos.stream().collect(Collectors.toMap(RuleDto::getKey, d -> d));
@@ -71,7 +73,7 @@ public class CachingRuleFinder implements ServerRuleFinder {
}
}

private static Map<RuleDto, Rule> buildRulesByRuleDefinitionDto(DbClient dbClient, DbSession dbSession, List<RuleDto> dtos) {
private Map<RuleDto, Rule> buildRulesByRuleDefinitionDto(DbClient dbClient, DbSession dbSession, List<RuleDto> dtos) {
Map<String, List<RuleParamDto>> ruleParamsByRuleUuid = retrieveRuleParameters(dbClient, dbSession);
Map<RuleDto, Rule> rulesByDefinition = new HashMap<>(dtos.size());
for (RuleDto definition : dtos) {
@@ -143,7 +145,7 @@ public class CachingRuleFinder implements ServerRuleFinder {
return configKey == null || configKey.equals(ruleDto.getConfigKey());
}

private static Rule toRule(RuleDto ruleDto, List<RuleParamDto> params) {
private Rule toRule(RuleDto ruleDto, List<RuleParamDto> params) {
String severity = ruleDto.getSeverityString();

Rule apiRule = Rule.create()
@@ -157,9 +159,9 @@ public class CachingRuleFinder implements ServerRuleFinder {
.setSeverity(severity != null ? RulePriority.valueOf(severity) : null)
.setStatus(ruleDto.getStatus().name())
.setSystemTags(ruleDto.getSystemTags().toArray(new String[ruleDto.getSystemTags().size()]))
.setTags(new String[0])
.setDescription(RuleDescriptionFormatter.getDescriptionAsHtml(ruleDto));
.setTags(new String[0]);

Optional.ofNullable(ruleDescriptionFormatter.getDescriptionAsHtml(ruleDto)).ifPresent(apiRule::setDescription);
Optional.ofNullable(ruleDto.getLanguage()).ifPresent(apiRule::setLanguage);

List<org.sonar.api.rules.RuleParam> apiParams = new ArrayList<>();

+ 5
- 3
server/sonar-webserver-api/src/main/java/org/sonar/server/rule/WebServerRuleFinderImpl.java View File

@@ -32,18 +32,20 @@ import org.sonar.db.rule.RuleDto;
public class WebServerRuleFinderImpl implements WebServerRuleFinder {
private final DbClient dbClient;
private final ServerRuleFinder defaultFinder;
private final RuleDescriptionFormatter ruleDescriptionFormatter;
@VisibleForTesting
ServerRuleFinder delegate;

public WebServerRuleFinderImpl(DbClient dbClient) {
public WebServerRuleFinderImpl(DbClient dbClient, RuleDescriptionFormatter ruleDescriptionFormatter) {
this.dbClient = dbClient;
this.defaultFinder = new DefaultRuleFinder(dbClient);
this.ruleDescriptionFormatter = ruleDescriptionFormatter;
this.defaultFinder = new DefaultRuleFinder(dbClient, ruleDescriptionFormatter);
this.delegate = this.defaultFinder;
}

@Override
public void startCaching() {
this.delegate = new CachingRuleFinder(dbClient);
this.delegate = new CachingRuleFinder(dbClient, ruleDescriptionFormatter);
}

@Override

+ 12
- 11
server/sonar-webserver-api/src/test/java/org/sonar/server/rule/CachingRuleFinderTest.java View File

@@ -56,6 +56,7 @@ public class CachingRuleFinderTest {
private RuleDto[] ruleDtos;
private RuleParamDto[] ruleParams;
private CachingRuleFinder underTest;
private RuleDescriptionFormatter ruleDescriptionFormatter = new RuleDescriptionFormatter();

@Before()
public void setUp() {
@@ -72,7 +73,7 @@ public class CachingRuleFinderTest {
.map(rule -> dbTester.rules().insertRuleParam(rule))
.toArray(RuleParamDto[]::new);

underTest = new CachingRuleFinder(dbClient);
underTest = new CachingRuleFinder(dbClient, ruleDescriptionFormatter);

// delete all data from DB to ensure tests rely on cache exclusively
dbTester.executeUpdateSql("delete from rules");
@@ -89,7 +90,7 @@ public class CachingRuleFinderTest {
when(dbClient.openSession(anyBoolean())).thenReturn(dbSession);
when(dbClient.ruleDao()).thenReturn(ruleDao);

new CachingRuleFinder(dbClient);
new CachingRuleFinder(dbClient, ruleDescriptionFormatter);

verify(dbClient).openSession(anyBoolean());
verify(ruleDao).selectAll(dbSession);
@@ -107,7 +108,7 @@ public class CachingRuleFinderTest {
List<RuleKey> ruleKeys = Arrays.asList(RuleKey.of("A", "B"), RuleKey.of("C", "D"), RuleKey.of("E", "F"));
when(ruleDao.selectAll(dbSession)).thenReturn(ruleKeys.stream().map(RuleTesting::newRule).collect(toList()));

new CachingRuleFinder(dbClient);
new CachingRuleFinder(dbClient, ruleDescriptionFormatter);

verify(ruleDao).selectAllRuleParams(dbSession);
}
@@ -166,7 +167,7 @@ public class CachingRuleFinderTest {
};
RuleDto otherRule = dbTester.rules().insert(rule -> rule.setUpdatedAt(system2.now()));

CachingRuleFinder underTest = new CachingRuleFinder(dbClient);
CachingRuleFinder underTest = new CachingRuleFinder(dbClient, ruleDescriptionFormatter);

assertThat(toRuleKey(underTest.find(RuleQuery.create().withRepositoryKey(repoKey))))
.isEqualTo(sameRepoKey[1].getKey());
@@ -187,7 +188,7 @@ public class CachingRuleFinderTest {
};
RuleDto otherRule = dbTester.rules().insert(rule -> rule.setUpdatedAt(system2.now()));

CachingRuleFinder underTest = new CachingRuleFinder(dbClient);
CachingRuleFinder underTest = new CachingRuleFinder(dbClient, ruleDescriptionFormatter);

assertThat(toRuleKey(underTest.find(RuleQuery.create().withKey(ruleKey))))
.isEqualTo(sameRuleKey[1].getKey());
@@ -208,7 +209,7 @@ public class CachingRuleFinderTest {
};
RuleDto otherRule = dbTester.rules().insert(rule -> rule.setUpdatedAt(system2.now()));

CachingRuleFinder underTest = new CachingRuleFinder(dbClient);
CachingRuleFinder underTest = new CachingRuleFinder(dbClient, ruleDescriptionFormatter);

assertThat(toRuleKey(underTest.find(RuleQuery.create().withConfigKey(configKey))))
.isEqualTo(sameConfigKey[1].getKey());
@@ -239,7 +240,7 @@ public class CachingRuleFinderTest {
RuleQuery ruleKeyQuery = RuleQuery.create().withKey(ruleKey);
RuleQuery repoKeyQuery = RuleQuery.create().withRepositoryKey(repoKey);

CachingRuleFinder underTest = new CachingRuleFinder(dbClient);
CachingRuleFinder underTest = new CachingRuleFinder(dbClient, ruleDescriptionFormatter);

assertThat(toRuleKey(underTest.find(allQuery))).isEqualTo(rules[0].getKey());
assertThat(toRuleKey(underTest.find(ruleAndConfigKeyQuery))).isEqualTo(rules[1].getKey());
@@ -272,7 +273,7 @@ public class CachingRuleFinderTest {
};
RuleDto otherRule = dbTester.rules().insert(rule -> rule.setUpdatedAt(currentTimeMillis + system2.now()));

CachingRuleFinder underTest = new CachingRuleFinder(dbClient);
CachingRuleFinder underTest = new CachingRuleFinder(dbClient, ruleDescriptionFormatter);

assertThat(underTest.findAll(RuleQuery.create().withRepositoryKey(repoKey)))
.extracting(CachingRuleFinderTest::toRuleKey)
@@ -295,7 +296,7 @@ public class CachingRuleFinderTest {
};
RuleDto otherRule = dbTester.rules().insert(rule -> rule.setUpdatedAt(system2.now()));

CachingRuleFinder underTest = new CachingRuleFinder(dbClient);
CachingRuleFinder underTest = new CachingRuleFinder(dbClient, ruleDescriptionFormatter);

assertThat(underTest.findAll(RuleQuery.create().withKey(ruleKey)))
.extracting(CachingRuleFinderTest::toRuleKey)
@@ -318,7 +319,7 @@ public class CachingRuleFinderTest {
};
RuleDto otherRule = dbTester.rules().insert(rule -> rule.setUpdatedAt(system2.now()));

CachingRuleFinder underTest = new CachingRuleFinder(dbClient);
CachingRuleFinder underTest = new CachingRuleFinder(dbClient, ruleDescriptionFormatter);

assertThat(underTest.findAll(RuleQuery.create().withConfigKey(configKey)))
.extracting(CachingRuleFinderTest::toRuleKey)
@@ -351,7 +352,7 @@ public class CachingRuleFinderTest {
RuleQuery ruleKeyQuery = RuleQuery.create().withKey(ruleKey);
RuleQuery repoKeyQuery = RuleQuery.create().withRepositoryKey(repoKey);

CachingRuleFinder underTest = new CachingRuleFinder(dbClient);
CachingRuleFinder underTest = new CachingRuleFinder(dbClient, ruleDescriptionFormatter);

assertThat(underTest.findAll(allQuery))
.extracting(CachingRuleFinderTest::toRuleKey)

+ 1
- 1
server/sonar-webserver-api/src/test/java/org/sonar/server/rule/WebServerRuleFinderImplTest.java View File

@@ -32,7 +32,7 @@ import static org.mockito.Mockito.when;
public class WebServerRuleFinderImplTest {

private DbClient dbClient = mock(DbClient.class);
private WebServerRuleFinderImpl underTest = new WebServerRuleFinderImpl(dbClient);
private WebServerRuleFinderImpl underTest = new WebServerRuleFinderImpl(dbClient, mock(RuleDescriptionFormatter.class));

@Before
public void setUp() {

+ 0
- 2
server/sonar-webserver-core/src/test/java/org/sonar/server/rule/RegisterRulesTest.java View File

@@ -141,7 +141,6 @@ public class RegisterRulesTest {
return Set.of(builder().uuid(UuidFactoryFast.getInstance().create()).key("default").content(description).build());
});


when(ruleDescriptionSectionsGenerator.isGeneratorForRule(any())).thenReturn(true);
}

@@ -202,7 +201,6 @@ public class RegisterRulesTest {
verifyHotspot(hotspotRule);
}


private void verifyRule(RuleDto rule) {
assertThat(rule.getName()).isEqualTo("One");
assertThat(rule.getDefaultRuleDescriptionSection().getContent()).isEqualTo("Description of One");

+ 1
- 1
server/sonar-webserver-es/src/test/java/org/sonar/server/es/RecoveryIndexerTest.java View File

@@ -36,8 +36,8 @@ import org.junit.rules.TestRule;
import org.junit.rules.Timeout;
import org.sonar.api.config.Configuration;
import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.utils.MessageException;
import org.sonar.api.impl.utils.TestSystem2;
import org.sonar.api.utils.MessageException;
import org.sonar.api.utils.log.LogTester;
import org.sonar.api.utils.log.LoggerLevel;
import org.sonar.db.DbSession;

+ 4
- 2
server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleMapper.java View File

@@ -89,10 +89,12 @@ public class RuleMapper {

private final Languages languages;
private final MacroInterpreter macroInterpreter;
private final RuleDescriptionFormatter ruleDescriptionFormatter;

public RuleMapper(final Languages languages, final MacroInterpreter macroInterpreter) {
public RuleMapper(final Languages languages, final MacroInterpreter macroInterpreter, RuleDescriptionFormatter ruleDescriptionFormatter) {
this.languages = languages;
this.macroInterpreter = macroInterpreter;
this.ruleDescriptionFormatter = ruleDescriptionFormatter;
}

public Rules.Rule toWsRule(RuleDto ruleDefinitionDto, SearchResult result, Set<String> fieldsToReturn) {
@@ -328,7 +330,7 @@ public class RuleMapper {

private void setDescriptionFields(Rules.Rule.Builder ruleResponse, RuleDto ruleDto, Set<String> fieldsToReturn) {
if (shouldReturnField(fieldsToReturn, FIELD_HTML_DESCRIPTION)) {
String htmlDescription = RuleDescriptionFormatter.getDescriptionAsHtml(ruleDto);
String htmlDescription = ruleDescriptionFormatter.getDescriptionAsHtml(ruleDto);
if (htmlDescription != null) {
ruleResponse.setHtmlDesc(macroInterpreter.interpret(htmlDescription));
}

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/WebIssueStorageTest.java View File

@@ -40,6 +40,7 @@ import org.sonar.db.issue.IssueDto;
import org.sonar.db.rule.RuleDto;
import org.sonar.server.issue.index.IssueIndexer;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;

import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
@@ -58,7 +59,7 @@ public class WebIssueStorageTest {

private final DbClient dbClient = db.getDbClient();
private final IssueIndexer issueIndexer = mock(IssueIndexer.class);
private final WebIssueStorage underTest = new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(db.getDbClient()), issueIndexer,
private final WebIssueStorage underTest = new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(db.getDbClient(), mock(RuleDescriptionFormatter.class)), issueIndexer,
new SequenceUuidFactory());

@Test

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/AddCommentActionTest.java View File

@@ -50,6 +50,7 @@ import org.sonar.server.issue.index.IssueIteratorFactory;
import org.sonar.server.issue.notification.IssuesChangesNotificationSerializer;
import org.sonar.server.notification.NotificationManager;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.TestResponse;
@@ -89,7 +90,7 @@ public class AddCommentActionTest {
private IssueDbTester issueDbTester = new IssueDbTester(dbTester);

private IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient), null);
private WebIssueStorage serverIssueStorage = new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer,
private WebIssueStorage serverIssueStorage = new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, mock(RuleDescriptionFormatter.class)), issueIndexer,
new SequenceUuidFactory());
private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor();
private IssueUpdater issueUpdater = new IssueUpdater(dbClient, serverIssueStorage, mock(NotificationManager.class), issueChangePostProcessor,

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/AssignActionTest.java View File

@@ -45,6 +45,7 @@ import org.sonar.server.issue.notification.IssuesChangesNotification;
import org.sonar.server.issue.notification.IssuesChangesNotificationSerializer;
import org.sonar.server.notification.NotificationManager;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.WsActionTester;
@@ -85,7 +86,7 @@ public class AssignActionTest {
private IssuesChangesNotificationSerializer issuesChangesSerializer = new IssuesChangesNotificationSerializer();
private AssignAction underTest = new AssignAction(system2, userSession, dbClient, new IssueFinder(dbClient, userSession), new IssueFieldsSetter(),
new IssueUpdater(dbClient,
new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()),
new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, mock(RuleDescriptionFormatter.class)), issueIndexer, new SequenceUuidFactory()),
notificationManager, issueChangePostProcessor, issuesChangesSerializer),
responseWriter);
private WsActionTester ws = new WsActionTester(underTest);

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java View File

@@ -60,6 +60,7 @@ import org.sonar.server.issue.workflow.FunctionExecutor;
import org.sonar.server.issue.workflow.IssueWorkflow;
import org.sonar.server.notification.NotificationManager;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.WsActionTester;
@@ -115,7 +116,7 @@ public class BulkChangeActionTest {
private IssueFieldsSetter issueFieldsSetter = new IssueFieldsSetter();
private IssueWorkflow issueWorkflow = new IssueWorkflow(new FunctionExecutor(issueFieldsSetter), issueFieldsSetter);
private WebIssueStorage issueStorage = new WebIssueStorage(system2, dbClient,
new DefaultRuleFinder(dbClient),
new DefaultRuleFinder(dbClient, mock(RuleDescriptionFormatter.class)),
new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient), null), new SequenceUuidFactory());
private NotificationManager notificationManager = mock(NotificationManager.class);
private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor();

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/DoTransitionActionTest.java View File

@@ -51,6 +51,7 @@ import org.sonar.server.issue.workflow.FunctionExecutor;
import org.sonar.server.issue.workflow.IssueWorkflow;
import org.sonar.server.notification.NotificationManager;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.TestResponse;
@@ -96,7 +97,7 @@ public class DoTransitionActionTest {
private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor();
private IssuesChangesNotificationSerializer issuesChangesSerializer = new IssuesChangesNotificationSerializer();
private IssueUpdater issueUpdater = new IssueUpdater(dbClient,
new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()),
new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, mock(RuleDescriptionFormatter.class)), issueIndexer, new SequenceUuidFactory()),
mock(NotificationManager.class), issueChangePostProcessor, issuesChangesSerializer);
private ArgumentCaptor<SearchResponseData> preloadedSearchResponseDataCaptor = ArgumentCaptor.forClass(SearchResponseData.class);


+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/IssueUpdaterTest.java View File

@@ -48,6 +48,7 @@ import org.sonar.server.issue.notification.IssuesChangesNotificationBuilder.User
import org.sonar.server.issue.notification.IssuesChangesNotificationSerializer;
import org.sonar.server.notification.NotificationManager;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
@@ -84,7 +85,7 @@ public class IssueUpdaterTest {
private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor();
private IssuesChangesNotificationSerializer issuesChangesSerializer = new IssuesChangesNotificationSerializer();
private IssueUpdater underTest = new IssueUpdater(dbClient,
new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()), notificationManager,
new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, mock(RuleDescriptionFormatter.class)), issueIndexer, new SequenceUuidFactory()), notificationManager,
issueChangePostProcessor, issuesChangesSerializer);

@Test

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetSeverityActionTest.java View File

@@ -50,6 +50,7 @@ import org.sonar.server.issue.index.IssueIteratorFactory;
import org.sonar.server.issue.notification.IssuesChangesNotificationSerializer;
import org.sonar.server.notification.NotificationManager;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.TestResponse;
@@ -88,7 +89,7 @@ public class SetSeverityActionTest {
private IssuesChangesNotificationSerializer issuesChangesSerializer = new IssuesChangesNotificationSerializer();
private WsActionTester tester = new WsActionTester(new SetSeverityAction(userSession, dbClient, new IssueFinder(dbClient, userSession), new IssueFieldsSetter(),
new IssueUpdater(dbClient,
new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()),
new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, mock(RuleDescriptionFormatter.class)), issueIndexer, new SequenceUuidFactory()),
mock(NotificationManager.class), issueChangePostProcessor, issuesChangesSerializer),
responseWriter));


+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetTagsActionTest.java View File

@@ -53,6 +53,7 @@ import org.sonar.server.issue.index.IssueIteratorFactory;
import org.sonar.server.issue.notification.IssuesChangesNotificationSerializer;
import org.sonar.server.notification.NotificationManager;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.TestResponse;
@@ -90,7 +91,7 @@ public class SetTagsActionTest {

private WsActionTester ws = new WsActionTester(new SetTagsAction(userSession, dbClient, new IssueFinder(dbClient, userSession), new IssueFieldsSetter(),
new IssueUpdater(dbClient,
new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()),
new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, mock(RuleDescriptionFormatter.class)), issueIndexer, new SequenceUuidFactory()),
mock(NotificationManager.class), issueChangePostProcessor, issuesChangesSerializer),
responseWriter));


+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetTypeActionTest.java View File

@@ -58,6 +58,7 @@ import org.sonar.server.issue.index.IssueIteratorFactory;
import org.sonar.server.issue.notification.IssuesChangesNotificationSerializer;
import org.sonar.server.notification.NotificationManager;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.TestResponse;
@@ -101,7 +102,7 @@ public class SetTypeActionTest {
private IssuesChangesNotificationSerializer issuesChangesSerializer = new IssuesChangesNotificationSerializer();
private WsActionTester tester = new WsActionTester(new SetTypeAction(userSession, dbClient, new IssueFinder(dbClient, userSession), new IssueFieldsSetter(),
new IssueUpdater(dbClient,
new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()),
new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, mock(RuleDescriptionFormatter.class)), issueIndexer, new SequenceUuidFactory()),
mock(NotificationManager.class), issueChangePostProcessor, issuesChangesSerializer), responseWriter, system2));

@Test

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileExportersTest.java View File

@@ -44,6 +44,7 @@ import org.sonar.db.rule.RuleDto;
import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.tester.UserSessionRule;

import static java.nio.charset.StandardCharsets.UTF_8;
@@ -65,7 +66,7 @@ public class QProfileExportersTest {
@org.junit.Rule
public DbTester db = DbTester.create(system2);

private final RuleFinder ruleFinder = new DefaultRuleFinder(db.getDbClient());
private final RuleFinder ruleFinder = new DefaultRuleFinder(db.getDbClient(), mock(RuleDescriptionFormatter.class));
private final ProfileExporter[] exporters = new ProfileExporter[] {
new StandardExporter(), new XooExporter()};
private final ProfileImporter[] importers = new ProfileImporter[] {

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesNotificationTest.java View File

@@ -57,6 +57,7 @@ import org.sonar.server.qualityprofile.builtin.QProfileName;
import org.sonar.server.qualityprofile.builtin.RuleActivator;
import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.rule.ServerRuleFinder;
import org.sonar.server.rule.index.RuleIndex;
import org.sonar.server.tester.UserSessionRule;
@@ -100,7 +101,7 @@ public class RegisterQualityProfilesNotificationTest {
private TypeValidations typeValidations = mock(TypeValidations.class);
private ActiveRuleIndexer activeRuleIndexer = mock(ActiveRuleIndexer.class);
private QualityProfileChangeEventService qualityProfileChangeEventService = mock(QualityProfileChangeEventService.class);
private ServerRuleFinder ruleFinder = new DefaultRuleFinder(dbClient);
private ServerRuleFinder ruleFinder = new DefaultRuleFinder(dbClient, mock(RuleDescriptionFormatter.class));
private BuiltInQProfileInsert builtInQProfileInsert = new BuiltInQProfileInsertImpl(dbClient, ruleFinder, system2, UuidFactoryFast.getInstance(),
typeValidations, activeRuleIndexer);
private RuleActivator ruleActivator = new RuleActivator(system2, dbClient, typeValidations, userSessionRule);

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/builtin/BuiltInQProfileInsertImplTest.java View File

@@ -45,6 +45,7 @@ import org.sonar.db.rule.RuleParamDto;
import org.sonar.server.qualityprofile.ActiveRuleChange;
import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.rule.ServerRuleFinder;
import org.sonar.server.util.StringTypeValidation;
import org.sonar.server.util.TypeValidations;
@@ -65,7 +66,7 @@ public class BuiltInQProfileInsertImplTest {
private final TypeValidations typeValidations = new TypeValidations(singletonList(new StringTypeValidation()));
private final DbSession dbSession = db.getSession();
private final DbSession batchDbSession = db.getDbClient().openSession(true);
private final ServerRuleFinder ruleFinder = new DefaultRuleFinder(db.getDbClient());
private final ServerRuleFinder ruleFinder = new DefaultRuleFinder(db.getDbClient(), mock(RuleDescriptionFormatter.class));
private final ActiveRuleIndexer activeRuleIndexer = mock(ActiveRuleIndexer.class);
private final BuiltInQProfileInsertImpl underTest = new BuiltInQProfileInsertImpl(db.getDbClient(), ruleFinder, system2, uuidFactory, typeValidations, activeRuleIndexer);


+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/builtin/BuiltInQProfileRepositoryImplTest.java View File

@@ -32,6 +32,7 @@ import org.sonar.db.rule.RuleDto;
import org.sonar.server.language.LanguageTesting;
import org.sonar.server.qualityprofile.builtin.BuiltInQProfile.ActiveRule;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.rule.ServerRuleFinder;

import static java.util.Arrays.asList;
@@ -52,7 +53,7 @@ public class BuiltInQProfileRepositoryImplTest {
public DbTester db = DbTester.create();

private final DbClient dbClient = db.getDbClient();
private final ServerRuleFinder ruleFinder = new DefaultRuleFinder(dbClient);
private final ServerRuleFinder ruleFinder = new DefaultRuleFinder(dbClient, mock(RuleDescriptionFormatter.class));

@Test
public void create_qprofile_with_rule() {

+ 2
- 2
server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/CreateActionTest.java View File

@@ -34,6 +34,7 @@ import org.sonar.server.es.EsTester;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.UnauthorizedException;
import org.sonar.server.rule.RuleCreator;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.rule.index.RuleIndexer;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.text.MacroInterpreter;
@@ -60,7 +61,6 @@ public class CreateActionTest {

private System2 system2 = mock(System2.class);


@Rule
public UserSessionRule userSession = UserSessionRule.standalone();

@@ -74,7 +74,7 @@ public class CreateActionTest {

private WsActionTester ws = new WsActionTester(new CreateAction(db.getDbClient(),
new RuleCreator(system2, new RuleIndexer(es.client(), db.getDbClient()), db.getDbClient(), newFullTypeValidations(), uuidFactory),
new RuleMapper(new Languages(), createMacroInterpreter()),
new RuleMapper(new Languages(), createMacroInterpreter(), new RuleDescriptionFormatter()),
new RuleWsSupport(db.getDbClient(), userSession)));

@Test

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java View File

@@ -54,6 +54,7 @@ import org.sonar.server.qualityprofile.QProfileRulesImpl;
import org.sonar.server.qualityprofile.RuleActivation;
import org.sonar.server.qualityprofile.builtin.RuleActivator;
import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.rule.index.RuleIndex;
import org.sonar.server.rule.index.RuleIndexer;
import org.sonar.server.tester.UserSessionRule;
@@ -110,7 +111,7 @@ public class SearchActionTest {
private final RuleQueryFactory ruleQueryFactory = new RuleQueryFactory(db.getDbClient());
private final MacroInterpreter macroInterpreter = mock(MacroInterpreter.class);
private final QualityProfileChangeEventService qualityProfileChangeEventService = mock(QualityProfileChangeEventService.class);
private final RuleMapper ruleMapper = new RuleMapper(languages, macroInterpreter);
private final RuleMapper ruleMapper = new RuleMapper(languages, macroInterpreter, new RuleDescriptionFormatter());
private final SearchAction underTest = new SearchAction(ruleIndex, activeRuleCompleter, ruleQueryFactory, db.getDbClient(), ruleMapper,
new RuleWsSupport(db.getDbClient(), userSession));
private final TypeValidations typeValidations = new TypeValidations(asList(new StringTypeValidation(), new IntegerTypeValidation()));

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java View File

@@ -38,6 +38,7 @@ import org.sonar.db.rule.RuleDto;
import org.sonar.db.rule.RuleMetadataDto;
import org.sonar.db.rule.RuleParamDto;
import org.sonar.db.user.UserDto;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.text.MacroInterpreter;
import org.sonar.server.ws.WsActionTester;
@@ -82,7 +83,7 @@ public class ShowActionTest {
private final MacroInterpreter macroInterpreter = mock(MacroInterpreter.class);
private final Languages languages = new Languages(newLanguage("xoo", "Xoo"));
private final WsActionTester ws = new WsActionTester(
new ShowAction(db.getDbClient(), new RuleMapper(languages, macroInterpreter),
new ShowAction(db.getDbClient(), new RuleMapper(languages, macroInterpreter, new RuleDescriptionFormatter()),
new ActiveRuleCompleter(db.getDbClient(), languages),
new RuleWsSupport(db.getDbClient(), userSession)));


+ 4
- 2
server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java View File

@@ -29,14 +29,15 @@ import org.sonar.api.utils.System2;
import org.sonar.core.util.UuidFactoryFast;
import org.sonar.db.DbClient;
import org.sonar.db.DbTester;
import org.sonar.db.rule.RuleDto;
import org.sonar.db.rule.RuleDescriptionSectionDto;
import org.sonar.db.rule.RuleDto;
import org.sonar.db.rule.RuleMetadataDto;
import org.sonar.db.user.UserDto;
import org.sonar.server.es.EsClient;
import org.sonar.server.es.EsTester;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.UnauthorizedException;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.rule.RuleUpdater;
import org.sonar.server.rule.index.RuleIndexer;
import org.sonar.server.tester.UserSessionRule;
@@ -81,9 +82,10 @@ public class UpdateActionTest {

private DbClient dbClient = db.getDbClient();
private EsClient esClient = es.client();
private RuleDescriptionFormatter ruleDescriptionFormatter = new RuleDescriptionFormatter();

private Languages languages = new Languages();
private RuleMapper mapper = new RuleMapper(languages, createMacroInterpreter());
private RuleMapper mapper = new RuleMapper(languages, createMacroInterpreter(), ruleDescriptionFormatter);
private RuleIndexer ruleIndexer = new RuleIndexer(esClient, dbClient);
private UuidFactoryFast uuidFactory = UuidFactoryFast.getInstance();


+ 2
- 0
server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java View File

@@ -210,6 +210,7 @@ import org.sonar.server.root.ws.RootWsModule;
import org.sonar.server.rule.CommonRuleDefinitionsImpl;
import org.sonar.server.rule.RuleCreator;
import org.sonar.server.rule.RuleDefinitionsLoader;
import org.sonar.server.rule.RuleDescriptionFormatter;
import org.sonar.server.rule.RuleUpdater;
import org.sonar.server.rule.WebServerRuleFinderImpl;
import org.sonar.server.rule.index.RuleIndexDefinition;
@@ -285,6 +286,7 @@ public class PlatformLevel4 extends PlatformLevel {
addIfStandalone(StandaloneRuleActivatorEventsDistributor.class);

add(
RuleDescriptionFormatter.class,
ClusterVerification.class,
LogServerId.class,
LogOAuthWarning.class,

Loading…
Cancel
Save