Преглед изворни кода

Complete DeactivateRuleActionTest, InheritanceActionTest, QProfilesWsMediumTest, ShowActionMediumTest, ShowActionTest

tags/6.5-M2
Eric Hartmann пре 7 година
родитељ
комит
83b5ae06f2

+ 139
- 106
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/DeactivateRuleActionTest.java Прегледај датотеку

@@ -19,112 +19,145 @@
*/
package org.sonar.server.qualityprofile.ws;

import java.net.HttpURLConnection;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.server.ws.WebService;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.permission.OrganizationPermission;
import org.sonar.db.qualityprofile.QProfileDto;
import org.sonar.db.rule.RuleTesting;
import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.UnauthorizedException;
import org.sonar.server.organization.TestDefaultOrganizationProvider;
import org.sonar.server.qualityprofile.RuleActivator;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.TestResponse;
import org.sonar.server.ws.WsActionTester;

import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.UUID_SIZE;

public class DeactivateRuleActionTest {
@Rule
public DbTester db = DbTester.create();
@Rule
public UserSessionRule userSession = UserSessionRule.standalone();
@Rule
public ExpectedException thrown = ExpectedException.none();

private DbClient dbClient = db.getDbClient();
private RuleActivator ruleActivator = mock(RuleActivator.class);
private QProfileWsSupport wsSupport = new QProfileWsSupport(dbClient, userSession, TestDefaultOrganizationProvider.from(db));
private DeactivateRuleAction underTest = new DeactivateRuleAction(dbClient, ruleActivator, userSession, wsSupport);
private WsActionTester wsActionTester = new WsActionTester(underTest);
private OrganizationDto defaultOrganization;
private OrganizationDto organization;

@Before
public void before() {
defaultOrganization = db.getDefaultOrganization();
organization = db.organizations().insert();
}

@Test
public void define_deactivate_rule_action() {
WebService.Action definition = wsActionTester.getDef();
assertThat(definition).isNotNull();
assertThat(definition.isPost()).isTrue();
assertThat(definition.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("profile_key", "rule_key");
}

@Test
public void should_fail_if_not_logged_in() {
TestRequest request = wsActionTester.newRequest()
.setMethod("POST")
.setParam("rule_key", RuleTesting.newRuleDto().getKey().toString())
.setParam("profile_key", randomAlphanumeric(UUID_SIZE));

thrown.expect(UnauthorizedException.class);
request.execute();
}

@Test
public void should_fail_if_not_organization_quality_profile_administrator() {
userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization);
QProfileDto qualityProfile = db.qualityProfiles().insert(organization);
TestRequest request = wsActionTester.newRequest()
.setMethod("POST")
.setParam("rule_key", RuleTesting.newRuleDto().getKey().toString())
.setParam("profile_key", qualityProfile.getKee());

thrown.expect(ForbiddenException.class);
request.execute();
}

@Test
public void fail_deactivate_if_built_in_profile() {
userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization);

QProfileDto qualityProfile = db.qualityProfiles().insert(defaultOrganization, profile -> profile.setIsBuiltIn(true));
TestRequest request = wsActionTester.newRequest()
.setMethod("POST")
.setParam("rule_key", RuleTesting.newRuleDto().getKey().toString())
.setParam("profile_key", qualityProfile.getKee());

thrown.expect(BadRequestException.class);

request.execute();
}

@Test
public void deactivate_rule_in_default_organization() {
userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization);
QProfileDto qualityProfile = db.qualityProfiles().insert(defaultOrganization);
RuleKey ruleKey = RuleTesting.randomRuleKey();
TestRequest request = wsActionTester.newRequest()
.setMethod("POST")
.setParam("rule_key", ruleKey.toString())
.setParam("profile_key", qualityProfile.getKee());

TestResponse response = request.execute();

assertThat(response.getStatus()).isEqualTo(HttpURLConnection.HTTP_NO_CONTENT);
ArgumentCaptor<RuleKey> ruleKeyCaptor = ArgumentCaptor.forClass(RuleKey.class);
ArgumentCaptor<QProfileDto> qProfileDtoCaptor = ArgumentCaptor.forClass(QProfileDto.class);
Mockito.verify(ruleActivator).deactivateAndUpdateIndex(any(DbSession.class), qProfileDtoCaptor.capture(), ruleKeyCaptor.capture());
assertThat(ruleKeyCaptor.getValue()).isEqualTo(ruleKey);
assertThat(qProfileDtoCaptor.getValue().getKee()).isEqualTo(qualityProfile.getKee());
}

@Test
public void deactivate_rule_in_specific_organization() {
userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization);
QProfileDto qualityProfile = db.qualityProfiles().insert(organization);
RuleKey ruleKey = RuleTesting.randomRuleKey();
TestRequest request = wsActionTester.newRequest()
.setMethod("POST")
.setParam("organization", organization.getKey())
.setParam("rule_key", ruleKey.toString())
.setParam("profile_key", qualityProfile.getKee());

TestResponse response = request.execute();

// @Rule
// public DbTester db = DbTester.create();
// @Rule
// public UserSessionRule userSession = UserSessionRule.standalone();
// @Rule
// public ExpectedException thrown = ExpectedException.none();
//
// private DbClient dbClient = db.getDbClient();
// private RuleActivator ruleActivator = mock(RuleActivator.class);
// private QProfileWsSupport wsSupport = new QProfileWsSupport(dbClient, userSession, TestDefaultOrganizationProvider.from(db));
// private DeactivateRuleAction underTest = new DeactivateRuleAction(dbClient, ruleActivator, userSession, wsSupport);
// private WsActionTester wsActionTester = new WsActionTester(underTest);
// private OrganizationDto defaultOrganization;
// private OrganizationDto organization;
//
// @Before
// public void before() {
// defaultOrganization = db.getDefaultOrganization();
// organization = db.organizations().insert();
// }
//
// @Test
// public void define_deactivate_rule_action() {
// WebService.Action definition = wsActionTester.getDef();
// assertThat(definition).isNotNull();
// assertThat(definition.isPost()).isTrue();
// assertThat(definition.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("profile_key", "rule_key");
// }
//
// @Test
// public void should_fail_if_not_logged_in() {
// TestRequest request = wsActionTester.newRequest()
// .setMethod("POST")
// .setParam("rule_key", RuleTesting.newRuleDto().getKey().toString())
// .setParam("profile_key", randomAlphanumeric(UUID_SIZE));
//
// thrown.expect(UnauthorizedException.class);
// request.execute();
// }
//
// @Test
// public void should_fail_if_not_organization_quality_profile_administrator() {
// userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization);
// QProfileDto qualityProfile = db.qualityProfiles().insert(organization);
// TestRequest request = wsActionTester.newRequest()
// .setMethod("POST")
// .setParam("rule_key", RuleTesting.newRuleDto().getKey().toString())
// .setParam("profile_key", qualityProfile.getKee());
//
// thrown.expect(ForbiddenException.class);
// request.execute();
// }
//
// @Test
// public void fail_deactivate_if_built_in_profile() {
// userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization);
//
// QProfileDto qualityProfile = db.qualityProfiles().insert(defaultOrganization, profile -> profile.setIsBuiltIn(true));
// TestRequest request = wsActionTester.newRequest()
// .setMethod("POST")
// .setParam("rule_key", RuleTesting.newRuleDto().getKey().toString())
// .setParam("profile_key", qualityProfile.getKee());
//
// thrown.expect(BadRequestException.class);
//
// request.execute();
// }
//
// @Test
// public void deactivate_rule_in_default_organization() {
// userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization);
// QProfileDto qualityProfile = db.qualityProfiles().insert(defaultOrganization);
// RuleKey ruleKey = RuleTesting.randomRuleKey();
// TestRequest request = wsActionTester.newRequest()
// .setMethod("POST")
// .setParam("rule_key", ruleKey.toString())
// .setParam("profile_key", qualityProfile.getKee());
//
// TestResponse response = request.execute();
//
// assertThat(response.getStatus()).isEqualTo(HttpURLConnection.HTTP_NO_CONTENT);
// ArgumentCaptor<ActiveRuleKey> captor = ArgumentCaptor.forClass(ActiveRuleKey.class);
// Mockito.verify(ruleActivator).deactivateAndUpdateIndex(any(DbSession.class), captor.capture());
// assertThat(captor.getValue().getRuleKey()).isEqualTo(ruleKey);
// assertThat(captor.getValue().getRuleProfileUuid()).isEqualTo(qualityProfile.getKee());
// }
//
// @Test
// public void deactivate_rule_in_specific_organization() {
// userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization);
// QProfileDto qualityProfile = db.qualityProfiles().insert(organization);
// RuleKey ruleKey = RuleTesting.randomRuleKey();
// TestRequest request = wsActionTester.newRequest()
// .setMethod("POST")
// .setParam("organization", organization.getKey())
// .setParam("rule_key", ruleKey.toString())
// .setParam("profile_key", qualityProfile.getKee());
//
// TestResponse response = request.execute();
//
// assertThat(response.getStatus()).isEqualTo(HttpURLConnection.HTTP_NO_CONTENT);
// ArgumentCaptor<ActiveRuleKey> captor = ArgumentCaptor.forClass(ActiveRuleKey.class);
// Mockito.verify(ruleActivator).deactivateAndUpdateIndex(any(DbSession.class), captor.capture());
// assertThat(captor.getValue().getRuleKey()).isEqualTo(ruleKey);
// assertThat(captor.getValue().getRuleProfileUuid()).isEqualTo(qualityProfile.getKee());
// }
assertThat(response.getStatus()).isEqualTo(HttpURLConnection.HTTP_NO_CONTENT);
ArgumentCaptor<RuleKey> captor = ArgumentCaptor.forClass(RuleKey.class);
ArgumentCaptor<QProfileDto> qProfileDtoCaptor = ArgumentCaptor.forClass(QProfileDto.class);
Mockito.verify(ruleActivator).deactivateAndUpdateIndex(any(DbSession.class), qProfileDtoCaptor.capture(), captor.capture());
assertThat(captor.getValue()).isEqualTo(ruleKey);
assertThat(qProfileDtoCaptor.getValue().getKee()).isEqualTo(qualityProfile.getKee());
}
}

+ 250
- 206
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/InheritanceActionTest.java Прегледај датотеку

@@ -19,212 +19,256 @@
*/
package org.sonar.server.qualityprofile.ws;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.api.config.MapSettings;
import org.sonar.api.resources.Languages;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rule.Severity;
import org.sonar.api.utils.System2;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.qualityprofile.ActiveRuleDto;
import org.sonar.db.qualityprofile.QProfileDto;
import org.sonar.db.rule.RuleDefinitionDto;
import org.sonar.db.rule.RuleTesting;
import org.sonar.server.es.EsClient;
import org.sonar.server.es.EsTester;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.organization.TestDefaultOrganizationProvider;
import org.sonar.server.qualityprofile.QProfileLookup;
import org.sonar.server.qualityprofile.QProfileName;
import org.sonar.server.qualityprofile.RuleActivation;
import org.sonar.server.qualityprofile.RuleActivator;
import org.sonar.server.qualityprofile.RuleActivatorContextFactory;
import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
import org.sonar.server.qualityprofile.index.ActiveRuleIteratorFactory;
import org.sonar.server.rule.index.RuleIndex;
import org.sonar.server.rule.index.RuleIndexDefinition;
import org.sonar.server.rule.index.RuleIndexer;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.util.TypeValidations;
import org.sonar.server.ws.WsActionTester;
import org.sonar.test.JsonAssert;
import org.sonarqube.ws.QualityProfiles.InheritanceWsResponse;

import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.server.qualityprofile.QProfileTesting.newQProfileDto;
import static org.sonarqube.ws.MediaTypes.PROTOBUF;

public class InheritanceActionTest {

// @Rule
// public DbTester dbTester = DbTester.create();
// @Rule
// public EsTester esTester = new EsTester(new RuleIndexDefinition(new MapSettings()));
// @Rule
// public UserSessionRule userSession = UserSessionRule.standalone();
//
// private DbClient dbClient;
// private DbSession dbSession;
// private EsClient esClient;
// private RuleIndexer ruleIndexer;
// private ActiveRuleIndexer activeRuleIndexer;
// private InheritanceAction underTest;
// private WsActionTester wsActionTester;
// private RuleActivator ruleActivator;
// private OrganizationDto organization;
//
// @Before
// public void setUp() {
// dbClient = dbTester.getDbClient();
// dbSession = dbTester.getSession();
// esClient = esTester.client();
// ruleIndexer = new RuleIndexer(esClient, dbClient);
// activeRuleIndexer = new ActiveRuleIndexer(dbClient, esClient, , new ActiveRuleIteratorFactory(dbClient));
// TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester);
// underTest = new InheritanceAction(
// dbClient,
// new QProfileLookup(dbClient),
// new QProfileWsSupport(dbClient, userSession, defaultOrganizationProvider),
// new Languages());
// wsActionTester = new WsActionTester(underTest);
// ruleActivator = new RuleActivator(
// System2.INSTANCE,
// dbClient,
// new RuleIndex(esClient),
// new RuleActivatorContextFactory(dbClient),
// new TypeValidations(new ArrayList<>()),
// activeRuleIndexer,
// userSession);
// organization = dbTester.organizations().insert();
// }
//
// @Test
// public void inheritance_nominal() throws Exception {
// RuleDefinitionDto rule1 = createRule("xoo", "rule1");
// RuleDefinitionDto rule2 = createRule("xoo", "rule2");
// RuleDefinitionDto rule3 = createRule("xoo", "rule3");
//
// /*
// * sonar way (2) <- companyWide (2) <- buWide (2, 1 overriding) <- (forProject1 (2), forProject2 (2))
// */
// QProfileDto sonarway = dbTester.qualityProfiles().insert(organization, p ->
// p.setKee("xoo-sonar-way").setLanguage("xoo").setName("Sonar way").setIsBuiltIn(true));
// createActiveRule(rule1, sonarway);
// createActiveRule(rule2, sonarway);
//
// dbSession.commit();
// activeRuleIndexer.index();
//
// QProfileDto companyWide = createProfile("xoo", "My Company Profile", "xoo-my-company-profile-12345");
// setParent(sonarway, companyWide);
//
// QProfileDto buWide = createProfile("xoo", "My BU Profile", "xoo-my-bu-profile-23456");
// setParent(companyWide, buWide);
// overrideActiveRuleSeverity(rule1, buWide, Severity.CRITICAL);
//
// QProfileDto forProject1 = createProfile("xoo", "For Project One", "xoo-for-project-one-34567");
// setParent(buWide, forProject1);
// createActiveRule(rule3, forProject1);
// dbSession.commit();
// activeRuleIndexer.index();
//
// QProfileDto forProject2 = createProfile("xoo", "For Project Two", "xoo-for-project-two-45678");
// setParent(buWide, forProject2);
// overrideActiveRuleSeverity(rule2, forProject2, Severity.CRITICAL);
//
// String response = wsActionTester.newRequest()
// .setMethod("GET")
// .setParam("profileKey", buWide.getKee())
// .execute()
// .getInput();
//
// JsonAssert.assertJson(response).isSimilarTo(getClass().getResource("InheritanceActionTest/inheritance-buWide.json"));
// }
//
// @Test
// public void inheritance_parent_child() throws Exception {
// RuleDefinitionDto rule1 = dbTester.rules().insert();
// ruleIndexer.indexRuleDefinition(rule1.getKey());
//
// RuleDefinitionDto rule2 = dbTester.rules().insert();
// ruleIndexer.indexRuleDefinition(rule1.getKey());
//
// RuleDefinitionDto rule3 = dbTester.rules().insert();
// ruleIndexer.indexRuleDefinition(rule1.getKey());
//
// QProfileDto parent = dbTester.qualityProfiles().insert(organization);
// dbTester.qualityProfiles().activateRule(parent, rule1);
// dbTester.qualityProfiles().activateRule(parent, rule2);
// long parentRules = 2;
//
// QProfileDto child = dbTester.qualityProfiles().insert(organization, q -> q.setParentKee(parent.getKee()));
// dbTester.qualityProfiles().activateRule(child, rule3);
// long childRules = 1;
//
// activeRuleIndexer.index();
//
// InputStream response = wsActionTester.newRequest()
// .setMethod("GET")
// .setMediaType(PROTOBUF)
// .setParam("profileKey", child.getKee())
// .execute()
// .getInputStream();
//
// InheritanceWsResponse result = InheritanceWsResponse.parseFrom(response);
//
// assertThat(result.getProfile().getKey()).isEqualTo(child.getKee());
// assertThat(result.getProfile().getActiveRuleCount()).isEqualTo(childRules);
//
// assertThat(result.getAncestorsList()).extracting(InheritanceWsResponse.QualityProfile::getKey).containsExactly(parent.getKee());
// assertThat(result.getAncestorsList()).extracting(InheritanceWsResponse.QualityProfile::getActiveRuleCount).containsExactly(parentRules);
// }
//
// @Test
// public void inheritance_ignores_removed_rules() throws Exception {
// RuleDefinitionDto rule = dbTester.rules().insert(r -> r.setStatus(RuleStatus.REMOVED));
// ruleIndexer.indexRuleDefinition(rule.getKey());
//
// QProfileDto profile = dbTester.qualityProfiles().insert(organization);
// dbTester.qualityProfiles().activateRule(profile, rule);
// long activeRules = 0;
//
// activeRuleIndexer.index();
//
// InputStream response = wsActionTester.newRequest()
// .setMethod("GET")
// .setMediaType(PROTOBUF)
// .setParam("profileKey", profile.getKee())
// .execute()
// .getInputStream();
//
// InheritanceWsResponse result = InheritanceWsResponse.parseFrom(response);
// assertThat(result.getProfile().getKey()).isEqualTo(profile.getKee());
// assertThat(result.getProfile().getActiveRuleCount()).isEqualTo(activeRules);
// }
//
// @Test
// public void inheritance_no_family() throws Exception {
// // Simple profile, no parent, no child
// QProfileDto remi = createProfile("xoo", "Nobodys Boy", "xoo-nobody-s-boy-01234");
//
// String response = wsActionTester.newRequest()
// .setMethod("GET")
// .setParam("profileKey", remi.getKee())
// .execute()
// .getInput();
//
// JsonAssert.assertJson(response).isSimilarTo(getClass().getResource("InheritanceActionTest/inheritance-simple.json"));
// }
//
// @Test(expected = NotFoundException.class)
// public void fail_if_not_found() throws Exception {
// wsActionTester.newRequest()
// .setMethod("GET").setParam("profileKey", "polop").execute();
// }
//
// private QProfileDto createProfile(String lang, String name, String key) {
// QProfileDto profile = newQProfileDto(organization, new QProfileName(lang, name), key);
// dbClient.qualityProfileDao().insert(dbSession, profile);
// dbSession.commit();
// return profile;
// }
//
// private void setParent(QProfileDto profile, QProfileDto parent) {
// ruleActivator.setParent(dbSession, parent, profile);
// }
//
// private RuleDefinitionDto createRule(String lang, String id) {
// long now = new Date().getTime();
// RuleDefinitionDto rule = RuleTesting.newRule(RuleKey.of("blah", id))
// .setLanguage(lang)
// .setSeverity(Severity.BLOCKER)
// .setStatus(RuleStatus.READY)
// .setUpdatedAt(now)
// .setCreatedAt(now);
// dbClient.ruleDao().insert(dbSession, rule);
// dbSession.commit();
// ruleIndexer.indexRuleDefinition(rule.getKey());
// return rule;
// }
//
// private ActiveRuleDto createActiveRule(RuleDefinitionDto rule, QProfileDto profile) {
// long now = new Date().getTime();
// ActiveRuleDto activeRule = ActiveRuleDto.createFor(profile, rule)
// .setSeverity(rule.getSeverityString())
// .setUpdatedAt(now)
// .setCreatedAt(now);
// dbClient.activeRuleDao().insert(dbSession, activeRule);
// return activeRule;
// }
//
// private void overrideActiveRuleSeverity(RuleDefinitionDto rule, QProfileDto profile, String severity) {
// ruleActivator.activate(dbSession, new RuleActivation(rule.getKey()).setSeverity(severity), profile.getKee());
// dbSession.commit();
// activeRuleIndexer.index();
// }
@Rule
public DbTester dbTester = DbTester.create();
@Rule
public EsTester esTester = new EsTester(new RuleIndexDefinition(new MapSettings()));
@Rule
public UserSessionRule userSession = UserSessionRule.standalone();
private DbClient dbClient;
private DbSession dbSession;
private EsClient esClient;
private RuleIndexer ruleIndexer;
private ActiveRuleIndexer activeRuleIndexer;
private InheritanceAction underTest;
private WsActionTester wsActionTester;
private RuleActivator ruleActivator;
private OrganizationDto organization;
@Before
public void setUp() {
dbClient = dbTester.getDbClient();
dbSession = dbTester.getSession();
esClient = esTester.client();
ruleIndexer = new RuleIndexer(esClient, dbClient);
activeRuleIndexer = new ActiveRuleIndexer(dbClient, esClient, new ActiveRuleIteratorFactory(dbClient));
TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester);
underTest = new InheritanceAction(
dbClient,
new QProfileLookup(dbClient),
new QProfileWsSupport(dbClient, userSession, defaultOrganizationProvider),
new Languages());
wsActionTester = new WsActionTester(underTest);
ruleActivator = new RuleActivator(
System2.INSTANCE,
dbClient,
new RuleIndex(esClient),
new RuleActivatorContextFactory(dbClient),
new TypeValidations(new ArrayList<>()),
activeRuleIndexer,
userSession);
organization = dbTester.organizations().insert();
}
@Test
public void inheritance_nominal() throws Exception {
RuleDefinitionDto rule1 = createRule("xoo", "rule1");
RuleDefinitionDto rule2 = createRule("xoo", "rule2");
RuleDefinitionDto rule3 = createRule("xoo", "rule3");
/*
* sonar way (2) <- companyWide (2) <- buWide (2, 1 overriding) <- (forProject1 (2), forProject2 (2))
*/
QProfileDto sonarway = dbTester.qualityProfiles().insert(organization, p ->
p.setKee("xoo-sonar-way").setLanguage("xoo").setName("Sonar way").setIsBuiltIn(true));
ActiveRuleDto activeRule1 = createActiveRule(rule1, sonarway);
ActiveRuleDto activeRule2 = createActiveRule(rule2, sonarway);
dbSession.commit();
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());
QProfileDto companyWide = createProfile("xoo", "My Company Profile", "xoo-my-company-profile-12345");
setParent(sonarway, companyWide);
QProfileDto buWide = createProfile("xoo", "My BU Profile", "xoo-my-bu-profile-23456");
setParent(companyWide, buWide);
overrideActiveRuleSeverity(rule1, buWide, Severity.CRITICAL);
QProfileDto forProject1 = createProfile("xoo", "For Project One", "xoo-for-project-one-34567");
setParent(buWide, forProject1);
createActiveRule(rule3, forProject1);
dbSession.commit();
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());
QProfileDto forProject2 = createProfile("xoo", "For Project Two", "xoo-for-project-two-45678");
setParent(buWide, forProject2);
overrideActiveRuleSeverity(rule2, forProject2, Severity.CRITICAL);
String response = wsActionTester.newRequest()
.setMethod("GET")
.setParam("profileKey", buWide.getKee())
.execute()
.getInput();
JsonAssert.assertJson(response).isSimilarTo(getClass().getResource("InheritanceActionTest/inheritance-buWide.json"));
}
@Test
public void inheritance_parent_child() throws Exception {
RuleDefinitionDto rule1 = dbTester.rules().insert();
ruleIndexer.indexRuleDefinition(rule1.getKey());
RuleDefinitionDto rule2 = dbTester.rules().insert();
ruleIndexer.indexRuleDefinition(rule1.getKey());
RuleDefinitionDto rule3 = dbTester.rules().insert();
ruleIndexer.indexRuleDefinition(rule1.getKey());
QProfileDto parent = dbTester.qualityProfiles().insert(organization);
dbTester.qualityProfiles().activateRule(parent, rule1);
dbTester.qualityProfiles().activateRule(parent, rule2);
long parentRules = 2;
QProfileDto child = dbTester.qualityProfiles().insert(organization, q -> q.setParentKee(parent.getKee()));
dbTester.qualityProfiles().activateRule(child, rule3);
long childRules = 1;
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());
InputStream response = wsActionTester.newRequest()
.setMethod("GET")
.setMediaType(PROTOBUF)
.setParam("profileKey", child.getKee())
.execute()
.getInputStream();
InheritanceWsResponse result = InheritanceWsResponse.parseFrom(response);
assertThat(result.getProfile().getKey()).isEqualTo(child.getKee());
assertThat(result.getProfile().getActiveRuleCount()).isEqualTo(childRules);
assertThat(result.getAncestorsList()).extracting(InheritanceWsResponse.QualityProfile::getKey).containsExactly(parent.getKee());
assertThat(result.getAncestorsList()).extracting(InheritanceWsResponse.QualityProfile::getActiveRuleCount).containsExactly(parentRules);
}
@Test
public void inheritance_ignores_removed_rules() throws Exception {
RuleDefinitionDto rule = dbTester.rules().insert(r -> r.setStatus(RuleStatus.REMOVED));
ruleIndexer.indexRuleDefinition(rule.getKey());
QProfileDto profile = dbTester.qualityProfiles().insert(organization);
dbTester.qualityProfiles().activateRule(profile, rule);
long activeRules = 0;
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());
InputStream response = wsActionTester.newRequest()
.setMethod("GET")
.setMediaType(PROTOBUF)
.setParam("profileKey", profile.getKee())
.execute()
.getInputStream();
InheritanceWsResponse result = InheritanceWsResponse.parseFrom(response);
assertThat(result.getProfile().getKey()).isEqualTo(profile.getKee());
assertThat(result.getProfile().getActiveRuleCount()).isEqualTo(activeRules);
}
@Test
public void inheritance_no_family() throws Exception {
// Simple profile, no parent, no child
QProfileDto remi = createProfile("xoo", "Nobodys Boy", "xoo-nobody-s-boy-01234");
String response = wsActionTester.newRequest()
.setMethod("GET")
.setParam("profileKey", remi.getKee())
.execute()
.getInput();
JsonAssert.assertJson(response).isSimilarTo(getClass().getResource("InheritanceActionTest/inheritance-simple.json"));
}
@Test(expected = NotFoundException.class)
public void fail_if_not_found() throws Exception {
wsActionTester.newRequest()
.setMethod("GET").setParam("profileKey", "polop").execute();
}
private QProfileDto createProfile(String lang, String name, String key) {
QProfileDto profile = newQProfileDto(organization, new QProfileName(lang, name), key);
dbClient.qualityProfileDao().insert(dbSession, profile);
dbSession.commit();
return profile;
}
private void setParent(QProfileDto profile, QProfileDto parent) {
ruleActivator.setParent(dbSession, parent, profile);
}
private RuleDefinitionDto createRule(String lang, String id) {
long now = new Date().getTime();
RuleDefinitionDto rule = RuleTesting.newRule(RuleKey.of("blah", id))
.setLanguage(lang)
.setSeverity(Severity.BLOCKER)
.setStatus(RuleStatus.READY)
.setUpdatedAt(now)
.setCreatedAt(now);
dbClient.ruleDao().insert(dbSession, rule);
dbSession.commit();
ruleIndexer.indexRuleDefinition(rule.getKey());
return rule;
}
private ActiveRuleDto createActiveRule(RuleDefinitionDto rule, QProfileDto profile) {
long now = new Date().getTime();
ActiveRuleDto activeRule = ActiveRuleDto.createFor(profile, rule)
.setSeverity(rule.getSeverityString())
.setUpdatedAt(now)
.setCreatedAt(now);
dbClient.activeRuleDao().insert(dbSession, activeRule);
return activeRule;
}
private void overrideActiveRuleSeverity(RuleDefinitionDto rule, QProfileDto profile, String severity) {
ruleActivator.activate(dbSession, RuleActivation.create(rule.getKey(), severity, null), profile);
dbSession.commit();
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());
}
}

+ 439
- 390
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java Прегледај датотеку

@@ -19,396 +19,445 @@
*/
package org.sonar.server.qualityprofile.ws;

import com.google.common.collect.ImmutableSet;
import java.util.Collections;
import java.util.Optional;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rule.Severity;
import org.sonar.api.server.ws.WebService;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.organization.OrganizationTesting;
import org.sonar.db.qualityprofile.ActiveRuleDao;
import org.sonar.db.qualityprofile.ActiveRuleDto;
import org.sonar.db.qualityprofile.ActiveRuleKey;
import org.sonar.db.qualityprofile.QProfileDto;
import org.sonar.db.rule.RuleDefinitionDto;
import org.sonar.db.rule.RuleTesting;
import org.sonar.server.es.SearchOptions;
import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.qualityprofile.QProfileName;
import org.sonar.server.qualityprofile.QProfileTesting;
import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
import org.sonar.server.rule.index.RuleIndex;
import org.sonar.server.rule.index.RuleIndexer;
import org.sonar.server.rule.index.RuleQuery;
import org.sonar.server.tester.ServerTester;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.WsTester;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_ACTIVATE_RULE;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_DEACTIVATE_RULE;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ActivateActionParameters.PARAM_PROFILE_KEY;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ActivateActionParameters.PARAM_RULE_KEY;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ActivateActionParameters.PARAM_SEVERITY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_LANGUAGES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_QPROFILE;

public class QProfilesWsMediumTest {

// @ClassRule
// public static ServerTester tester = new ServerTester().withEsIndexes();
//
// @Rule
// public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester)
// .logIn().setRoot();
//
// private DbClient db;
// private DbSession session;
// private WsTester wsTester;
// private RuleIndexer ruleIndexer = tester.get(RuleIndexer.class);
// private ActiveRuleIndexer activeRuIndexer = tester.get(ActiveRuleIndexer.class);
// private OrganizationDto organization;
//
// @Before
// public void setUp() {
// tester.clearDbAndIndexes();
// db = tester.get(DbClient.class);
// wsTester = tester.get(WsTester.class);
// session = db.openSession(false);
//
// ruleIndexer = tester.get(RuleIndexer.class);
// activeRuIndexer = tester.get(ActiveRuleIndexer.class);
// organization = OrganizationTesting.newOrganizationDto().setKey("org-123");
// db.organizationDao().insert(session, organization, false);
// }
//
// @After
// public void after() {
// session.close();
// }
//
// @Test
// public void deactivate_rule() throws Exception {
// QProfileDto profile = createProfile("java");
// RuleDefinitionDto rule = createRule(profile.getLanguage(), "toto");
// createActiveRule(rule, profile);
// session.commit();
// ruleIndexer.indexRuleDefinition(rule.getKey());
// activeRuIndexer.index();
//
// // 0. Assert No Active Rule for profile
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(1);
//
// // 1. Deactivate Rule
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_DEACTIVATE_RULE);
// request.setParam(PARAM_PROFILE_KEY, profile.getKee());
// request.setParam(PARAM_RULE_KEY, rule.getKey().toString());
// request.execute();
// session.clearCache();
//
// // 2. Assert ActiveRule in DAO
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();
// }
//
// @Test
// public void bulk_deactivate_rule() throws Exception {
// QProfileDto profile = createProfile("java");
// RuleDefinitionDto rule0 = createRule(profile.getLanguage(), "toto1");
// RuleDefinitionDto rule1 = createRule(profile.getLanguage(), "toto2");
// RuleDefinitionDto rule2 = createRule(profile.getLanguage(), "toto3");
// RuleDefinitionDto rule3 = createRule(profile.getLanguage(), "toto4");
// createActiveRule(rule0, profile);
// createActiveRule(rule2, profile);
// createActiveRule(rule3, profile);
// createActiveRule(rule1, profile);
// session.commit();
// activeRuIndexer.index();
//
// // 0. Assert No Active Rule for profile
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(4);
//
// // 1. Deactivate Rule
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, DeactivateRulesAction.DEACTIVATE_RULES_ACTION);
// request.setParam(PARAM_PROFILE_KEY, profile.getKee());
// WsTester.Result result = request.execute();
// session.clearCache();
//
// // 2. Assert ActiveRule in DAO
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();
// }
//
// @Test
// public void bulk_deactivate_rule_not_all() throws Exception {
// QProfileDto profile = createProfile("java");
// QProfileDto php = createProfile("php");
// RuleDefinitionDto rule0 = createRule(profile.getLanguage(), "toto1");
// RuleDefinitionDto rule1 = createRule(profile.getLanguage(), "toto2");
// createActiveRule(rule0, profile);
// createActiveRule(rule1, profile);
// createActiveRule(rule0, php);
// createActiveRule(rule1, php);
// session.commit();
// activeRuIndexer.index();
//
// // 0. Assert No Active Rule for profile
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(2);
//
// // 1. Deactivate Rule
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, DeactivateRulesAction.DEACTIVATE_RULES_ACTION);
// request.setParam(PARAM_PROFILE_KEY, profile.getKee());
// WsTester.Result result = request.execute();
// session.clearCache();
//
// // 2. Assert ActiveRule in DAO
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(0);
// assertThat(db.activeRuleDao().selectByProfileUuid(session, php.getKee())).hasSize(2);
// }
//
// @Test
// public void bulk_deactivate_rule_by_profile() throws Exception {
// QProfileDto profile = createProfile("java");
// RuleDefinitionDto rule0 = createRule(profile.getLanguage(), "hello");
// RuleDefinitionDto rule1 = createRule(profile.getLanguage(), "world");
// createActiveRule(rule0, profile);
// createActiveRule(rule1, profile);
// session.commit();
// activeRuIndexer.index();
//
// // 0. Assert No Active Rule for profile
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(2);
//
// // 1. Deactivate Rule
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, DeactivateRulesAction.DEACTIVATE_RULES_ACTION);
// request.setParam(PARAM_PROFILE_KEY, profile.getKee());
// request.setParam(WebService.Param.TEXT_QUERY, "hello");
// WsTester.Result result = request.execute();
// session.clearCache();
//
// // 2. Assert ActiveRule in DAO
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(1);
// }
//
// @Test
// public void activate_rule() throws Exception {
// QProfileDto profile = createProfile("java");
// RuleDefinitionDto rule = createRule(profile.getLanguage(), "toto");
// session.commit();
// ruleIndexer.indexRuleDefinition(rule.getKey());
//
// // 0. Assert No Active Rule for profile
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();
//
// // 1. Activate Rule
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_ACTIVATE_RULE);
// request.setParam(PARAM_PROFILE_KEY, profile.getKee());
// request.setParam(PARAM_RULE_KEY, rule.getKey().toString());
// WsTester.Result result = request.execute();
// session.clearCache();
//
// // 2. Assert ActiveRule in DAO
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(1);
// }
//
// @Test
// public void activate_rule_diff_languages() throws Exception {
// QProfileDto profile = createProfile("java");
// RuleDefinitionDto rule = createRule("php", "toto");
// session.commit();
// ruleIndexer.indexRuleDefinition(rule.getKey());
//
// // 0. Assert No Active Rule for profile
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();
//
// try {
// // 1. Activate Rule
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_ACTIVATE_RULE);
// request.setParam(PARAM_PROFILE_KEY, profile.getKee());
// request.setParam(PARAM_RULE_KEY, rule.getKey().toString());
// request.execute();
// session.clearCache();
// fail();
// } catch (BadRequestException e) {
// assertThat(e.getMessage()).isEqualTo("Rule blah:toto and profile pjava have different languages");
// }
// }
//
// @Test
// public void activate_rule_override_severity() throws Exception {
// QProfileDto profile = createProfile("java");
// RuleDefinitionDto rule = createRule(profile.getLanguage(), "toto");
// session.commit();
// ruleIndexer.indexRuleDefinition(rule.getKey());
//
// // 0. Assert No Active Rule for profile
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();
//
// // 1. Activate Rule
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_ACTIVATE_RULE);
// request.setParam(PARAM_PROFILE_KEY, profile.getKee());
// request.setParam(PARAM_RULE_KEY, rule.getKey().toString());
// request.setParam(PARAM_SEVERITY, "MINOR");
// WsTester.Result result = request.execute();
// session.clearCache();
//
// // 2. Assert ActiveRule in DAO
// ActiveRuleKey activeRuleKey = ActiveRuleKey.of(profile.getKee(), rule.getKey());
//
// assertThat(db.activeRuleDao().selectOrFailByKey(session, activeRuleKey).getSeverityString())
// .isEqualTo("MINOR");
// }
//
// @Test
// public void bulk_activate_rule() throws Exception {
// QProfileDto profile = createProfile("java");
// createRule(profile.getLanguage(), "toto");
// createRule(profile.getLanguage(), "tata");
// createRule(profile.getLanguage(), "hello");
// createRule(profile.getLanguage(), "world");
// session.commit();
//
// // 0. Assert No Active Rule for profile
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();
//
// // 1. Activate Rule
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.ACTIVATE_RULES_ACTION);
// request.setParam(PARAM_PROFILE_KEY, profile.getKee());
// request.setParam(PARAM_LANGUAGES, "java");
// request.execute().assertJson(getClass(), "bulk_activate_rule.json");
// session.clearCache();
//
// // 2. Assert ActiveRule in DAO
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(4);
// }
//
// @Test
// public void bulk_activate_rule_not_all() throws Exception {
// QProfileDto java = createProfile("java");
// QProfileDto php = createProfile("php");
// createRule(java.getLanguage(), "toto");
// createRule(java.getLanguage(), "tata");
// createRule(php.getLanguage(), "hello");
// createRule(php.getLanguage(), "world");
// session.commit();
//
// // 0. Assert No Active Rule for profile
// assertThat(db.activeRuleDao().selectByProfileUuid(session, php.getKee())).isEmpty();
//
// // 1. Activate Rule
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.ACTIVATE_RULES_ACTION);
// request.setParam(PARAM_PROFILE_KEY, php.getKee());
// request.setParam(PARAM_LANGUAGES, "php");
// request.execute().assertJson(getClass(), "bulk_activate_rule_not_all.json");
// session.clearCache();
//
// // 2. Assert ActiveRule in DAO
// assertThat(db.activeRuleDao().selectByProfileUuid(session, php.getKee())).hasSize(2);
// }
//
// @Test
// public void bulk_activate_rule_by_query() throws Exception {
// QProfileDto profile = createProfile("java");
// createRule(profile.getLanguage(), "toto");
// createRule(profile.getLanguage(), "tata");
// createRule(profile.getLanguage(), "hello");
// createRule(profile.getLanguage(), "world");
// session.commit();
//
// // 0. Assert No Active Rule for profile
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();
//
// // 1. Activate Rule with query returning 0 hits
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.ACTIVATE_RULES_ACTION);
// request.setParam(PARAM_PROFILE_KEY, profile.getKee());
// request.setParam(WebService.Param.TEXT_QUERY, "php");
// request.execute();
// session.clearCache();
//
// // 2. Assert ActiveRule in DAO
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(0);
//
// // 1. Activate Rule with query returning 1 hits
// request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.ACTIVATE_RULES_ACTION);
// request.setParam(PARAM_PROFILE_KEY, profile.getKee());
// request.setParam(WebService.Param.TEXT_QUERY, "world");
// request.execute();
// session.commit();
//
// // 2. Assert ActiveRule in DAO
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(1);
// }
//
// @Test
// public void bulk_activate_rule_by_query_with_severity() throws Exception {
// QProfileDto profile = createProfile("java");
// RuleDefinitionDto rule0 = createRule(profile.getLanguage(), "toto");
// RuleDefinitionDto rule1 = createRule(profile.getLanguage(), "tata");
// session.commit();
//
// // 0. Assert No Active Rule for profile
// assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();
//
// // 2. Assert ActiveRule with BLOCKER severity
// assertThat(tester.get(RuleIndex.class).search(
// new RuleQuery().setSeverities(ImmutableSet.of("BLOCKER")),
// new SearchOptions()).getIds()).hasSize(2);
//
// // 1. Activate Rule with query returning 2 hits
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.ACTIVATE_RULES_ACTION);
// request.setParam(ActivateRulesAction.PROFILE_KEY, profile.getKee());
// request.setParam(ActivateRulesAction.SEVERITY, "MINOR");
// request.execute();
// session.commit();
//
// // 2. Assert ActiveRule with MINOR severity
// assertThat(tester.get(ActiveRuleDao.class).selectByRuleId(session, organization, rule0.getId()).get(0).getSeverityString()).isEqualTo("MINOR");
// assertThat(tester.get(RuleIndex.class).searchAll(new RuleQuery()
// .setQProfileKey(profile.getKee())
// .setKey(rule0.getKey().toString())
// .setActiveSeverities(Collections.singleton("MINOR"))
// .setActivation(true))).hasSize(1);
// }
//
// @Test
// public void does_not_return_warnings_when_bulk_activate_on_profile_and_rules_exist_on_another_language_than_profile() throws Exception {
// QProfileDto javaProfile = createProfile("java");
// createRule(javaProfile.getLanguage(), "toto");
// createRule(javaProfile.getLanguage(), "tata");
// QProfileDto phpProfile = createProfile("php");
// createRule(phpProfile.getLanguage(), "hello");
// createRule(phpProfile.getLanguage(), "world");
// session.commit();
//
// // 1. Activate Rule
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.ACTIVATE_RULES_ACTION);
// request.setParam(PARAM_PROFILE_KEY, javaProfile.getKee());
// request.setParam(PARAM_QPROFILE, javaProfile.getKee());
// request.setParam("activation", "false");
// request.execute().assertJson(getClass(), "does_not_return_warnings_when_bulk_activate_on_profile_and_rules_exist_on_another_language_than_profile.json");
// session.clearCache();
//
// // 2. Assert ActiveRule in DAO
// assertThat(db.activeRuleDao().selectByProfileUuid(session, javaProfile.getKee())).hasSize(2);
// }
//
// @Test
// public void reset() throws Exception {
// QProfileDto profile = QProfileTesting.newXooP1(organization);
// QProfileDto subProfile = QProfileTesting.newXooP2(organization).setParentKee(QProfileTesting.XOO_P1_KEY);
// db.qualityProfileDao().insert(session, profile, subProfile);
//
// RuleDefinitionDto rule = createRule(profile.getLanguage(), "rule");
// ActiveRuleDto active1 = ActiveRuleDto.createFor(profile, rule)
// .setSeverity(rule.getSeverityString());
// ActiveRuleDto active2 = ActiveRuleDto.createFor(subProfile, rule)
// .setSeverity("MINOR");
// db.activeRuleDao().insert(session, active1);
// db.activeRuleDao().insert(session, active2);
//
// session.commit();
// activeRuIndexer.index();
//
// // 0. assert rule child rule is minor
// assertThat(db.activeRuleDao().selectOrFailByKey(session, active2.getKey()).getSeverityString()).isEqualTo("MINOR");
//
// // 1. reset child rule
// WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_ACTIVATE_RULE);
// request.setParam("profile_key", subProfile.getKee());
// request.setParam("rule_key", rule.getKey().toString());
// request.setParam("reset", "true");
// request.execute();
// session.clearCache();
//
// // 2. assert rule child rule is NOT minor
// assertThat(db.activeRuleDao().selectOrFailByKey(session, active2.getKey()).getSeverityString()).isNotEqualTo("MINOR");
// }
//
// private QProfileDto createProfile(String lang) {
// QProfileDto profile = QProfileTesting.newQProfileDto(organization, new QProfileName(lang, "P" + lang), "p" + lang);
// db.qualityProfileDao().insert(session, profile);
// return profile;
// }
//
// private RuleDefinitionDto createRule(String lang, String id) {
// RuleDefinitionDto rule = RuleTesting.newRule(RuleKey.of("blah", id))
// .setLanguage(lang)
// .setSeverity(Severity.BLOCKER)
// .setStatus(RuleStatus.READY);
// db.ruleDao().insert(session, rule);
// session.commit();
// ruleIndexer.indexRuleDefinition(rule.getKey());
// return rule;
// }
//
// private ActiveRuleDto createActiveRule(RuleDefinitionDto rule, QProfileDto profile) {
// ActiveRuleDto activeRule = ActiveRuleDto.createFor(profile, rule)
// .setSeverity(rule.getSeverityString());
// db.activeRuleDao().insert(session, activeRule);
// return activeRule;
// }
@ClassRule
public static ServerTester tester = new ServerTester().withEsIndexes();

@Rule
public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester)
.logIn().setRoot();

private DbClient db;
private DbSession session;
private WsTester wsTester;
private RuleIndexer ruleIndexer = tester.get(RuleIndexer.class);
private ActiveRuleIndexer activeRuleIndexer = tester.get(ActiveRuleIndexer.class);
private OrganizationDto organization;

@Before
public void setUp() {
tester.clearDbAndIndexes();
db = tester.get(DbClient.class);
wsTester = tester.get(WsTester.class);
session = db.openSession(false);

ruleIndexer = tester.get(RuleIndexer.class);
activeRuleIndexer = tester.get(ActiveRuleIndexer.class);
organization = OrganizationTesting.newOrganizationDto().setKey("org-123");
db.organizationDao().insert(session, organization, false);
}

@After
public void after() {
session.close();
}

@Test
public void deactivate_rule() throws Exception {
QProfileDto profile = createProfile("java");
RuleDefinitionDto rule = createRule(profile.getLanguage(), "toto");
createActiveRule(rule, profile);
session.commit();
ruleIndexer.indexRuleDefinition(rule.getKey());
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());

// 0. Assert No Active Rule for profile
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(1);

// 1. Deactivate Rule
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_DEACTIVATE_RULE);
request.setParam(PARAM_PROFILE_KEY, profile.getKee());
request.setParam(PARAM_RULE_KEY, rule.getKey().toString());
request.execute();
session.clearCache();

// 2. Assert ActiveRule in DAO
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();
}

@Test
public void bulk_deactivate_rule() throws Exception {
QProfileDto profile = createProfile("java");
RuleDefinitionDto rule0 = createRule(profile.getLanguage(), "toto1");
RuleDefinitionDto rule1 = createRule(profile.getLanguage(), "toto2");
RuleDefinitionDto rule2 = createRule(profile.getLanguage(), "toto3");
RuleDefinitionDto rule3 = createRule(profile.getLanguage(), "toto4");
createActiveRule(rule0, profile);
createActiveRule(rule2, profile);
createActiveRule(rule3, profile);
createActiveRule(rule1, profile);
session.commit();
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());

// 0. Assert No Active Rule for profile
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(4);

// 1. Deactivate Rule
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, DeactivateRulesAction.DEACTIVATE_RULES_ACTION);
request.setParam(PARAM_PROFILE_KEY, profile.getKee());
WsTester.Result result = request.execute();
session.clearCache();

// 2. Assert ActiveRule in DAO
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();
}

@Test
public void bulk_deactivate_rule_not_all() throws Exception {
QProfileDto profile = createProfile("java");
QProfileDto php = createProfile("php");
RuleDefinitionDto rule0 = createRule(profile.getLanguage(), "toto1");
RuleDefinitionDto rule1 = createRule(profile.getLanguage(), "toto2");
createActiveRule(rule0, profile);
createActiveRule(rule1, profile);
createActiveRule(rule0, php);
createActiveRule(rule1, php);
session.commit();
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());

// 0. Assert No Active Rule for profile
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(2);

// 1. Deactivate Rule
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, DeactivateRulesAction.DEACTIVATE_RULES_ACTION);
request.setParam(PARAM_PROFILE_KEY, profile.getKee());
WsTester.Result result = request.execute();
session.clearCache();

// 2. Assert ActiveRule in DAO
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(0);
assertThat(db.activeRuleDao().selectByProfileUuid(session, php.getKee())).hasSize(2);
}

@Test
public void bulk_deactivate_rule_by_profile() throws Exception {
QProfileDto profile = createProfile("java");
RuleDefinitionDto rule0 = createRule(profile.getLanguage(), "hello");
RuleDefinitionDto rule1 = createRule(profile.getLanguage(), "world");
createActiveRule(rule0, profile);
createActiveRule(rule1, profile);
session.commit();
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());

// 0. Assert No Active Rule for profile
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(2);

// 1. Deactivate Rule
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, DeactivateRulesAction.DEACTIVATE_RULES_ACTION);
request.setParam(PARAM_PROFILE_KEY, profile.getKee());
request.setParam(WebService.Param.TEXT_QUERY, "hello");
WsTester.Result result = request.execute();
session.clearCache();

// 2. Assert ActiveRule in DAO
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(1);
}

@Test
public void activate_rule() throws Exception {
QProfileDto profile = createProfile("java");
RuleDefinitionDto rule = createRule(profile.getLanguage(), "toto");
session.commit();
ruleIndexer.indexRuleDefinition(rule.getKey());

// 0. Assert No Active Rule for profile
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();

// 1. Activate Rule
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_ACTIVATE_RULE);
request.setParam(PARAM_PROFILE_KEY, profile.getKee());
request.setParam(PARAM_RULE_KEY, rule.getKey().toString());
WsTester.Result result = request.execute();
session.clearCache();

// 2. Assert ActiveRule in DAO
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(1);
}

@Test
public void activate_rule_diff_languages() throws Exception {
QProfileDto profile = createProfile("java");
RuleDefinitionDto rule = createRule("php", "toto");
session.commit();
ruleIndexer.indexRuleDefinition(rule.getKey());

// 0. Assert No Active Rule for profile
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();

try {
// 1. Activate Rule
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_ACTIVATE_RULE);
request.setParam(PARAM_PROFILE_KEY, profile.getKee());
request.setParam(PARAM_RULE_KEY, rule.getKey().toString());
request.execute();
session.clearCache();
fail();
} catch (BadRequestException e) {
assertThat(e.getMessage()).isEqualTo("Rule blah:toto and profile pjava have different languages");
}
}

@Test
public void activate_rule_override_severity() throws Exception {
QProfileDto profile = createProfile("java");
RuleDefinitionDto rule = createRule(profile.getLanguage(), "toto");
session.commit();
ruleIndexer.indexRuleDefinition(rule.getKey());

// 0. Assert No Active Rule for profile
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();

// 1. Activate Rule
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_ACTIVATE_RULE);
request.setParam(PARAM_PROFILE_KEY, profile.getKee());
request.setParam(PARAM_RULE_KEY, rule.getKey().toString());
request.setParam(PARAM_SEVERITY, "MINOR");
WsTester.Result result = request.execute();
session.clearCache();

// 2. Assert ActiveRule in DAO
ActiveRuleKey activeRuleKey = ActiveRuleKey.of(profile, rule.getKey());

Optional<ActiveRuleDto> activeRuleDto = db.activeRuleDao().selectByKey(session, activeRuleKey);
assertThat(activeRuleDto.isPresent()).isTrue();
assertThat(activeRuleDto.get().getSeverityString()).isEqualTo(Severity.MINOR);
}

@Test
public void bulk_activate_rule() throws Exception {
QProfileDto profile = createProfile("java");
createRule(profile.getLanguage(), "toto");
createRule(profile.getLanguage(), "tata");
createRule(profile.getLanguage(), "hello");
createRule(profile.getLanguage(), "world");
session.commit();

// 0. Assert No Active Rule for profile
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();

// 1. Activate Rule
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.ACTIVATE_RULES_ACTION);
request.setParam(PARAM_PROFILE_KEY, profile.getKee());
request.setParam(PARAM_LANGUAGES, "java");
request.execute().assertJson(getClass(), "bulk_activate_rule.json");
session.clearCache();

// 2. Assert ActiveRule in DAO
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(4);
}

@Test
public void bulk_activate_rule_not_all() throws Exception {
QProfileDto java = createProfile("java");
QProfileDto php = createProfile("php");
createRule(java.getLanguage(), "toto");
createRule(java.getLanguage(), "tata");
createRule(php.getLanguage(), "hello");
createRule(php.getLanguage(), "world");
session.commit();

// 0. Assert No Active Rule for profile
assertThat(db.activeRuleDao().selectByProfileUuid(session, php.getKee())).isEmpty();

// 1. Activate Rule
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.ACTIVATE_RULES_ACTION);
request.setParam(PARAM_PROFILE_KEY, php.getKee());
request.setParam(PARAM_LANGUAGES, "php");
request.execute().assertJson(getClass(), "bulk_activate_rule_not_all.json");
session.clearCache();

// 2. Assert ActiveRule in DAO
assertThat(db.activeRuleDao().selectByProfileUuid(session, php.getKee())).hasSize(2);
}

@Test
public void bulk_activate_rule_by_query() throws Exception {
QProfileDto profile = createProfile("java");
createRule(profile.getLanguage(), "toto");
createRule(profile.getLanguage(), "tata");
createRule(profile.getLanguage(), "hello");
createRule(profile.getLanguage(), "world");
session.commit();

// 0. Assert No Active Rule for profile
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();

// 1. Activate Rule with query returning 0 hits
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.ACTIVATE_RULES_ACTION);
request.setParam(PARAM_PROFILE_KEY, profile.getKee());
request.setParam(WebService.Param.TEXT_QUERY, "php");
request.execute();
session.clearCache();

// 2. Assert ActiveRule in DAO
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(0);

// 1. Activate Rule with query returning 1 hits
request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.ACTIVATE_RULES_ACTION);
request.setParam(PARAM_PROFILE_KEY, profile.getKee());
request.setParam(WebService.Param.TEXT_QUERY, "world");
request.execute();
session.commit();

// 2. Assert ActiveRule in DAO
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).hasSize(1);
}

@Test
public void bulk_activate_rule_by_query_with_severity() throws Exception {
QProfileDto profile = createProfile("java");
RuleDefinitionDto rule0 = createRule(profile.getLanguage(), "toto");
RuleDefinitionDto rule1 = createRule(profile.getLanguage(), "tata");
session.commit();

// 0. Assert No Active Rule for profile
assertThat(db.activeRuleDao().selectByProfileUuid(session, profile.getKee())).isEmpty();

// 2. Assert ActiveRule with BLOCKER severity
assertThat(tester.get(RuleIndex.class).search(
new RuleQuery().setSeverities(ImmutableSet.of("BLOCKER")),
new SearchOptions()).getIds()).hasSize(2);

// 1. Activate Rule with query returning 2 hits
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.ACTIVATE_RULES_ACTION);
request.setParam(ActivateRulesAction.PROFILE_KEY, profile.getKee());
request.setParam(ActivateRulesAction.SEVERITY, "MINOR");
request.execute();
session.commit();

// 2. Assert ActiveRule with MINOR severity
assertThat(tester.get(ActiveRuleDao.class).selectByRuleId(session, organization, rule0.getId()).get(0).getSeverityString()).isEqualTo("MINOR");
assertThat(tester.get(RuleIndex.class).searchAll(new RuleQuery()
.setQProfile(profile)
.setKey(rule0.getKey().toString())
.setActiveSeverities(Collections.singleton("MINOR"))
.setActivation(true))).hasSize(1);
}

@Test
public void does_not_return_warnings_when_bulk_activate_on_profile_and_rules_exist_on_another_language_than_profile() throws Exception {
QProfileDto javaProfile = createProfile("java");
createRule(javaProfile.getLanguage(), "toto");
createRule(javaProfile.getLanguage(), "tata");
QProfileDto phpProfile = createProfile("php");
createRule(phpProfile.getLanguage(), "hello");
createRule(phpProfile.getLanguage(), "world");
session.commit();

// 1. Activate Rule
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ActivateRulesAction.ACTIVATE_RULES_ACTION);
request.setParam(PARAM_PROFILE_KEY, javaProfile.getKee());
request.setParam(PARAM_QPROFILE, javaProfile.getKee());
request.setParam("activation", "false");
request.execute().assertJson(getClass(), "does_not_return_warnings_when_bulk_activate_on_profile_and_rules_exist_on_another_language_than_profile.json");
session.clearCache();

// 2. Assert ActiveRule in DAO
assertThat(db.activeRuleDao().selectByProfileUuid(session, javaProfile.getKee())).hasSize(2);
}

@Test
public void reset() throws Exception {
QProfileDto profile = QProfileTesting.newXooP1(organization);
QProfileDto subProfile = QProfileTesting.newXooP2(organization).setParentKee(QProfileTesting.XOO_P1_KEY);
db.qualityProfileDao().insert(session, profile, subProfile);

RuleDefinitionDto rule = createRule(profile.getLanguage(), "rule");
ActiveRuleDto active1 = ActiveRuleDto.createFor(profile, rule)
.setSeverity(rule.getSeverityString());
ActiveRuleDto active2 = ActiveRuleDto.createFor(subProfile, rule)
.setSeverity("MINOR");
db.activeRuleDao().insert(session, active1);
db.activeRuleDao().insert(session, active2);

session.commit();
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());

// 0. assert rule child rule is minor
Optional<ActiveRuleDto> activeRuleDto = db.activeRuleDao().selectByKey(session, active2.getKey());
assertThat(activeRuleDto.isPresent()).isTrue();
assertThat(activeRuleDto.get().getSeverityString()).isEqualTo(Severity.MINOR);

// 1. reset child rule
WsTester.TestRequest request = wsTester.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_ACTIVATE_RULE);
request.setParam("profile_key", subProfile.getKee());
request.setParam("rule_key", rule.getKey().toString());
request.setParam("reset", "true");
request.execute();
session.clearCache();

// 2. assert rule child rule is NOT minor
activeRuleDto = db.activeRuleDao().selectByKey(session, active2.getKey());
assertThat(activeRuleDto.isPresent()).isTrue();
assertThat(activeRuleDto.get().getSeverityString()).isNotEqualTo(Severity.MINOR);
}

private QProfileDto createProfile(String lang) {
QProfileDto profile = QProfileTesting.newQProfileDto(organization, new QProfileName(lang, "P" + lang), "p" + lang);
db.qualityProfileDao().insert(session, profile);
return profile;
}

private RuleDefinitionDto createRule(String lang, String id) {
RuleDefinitionDto rule = RuleTesting.newRule(RuleKey.of("blah", id))
.setLanguage(lang)
.setSeverity(Severity.BLOCKER)
.setStatus(RuleStatus.READY);
db.ruleDao().insert(session, rule);
session.commit();
ruleIndexer.indexRuleDefinition(rule.getKey());
return rule;
}

private ActiveRuleDto createActiveRule(RuleDefinitionDto rule, QProfileDto profile) {
ActiveRuleDto activeRule = ActiveRuleDto.createFor(profile, rule)
.setSeverity(rule.getSeverityString());
db.activeRuleDao().insert(session, activeRule);
return activeRule;
}
}

+ 282
- 245
server/sonar-server/src/test/java/org/sonar/server/rule/ws/ShowActionMediumTest.java Прегледај датотеку

@@ -19,252 +19,289 @@
*/
package org.sonar.server.rule.ws;

import java.util.Date;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rules.RuleType;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.qualityprofile.ActiveRuleDao;
import org.sonar.db.qualityprofile.ActiveRuleDto;
import org.sonar.db.qualityprofile.ActiveRuleParamDto;
import org.sonar.db.qualityprofile.QualityProfileDao;
import org.sonar.db.qualityprofile.QProfileDto;
import org.sonar.db.rule.RuleDao;
import org.sonar.db.rule.RuleDefinitionDto;
import org.sonar.db.rule.RuleDto;
import org.sonar.db.rule.RuleDto.Format;
import org.sonar.db.rule.RuleParamDto;
import org.sonar.db.rule.RuleTesting;
import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
import org.sonar.server.rule.NewCustomRule;
import org.sonar.server.rule.RuleCreator;
import org.sonar.server.rule.index.RuleIndexer;
import org.sonar.server.tester.ServerTester;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.WsTester;

import static com.google.common.collect.Sets.newHashSet;
import static org.sonar.api.rule.Severity.MINOR;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES;

public class ShowActionMediumTest {

// @ClassRule
// public static ServerTester tester = new ServerTester().withEsIndexes();
//
// DefaultOrganizationProvider defaultOrganizationProvider = tester.get(DefaultOrganizationProvider.class);
//
// @Rule
// public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester).logIn()
// .addPermission(ADMINISTER_QUALITY_PROFILES, defaultOrganizationProvider.get().getUuid());
//
// private WsTester wsTester;
// private RuleIndexer ruleIndexer;
// private RuleDao ruleDao;
// private DbSession session;
// private OrganizationDto defaultOrganization;
//
// @Before
// public void setUp() {
// tester.clearDbAndIndexes();
// wsTester = tester.get(WsTester.class);
// ruleIndexer = tester.get(RuleIndexer.class);
// ruleDao = tester.get(RuleDao.class);
// session = tester.get(DbClient.class).openSession(false);
// defaultOrganization = tester.get(DbClient.class).organizationDao().selectByUuid(session, defaultOrganizationProvider.get().getUuid()).get();
// }
//
// @After
// public void after() {
// session.close();
// }
//
// @Test
// public void show_rule() throws Exception {
// RuleDto ruleDto = RuleTesting.newDto(RuleKey.of("java", "S001"), defaultOrganization)
// .setName("Rule S001")
// .setDescription("Rule S001 <b>description</b>")
// .setDescriptionFormat(Format.HTML)
// .setSeverity(MINOR)
// .setStatus(RuleStatus.BETA)
// .setConfigKey("InternalKeyS001")
// .setLanguage("xoo")
// .setTags(newHashSet("tag1", "tag2"))
// .setSystemTags(newHashSet("systag1", "systag2"))
// .setType(RuleType.BUG);
// RuleDefinitionDto definition = ruleDto.getDefinition();
// ruleDao.insert(session, definition);
// ruleDao.insertOrUpdate(session, ruleDto.getMetadata().setRuleId(ruleDto.getId()));
// RuleParamDto param = RuleParamDto.createFor(definition).setName("regex").setType("STRING").setDescription("Reg *exp*").setDefaultValue(".*");
// ruleDao.insertRuleParam(session, definition, param);
// session.commit();
// session.clearCache();
//
// WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
// .setParam("key", ruleDto.getKey().toString());
// request.execute().assertJson(getClass(), "show_rule.json");
// }
//
// @Test
// public void show_rule_with_default_debt_infos() throws Exception {
// RuleDto ruleDto = RuleTesting.newDto(RuleKey.of("java", "S001"), defaultOrganization)
// .setName("Rule S001")
// .setDescription("Rule S001 <b>description</b>")
// .setSeverity(MINOR)
// .setStatus(RuleStatus.BETA)
// .setConfigKey("InternalKeyS001")
// .setLanguage("xoo")
// .setDefRemediationFunction("LINEAR_OFFSET")
// .setDefRemediationGapMultiplier("5d")
// .setDefRemediationBaseEffort("10h")
// .setRemediationFunction(null)
// .setRemediationGapMultiplier(null)
// .setRemediationBaseEffort(null);
// ruleDao.insert(session, ruleDto.getDefinition());
// ruleDao.insertOrUpdate(session, ruleDto.getMetadata());
// session.commit();
// session.clearCache();
//
// WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
// .setParam("key", ruleDto.getKey().toString());
// WsTester.Result response = request.execute();
//
// response.assertJson(getClass(), "show_rule_with_default_debt_infos.json");
// }
//
// @Test
// public void show_rule_with_overridden_debt() throws Exception {
// RuleDto ruleDto = RuleTesting.newDto(RuleKey.of("java", "S001"), defaultOrganization)
// .setName("Rule S001")
// .setDescription("Rule S001 <b>description</b>")
// .setSeverity(MINOR)
// .setStatus(RuleStatus.BETA)
// .setConfigKey("InternalKeyS001")
// .setLanguage("xoo")
// .setDefRemediationFunction(null)
// .setDefRemediationGapMultiplier(null)
// .setDefRemediationBaseEffort(null)
// .setRemediationFunction("LINEAR_OFFSET")
// .setRemediationGapMultiplier("5d")
// .setRemediationBaseEffort("10h");
// ruleDao.insert(session, ruleDto.getDefinition());
// ruleDao.insertOrUpdate(session, ruleDto.getMetadata().setRuleId(ruleDto.getId()));
// session.commit();
// session.clearCache();
//
// WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
// .setParam("key", ruleDto.getKey().toString());
// request.execute().assertJson(getClass(), "show_rule_with_overridden_debt_infos.json");
// }
//
// @Test
// public void show_rule_with_default_and_overridden_debt_infos() throws Exception {
// RuleDto ruleDto = RuleTesting.newDto(RuleKey.of("java", "S001"), defaultOrganization)
// .setName("Rule S001")
// .setDescription("Rule S001 <b>description</b>")
// .setSeverity(MINOR)
// .setStatus(RuleStatus.BETA)
// .setConfigKey("InternalKeyS001")
// .setLanguage("xoo")
// .setDefRemediationFunction("LINEAR")
// .setDefRemediationGapMultiplier("5min")
// .setDefRemediationBaseEffort(null)
// .setRemediationFunction("LINEAR_OFFSET")
// .setRemediationGapMultiplier("5d")
// .setRemediationBaseEffort("10h");
// ruleDao.insert(session, ruleDto.getDefinition());
// ruleDao.insertOrUpdate(session, ruleDto.getMetadata().setRuleId(ruleDto.getId()));
// session.commit();
// session.clearCache();
//
// WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
// .setParam("key", ruleDto.getKey().toString());
// request.execute().assertJson(getClass(), "show_rule_with_default_and_overridden_debt_infos.json");
// }
//
// @Test
// public void show_rule_with_no_default_and_no_overridden_debt() throws Exception {
// RuleDefinitionDto ruleDto = RuleTesting.newRule(RuleKey.of("java", "S001"))
// .setName("Rule S001")
// .setDescription("Rule S001 <b>description</b>")
// .setDescriptionFormat(Format.HTML)
// .setSeverity(MINOR)
// .setStatus(RuleStatus.BETA)
// .setConfigKey("InternalKeyS001")
// .setLanguage("xoo")
// .setDefRemediationFunction(null)
// .setDefRemediationGapMultiplier(null)
// .setDefRemediationBaseEffort(null);
// ruleDao.insert(session, ruleDto);
// session.commit();
// session.clearCache();
//
// WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
// .setParam("key", ruleDto.getKey().toString());
// request.execute().assertJson(getClass(), "show_rule_with_no_default_and_no_overridden_debt.json");
// }
//
// @Test
// public void encode_html_description_of_custom_rule() throws Exception {
// // Template rule
// RuleDto templateRule = RuleTesting.newTemplateRule(RuleKey.of("java", "S001"));
// ruleDao.insert(session, templateRule.getDefinition());
// session.commit();
//
// // Custom rule
// NewCustomRule customRule = NewCustomRule.createForCustomRule("MY_CUSTOM", templateRule.getKey())
// .setName("My custom")
// .setSeverity(MINOR)
// .setStatus(RuleStatus.READY)
// .setMarkdownDescription("<div>line1\nline2</div>");
// RuleKey customRuleKey = tester.get(RuleCreator.class).create(session, customRule);
// session.clearCache();
//
// WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
// .setParam("key", customRuleKey.toString());
// request.execute().assertJson(getClass(), "encode_html_description_of_custom_rule.json");
// }
//
// @Test
// public void show_deprecated_rule_rem_function_fields() throws Exception {
// RuleDto ruleDto = RuleTesting.newDto(RuleKey.of("java", "S001"), defaultOrganization)
// .setName("Rule S001")
// .setDescription("Rule S001 <b>description</b>")
// .setSeverity(MINOR)
// .setStatus(RuleStatus.BETA)
// .setConfigKey("InternalKeyS001")
// .setLanguage("xoo")
// .setDefRemediationFunction("LINEAR_OFFSET")
// .setDefRemediationGapMultiplier("6d")
// .setDefRemediationBaseEffort("11h")
// .setRemediationFunction("LINEAR_OFFSET")
// .setRemediationGapMultiplier("5d")
// .setRemediationBaseEffort("10h");
// ruleDao.insert(session, ruleDto.getDefinition());
// ruleDao.insertOrUpdate(session, ruleDto.getMetadata().setRuleId(ruleDto.getId()));
// session.commit();
//
// WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
// .setParam("key", ruleDto.getKey().toString());
// request.execute().assertJson(getClass(), "show_deprecated_rule_rem_function_fields.json");
// }
//
// @Test
// public void show_rule_when_activated() throws Exception {
// RuleDefinitionDto ruleDto = RuleTesting.newRule(RuleKey.of("java", "S001"))
// .setName("Rule S001")
// .setDescription("Rule S001 <b>description</b>")
// .setDescriptionFormat(Format.HTML)
// .setSeverity(MINOR)
// .setStatus(RuleStatus.BETA)
// .setLanguage("xoo")
// .setType(RuleType.BUG)
// .setCreatedAt(new Date().getTime())
// .setUpdatedAt(new Date().getTime());
// ruleDao.insert(session, ruleDto);
// session.commit();
// ruleIndexer.indexRuleDefinition(ruleDto.getKey());
// RuleParamDto regexParam = RuleParamDto.createFor(ruleDto).setName("regex").setType("STRING").setDescription("Reg *exp*").setDefaultValue(".*");
// ruleDao.insertRuleParam(session, ruleDto, regexParam);
//
// QProfileDto profile = new QProfileDto()
// .setKee("profile")
// .setRulesProfileUuid("rp-profile")
// .setOrganizationUuid(defaultOrganizationProvider.get().getUuid())
// .setName("Profile")
// .setLanguage("xoo");
// tester.get(QualityProfileDao.class).insert(session, profile);
// ActiveRuleDto activeRuleDto = new ActiveRuleDto()
// .setProfileId(profile.getId())
// .setRuleId(ruleDto.getId())
// .setSeverity(MINOR)
// .setCreatedAt(new Date().getTime())
// .setUpdatedAt(new Date().getTime());
// tester.get(ActiveRuleDao.class).insert(session, activeRuleDto);
// tester.get(ActiveRuleDao.class).insertParam(session, activeRuleDto, new ActiveRuleParamDto()
// .setRulesParameterId(regexParam.getId())
// .setKey(regexParam.getName())
// .setValue(".*?"));
// session.commit();
//
// tester.get(ActiveRuleIndexer.class).index();
//
// WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
// .setParam("key", ruleDto.getKey().toString())
// .setParam("actives", "true");
// request.execute().assertJson(getClass(), "show_rule_when_activated.json");
// }
@ClassRule
public static ServerTester tester = new ServerTester().withEsIndexes();

DefaultOrganizationProvider defaultOrganizationProvider = tester.get(DefaultOrganizationProvider.class);

@Rule
public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester).logIn()
.addPermission(ADMINISTER_QUALITY_PROFILES, defaultOrganizationProvider.get().getUuid());

private WsTester wsTester;
private RuleIndexer ruleIndexer;
private RuleDao ruleDao;
private DbSession session;
private OrganizationDto defaultOrganization;

@Before
public void setUp() {
tester.clearDbAndIndexes();
wsTester = tester.get(WsTester.class);
ruleIndexer = tester.get(RuleIndexer.class);
ruleDao = tester.get(RuleDao.class);
session = tester.get(DbClient.class).openSession(false);
defaultOrganization = tester.get(DbClient.class).organizationDao().selectByUuid(session, defaultOrganizationProvider.get().getUuid()).get();
}

@After
public void after() {
session.close();
}

@Test
public void show_rule() throws Exception {
RuleDto ruleDto = RuleTesting.newDto(RuleKey.of("java", "S001"), defaultOrganization)
.setName("Rule S001")
.setDescription("Rule S001 <b>description</b>")
.setDescriptionFormat(Format.HTML)
.setSeverity(MINOR)
.setStatus(RuleStatus.BETA)
.setConfigKey("InternalKeyS001")
.setLanguage("xoo")
.setTags(newHashSet("tag1", "tag2"))
.setSystemTags(newHashSet("systag1", "systag2"))
.setType(RuleType.BUG);
RuleDefinitionDto definition = ruleDto.getDefinition();
ruleDao.insert(session, definition);
ruleDao.insertOrUpdate(session, ruleDto.getMetadata().setRuleId(ruleDto.getId()));
RuleParamDto param = RuleParamDto.createFor(definition).setName("regex").setType("STRING").setDescription("Reg *exp*").setDefaultValue(".*");
ruleDao.insertRuleParam(session, definition, param);
session.commit();
session.clearCache();

WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
.setParam("key", ruleDto.getKey().toString());
request.execute().assertJson(getClass(), "show_rule.json");
}

@Test
public void show_rule_with_default_debt_infos() throws Exception {
RuleDto ruleDto = RuleTesting.newDto(RuleKey.of("java", "S001"), defaultOrganization)
.setName("Rule S001")
.setDescription("Rule S001 <b>description</b>")
.setSeverity(MINOR)
.setStatus(RuleStatus.BETA)
.setConfigKey("InternalKeyS001")
.setLanguage("xoo")
.setDefRemediationFunction("LINEAR_OFFSET")
.setDefRemediationGapMultiplier("5d")
.setDefRemediationBaseEffort("10h")
.setRemediationFunction(null)
.setRemediationGapMultiplier(null)
.setRemediationBaseEffort(null);
ruleDao.insert(session, ruleDto.getDefinition());
ruleDao.insertOrUpdate(session, ruleDto.getMetadata());
session.commit();
session.clearCache();

WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
.setParam("key", ruleDto.getKey().toString());
WsTester.Result response = request.execute();

response.assertJson(getClass(), "show_rule_with_default_debt_infos.json");
}

@Test
public void show_rule_with_overridden_debt() throws Exception {
RuleDto ruleDto = RuleTesting.newDto(RuleKey.of("java", "S001"), defaultOrganization)
.setName("Rule S001")
.setDescription("Rule S001 <b>description</b>")
.setSeverity(MINOR)
.setStatus(RuleStatus.BETA)
.setConfigKey("InternalKeyS001")
.setLanguage("xoo")
.setDefRemediationFunction(null)
.setDefRemediationGapMultiplier(null)
.setDefRemediationBaseEffort(null)
.setRemediationFunction("LINEAR_OFFSET")
.setRemediationGapMultiplier("5d")
.setRemediationBaseEffort("10h");
ruleDao.insert(session, ruleDto.getDefinition());
ruleDao.insertOrUpdate(session, ruleDto.getMetadata().setRuleId(ruleDto.getId()));
session.commit();
session.clearCache();

WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
.setParam("key", ruleDto.getKey().toString());
request.execute().assertJson(getClass(), "show_rule_with_overridden_debt_infos.json");
}

@Test
public void show_rule_with_default_and_overridden_debt_infos() throws Exception {
RuleDto ruleDto = RuleTesting.newDto(RuleKey.of("java", "S001"), defaultOrganization)
.setName("Rule S001")
.setDescription("Rule S001 <b>description</b>")
.setSeverity(MINOR)
.setStatus(RuleStatus.BETA)
.setConfigKey("InternalKeyS001")
.setLanguage("xoo")
.setDefRemediationFunction("LINEAR")
.setDefRemediationGapMultiplier("5min")
.setDefRemediationBaseEffort(null)
.setRemediationFunction("LINEAR_OFFSET")
.setRemediationGapMultiplier("5d")
.setRemediationBaseEffort("10h");
ruleDao.insert(session, ruleDto.getDefinition());
ruleDao.insertOrUpdate(session, ruleDto.getMetadata().setRuleId(ruleDto.getId()));
session.commit();
session.clearCache();

WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
.setParam("key", ruleDto.getKey().toString());
request.execute().assertJson(getClass(), "show_rule_with_default_and_overridden_debt_infos.json");
}

@Test
public void show_rule_with_no_default_and_no_overridden_debt() throws Exception {
RuleDefinitionDto ruleDto = RuleTesting.newRule(RuleKey.of("java", "S001"))
.setName("Rule S001")
.setDescription("Rule S001 <b>description</b>")
.setDescriptionFormat(Format.HTML)
.setSeverity(MINOR)
.setStatus(RuleStatus.BETA)
.setConfigKey("InternalKeyS001")
.setLanguage("xoo")
.setDefRemediationFunction(null)
.setDefRemediationGapMultiplier(null)
.setDefRemediationBaseEffort(null);
ruleDao.insert(session, ruleDto);
session.commit();
session.clearCache();

WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
.setParam("key", ruleDto.getKey().toString());
request.execute().assertJson(getClass(), "show_rule_with_no_default_and_no_overridden_debt.json");
}

@Test
public void encode_html_description_of_custom_rule() throws Exception {
// Template rule
RuleDto templateRule = RuleTesting.newTemplateRule(RuleKey.of("java", "S001"));
ruleDao.insert(session, templateRule.getDefinition());
session.commit();

// Custom rule
NewCustomRule customRule = NewCustomRule.createForCustomRule("MY_CUSTOM", templateRule.getKey())
.setName("My custom")
.setSeverity(MINOR)
.setStatus(RuleStatus.READY)
.setMarkdownDescription("<div>line1\nline2</div>");
RuleKey customRuleKey = tester.get(RuleCreator.class).create(session, customRule);
session.clearCache();

WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
.setParam("key", customRuleKey.toString());
request.execute().assertJson(getClass(), "encode_html_description_of_custom_rule.json");
}

@Test
public void show_deprecated_rule_rem_function_fields() throws Exception {
RuleDto ruleDto = RuleTesting.newDto(RuleKey.of("java", "S001"), defaultOrganization)
.setName("Rule S001")
.setDescription("Rule S001 <b>description</b>")
.setSeverity(MINOR)
.setStatus(RuleStatus.BETA)
.setConfigKey("InternalKeyS001")
.setLanguage("xoo")
.setDefRemediationFunction("LINEAR_OFFSET")
.setDefRemediationGapMultiplier("6d")
.setDefRemediationBaseEffort("11h")
.setRemediationFunction("LINEAR_OFFSET")
.setRemediationGapMultiplier("5d")
.setRemediationBaseEffort("10h");
ruleDao.insert(session, ruleDto.getDefinition());
ruleDao.insertOrUpdate(session, ruleDto.getMetadata().setRuleId(ruleDto.getId()));
session.commit();

WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
.setParam("key", ruleDto.getKey().toString());
request.execute().assertJson(getClass(), "show_deprecated_rule_rem_function_fields.json");
}

@Test
public void show_rule_when_activated() throws Exception {
RuleDefinitionDto ruleDto = RuleTesting.newRule(RuleKey.of("java", "S001"))
.setName("Rule S001")
.setDescription("Rule S001 <b>description</b>")
.setDescriptionFormat(Format.HTML)
.setSeverity(MINOR)
.setStatus(RuleStatus.BETA)
.setLanguage("xoo")
.setType(RuleType.BUG)
.setCreatedAt(new Date().getTime())
.setUpdatedAt(new Date().getTime());
ruleDao.insert(session, ruleDto);
session.commit();
ruleIndexer.indexRuleDefinition(ruleDto.getKey());
RuleParamDto regexParam = RuleParamDto.createFor(ruleDto).setName("regex").setType("STRING").setDescription("Reg *exp*").setDefaultValue(".*");
ruleDao.insertRuleParam(session, ruleDto, regexParam);

QProfileDto profile = new QProfileDto()
.setRulesProfileUuid("profile")
.setKee("profile")
.setOrganizationUuid(defaultOrganizationProvider.get().getUuid())
.setName("Profile")
.setLanguage("xoo");
tester.get(QualityProfileDao.class).insert(session, profile);
ActiveRuleDto activeRuleDto = new ActiveRuleDto()
.setProfileId(profile.getId())
.setRuleId(ruleDto.getId())
.setSeverity(MINOR)
.setCreatedAt(new Date().getTime())
.setUpdatedAt(new Date().getTime());
tester.get(ActiveRuleDao.class).insert(session, activeRuleDto);
tester.get(ActiveRuleDao.class).insertParam(session, activeRuleDto, new ActiveRuleParamDto()
.setRulesParameterId(regexParam.getId())
.setKey(regexParam.getName())
.setValue(".*?"));
session.commit();

ActiveRuleIndexer activeRuleIndexer = tester.get(ActiveRuleIndexer.class);
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());

WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show")
.setParam("key", ruleDto.getKey().toString())
.setParam("actives", "true");
request.execute().assertJson(getClass(), "show_rule_when_activated.json");
}

}

+ 219
- 171
server/sonar-server/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java Прегледај датотеку

@@ -20,176 +20,224 @@

package org.sonar.server.rule.ws;

import java.io.IOException;
import java.util.List;
import java.util.function.Consumer;
import org.junit.Before;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.sonar.api.config.MapSettings;
import org.sonar.api.resources.Languages;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.qualityprofile.QProfileDto;
import org.sonar.db.rule.RuleDefinitionDto;
import org.sonar.db.rule.RuleMetadataDto;
import org.sonar.server.es.EsClient;
import org.sonar.server.es.EsTester;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.organization.TestDefaultOrganizationProvider;
import org.sonar.server.qualityprofile.QProfileTesting;
import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
import org.sonar.server.qualityprofile.index.ActiveRuleIteratorFactory;
import org.sonar.server.rule.index.RuleIndexDefinition;
import org.sonar.server.rule.index.RuleIndexer;
import org.sonar.server.text.MacroInterpreter;
import org.sonar.server.ws.TestResponse;
import org.sonar.server.ws.WsAction;
import org.sonar.server.ws.WsActionTester;
import org.sonarqube.ws.Rules;
import org.sonarqube.ws.Rules.Rule;

import static java.util.Collections.singletonList;
import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.sonar.db.rule.RuleTesting.setTags;
import static org.sonar.server.rule.ws.ShowAction.PARAM_KEY;
import static org.sonar.server.rule.ws.ShowAction.PARAM_ORGANIZATION;
import static org.sonarqube.ws.MediaTypes.PROTOBUF;

public class ShowActionTest {
//
// @org.junit.Rule
// public DbTester dbTester = DbTester.create();
// @org.junit.Rule
// public EsTester esTester = new EsTester(
// new RuleIndexDefinition(new MapSettings()));
// @org.junit.Rule
// public ExpectedException thrown = ExpectedException.none();
//
// private DbClient dbClient = dbTester.getDbClient();
// private EsClient esClient = esTester.client();
//
// private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester);
// private MacroInterpreter macroInterpreter = mock(MacroInterpreter.class);
// private Languages languages = new Languages();
// private RuleMapper mapper = new RuleMapper(languages, macroInterpreter);
// private ActiveRuleCompleter activeRuleCompleter = mock(ActiveRuleCompleter.class);
// private WsAction underTest = new ShowAction(dbClient, mapper, activeRuleCompleter, defaultOrganizationProvider);
// private WsActionTester actionTester = new WsActionTester(underTest);
//
// private RuleIndexer ruleIndexer = new RuleIndexer(esClient, dbClient);
//
// @Before
// public void before() {
// doReturn("interpreted").when(macroInterpreter).interpret(anyString());
// }
//
// @Test
// public void should_show_rule_key() throws IOException {
// RuleDefinitionDto rule = insertRule();
//
// Rules.ShowResponse result = actionTester.newRequest()
// .setParam(PARAM_KEY, rule.getKey().toString())
// .executeProtobuf(Rules.ShowResponse.class);
// assertThat(result.getRule()).extracting(Rule::getKey).containsExactly(rule.getKey().toString());
// }
//
// @Test
// public void should_show_rule_tags_in_default_organization() throws IOException {
// RuleDefinitionDto rule = insertRule();
// RuleMetadataDto metadata = insertMetadata(dbTester.getDefaultOrganization(), rule, setTags("tag1", "tag2"));
//
// Rules.ShowResponse result = actionTester.newRequest()
// .setParam(PARAM_KEY, rule.getKey().toString())
// .executeProtobuf(Rules.ShowResponse.class);
// assertThat(result.getRule().getTags().getTagsList())
// .containsExactly(metadata.getTags().toArray(new String[0]));
// }
//
// @Test
// public void should_show_rule_tags_in_specific_organization() throws IOException {
// RuleDefinitionDto rule = insertRule();
// OrganizationDto organization = dbTester.organizations().insert();
// RuleMetadataDto metadata = insertMetadata(organization, rule, setTags("tag1", "tag2"));
//
// Rules.ShowResponse result = actionTester.newRequest()
// .setParam(PARAM_KEY, rule.getKey().toString())
// .setParam(PARAM_ORGANIZATION, organization.getKey())
// .executeProtobuf(Rules.ShowResponse.class);
// assertThat(result.getRule().getTags().getTagsList())
// .containsExactly(metadata.getTags().toArray(new String[0]));
// }
//
// @Test
// public void show_rule_with_activation() throws Exception {
// OrganizationDto organization = dbTester.organizations().insert();
//
// QProfileDto profile = QProfileTesting.newXooP1(organization);
// dbClient.qualityProfileDao().insert(dbTester.getSession(), profile);
// dbTester.commit();
//
// RuleDefinitionDto rule = insertRule();
// RuleMetadataDto ruleMetadata = dbTester.rules().insertOrUpdateMetadata(rule, organization);
//
// ArgumentCaptor<OrganizationDto> orgCaptor = ArgumentCaptor.forClass(OrganizationDto.class);
// ArgumentCaptor<RuleDefinitionDto> ruleCaptor = ArgumentCaptor.forClass(RuleDefinitionDto.class);
// Rules.Active active = Rules.Active.newBuilder()
// .setQProfile(randomAlphanumeric(5))
// .setInherit(randomAlphanumeric(5))
// .setSeverity(randomAlphanumeric(5))
// .build();
// Mockito.doReturn(singletonList(active)).when(activeRuleCompleter).completeShow(any(DbSession.class), orgCaptor.capture(), ruleCaptor.capture());

// new ActiveRuleIndexer(System2.INSTANCE, dbClient, esClient).index();
//
// TestResponse response = actionTester.newRequest().setMethod("GET")
// .setMediaType(PROTOBUF)
// .setParam(ShowAction.PARAM_KEY, rule.getKey().toString())
// .setParam(ShowAction.PARAM_ACTIVES, "true")
// .setParam(ShowAction.PARAM_ORGANIZATION, organization.getKey())
// .execute();
//
// assertThat(orgCaptor.getValue().getUuid()).isEqualTo(organization.getUuid());
// assertThat(ruleCaptor.getValue().getKey()).isEqualTo(rule.getKey());
//
// Rules.ShowResponse result = response.getInputObject(Rules.ShowResponse.class);
// Rule resultRule = result.getRule();
// assertEqual(rule, ruleMetadata, resultRule);
//
// List<Rules.Active> actives = result.getActivesList();
// assertThat(actives).extracting(Rules.Active::getQProfile).containsExactly(active.getQProfile());
// assertThat(actives).extracting(Rules.Active::getInherit).containsExactly(active.getInherit());
// assertThat(actives).extracting(Rules.Active::getSeverity).containsExactly(active.getSeverity());
// }
//
// @Test
// public void show_rule_without_activation() throws Exception {
// OrganizationDto organization = dbTester.organizations().insert();
//
// QProfileDto profile = QProfileTesting.newXooP1(organization);
// dbClient.qualityProfileDao().insert(dbTester.getSession(), profile);
// dbTester.commit();
//
// RuleDefinitionDto rule = insertRule();
// RuleMetadataDto ruleMetadata = dbTester.rules().insertOrUpdateMetadata(rule, organization);
//
// dbTester.qualityProfiles().activateRule(profile, rule, a -> a.setSeverity("BLOCKER"));
// new ActiveRuleIndexer(dbClient, esClient).index();
//
// TestResponse response = actionTester.newRequest().setMethod("GET")
// .setParam(ShowAction.PARAM_KEY, rule.getKey().toString())
// .setParam(ShowAction.PARAM_ORGANIZATION, organization.getKey())
// .setMediaType(PROTOBUF)
// .execute();
//
// Rules.ShowResponse result = response.getInputObject(Rules.ShowResponse.class);
// Rule resultRule = result.getRule();
// assertEqual(rule, ruleMetadata, resultRule);
//
// List<Rules.Active> actives = result.getActivesList();
// assertThat(actives).isEmpty();
// }
//
// @Test
// public void throw_NotFoundException_if_organization_cannot_be_found() throws Exception {
// RuleDefinitionDto rule = dbTester.rules().insert();
//
// thrown.expect(NotFoundException.class);
//
// actionTester.newRequest().setMethod("POST")
// .setParam("key", rule.getKey().toString())
// .setParam("organization", "foo")
// .execute();
// }
//
// private void assertEqual(RuleDefinitionDto rule, RuleMetadataDto ruleMetadata, Rule resultRule) {
// assertThat(resultRule.getKey()).isEqualTo(rule.getKey().toString());
// assertThat(resultRule.getRepo()).isEqualTo(rule.getRepositoryKey());
// assertThat(resultRule.getName()).isEqualTo(rule.getName());
// assertThat(resultRule.getSeverity()).isEqualTo(rule.getSeverityString());
// assertThat(resultRule.getStatus().toString()).isEqualTo(rule.getStatus().toString());
// assertThat(resultRule.getInternalKey()).isEqualTo(rule.getConfigKey());
// assertThat(resultRule.getIsTemplate()).isEqualTo(rule.isTemplate());
// assertThat(resultRule.getTags().getTagsList()).containsExactlyInAnyOrder(ruleMetadata.getTags().toArray(new String[0]));
// assertThat(resultRule.getSysTags().getSysTagsList()).containsExactlyInAnyOrder(rule.getSystemTags().toArray(new String[0]));
// assertThat(resultRule.getLang()).isEqualTo(rule.getLanguage());
// assertThat(resultRule.getParams().getParamsList()).isEmpty();
// }
//
// private RuleDefinitionDto insertRule() {
// RuleDefinitionDto rule = dbTester.rules().insert();
// ruleIndexer.indexRuleDefinition(rule.getKey());
// return rule;
// }
//
// @SafeVarargs
// private final RuleMetadataDto insertMetadata(OrganizationDto organization, RuleDefinitionDto rule, Consumer<RuleMetadataDto>... populaters) {
// RuleMetadataDto metadata = dbTester.rules().insertOrUpdateMetadata(rule, organization, populaters);
// ruleIndexer.indexRuleExtension(organization, rule.getKey());
// return metadata;
// }

@org.junit.Rule
public DbTester dbTester = DbTester.create();
@org.junit.Rule
public EsTester esTester = new EsTester(
new RuleIndexDefinition(new MapSettings()));
@org.junit.Rule
public ExpectedException thrown = ExpectedException.none();

private DbClient dbClient = dbTester.getDbClient();
private EsClient esClient = esTester.client();

private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester);
private MacroInterpreter macroInterpreter = mock(MacroInterpreter.class);
private Languages languages = new Languages();
private RuleMapper mapper = new RuleMapper(languages, macroInterpreter);
private ActiveRuleCompleter activeRuleCompleter = mock(ActiveRuleCompleter.class);
private WsAction underTest = new ShowAction(dbClient, mapper, activeRuleCompleter, defaultOrganizationProvider);
private WsActionTester actionTester = new WsActionTester(underTest);

private RuleIndexer ruleIndexer = new RuleIndexer(esClient, dbClient);

@Before
public void before() {
doReturn("interpreted").when(macroInterpreter).interpret(anyString());
}

@Test
public void should_show_rule_key() throws IOException {
RuleDefinitionDto rule = insertRule();

Rules.ShowResponse result = actionTester.newRequest()
.setParam(PARAM_KEY, rule.getKey().toString())
.executeProtobuf(Rules.ShowResponse.class);
assertThat(result.getRule()).extracting(Rule::getKey).containsExactly(rule.getKey().toString());
}

@Test
public void should_show_rule_tags_in_default_organization() throws IOException {
RuleDefinitionDto rule = insertRule();
RuleMetadataDto metadata = insertMetadata(dbTester.getDefaultOrganization(), rule, setTags("tag1", "tag2"));

Rules.ShowResponse result = actionTester.newRequest()
.setParam(PARAM_KEY, rule.getKey().toString())
.executeProtobuf(Rules.ShowResponse.class);
assertThat(result.getRule().getTags().getTagsList())
.containsExactly(metadata.getTags().toArray(new String[0]));
}

@Test
public void should_show_rule_tags_in_specific_organization() throws IOException {
RuleDefinitionDto rule = insertRule();
OrganizationDto organization = dbTester.organizations().insert();
RuleMetadataDto metadata = insertMetadata(organization, rule, setTags("tag1", "tag2"));

Rules.ShowResponse result = actionTester.newRequest()
.setParam(PARAM_KEY, rule.getKey().toString())
.setParam(PARAM_ORGANIZATION, organization.getKey())
.executeProtobuf(Rules.ShowResponse.class);
assertThat(result.getRule().getTags().getTagsList())
.containsExactly(metadata.getTags().toArray(new String[0]));
}

@Test
public void show_rule_with_activation() throws Exception {
OrganizationDto organization = dbTester.organizations().insert();

QProfileDto profile = QProfileTesting.newXooP1(organization);
dbClient.qualityProfileDao().insert(dbTester.getSession(), profile);
dbTester.commit();

RuleDefinitionDto rule = insertRule();
RuleMetadataDto ruleMetadata = dbTester.rules().insertOrUpdateMetadata(rule, organization);

ArgumentCaptor<OrganizationDto> orgCaptor = ArgumentCaptor.forClass(OrganizationDto.class);
ArgumentCaptor<RuleDefinitionDto> ruleCaptor = ArgumentCaptor.forClass(RuleDefinitionDto.class);
Rules.Active active = Rules.Active.newBuilder()
.setQProfile(randomAlphanumeric(5))
.setInherit(randomAlphanumeric(5))
.setSeverity(randomAlphanumeric(5))
.build();
Mockito.doReturn(singletonList(active)).when(activeRuleCompleter).completeShow(any(DbSession.class), orgCaptor.capture(), ruleCaptor.capture());

ActiveRuleIndexer activeRuleIndexer = new ActiveRuleIndexer(dbClient, esClient, new ActiveRuleIteratorFactory(dbClient));
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());

TestResponse response = actionTester.newRequest().setMethod("GET")
.setMediaType(PROTOBUF)
.setParam(ShowAction.PARAM_KEY, rule.getKey().toString())
.setParam(ShowAction.PARAM_ACTIVES, "true")
.setParam(ShowAction.PARAM_ORGANIZATION, organization.getKey())
.execute();

assertThat(orgCaptor.getValue().getUuid()).isEqualTo(organization.getUuid());
assertThat(ruleCaptor.getValue().getKey()).isEqualTo(rule.getKey());

Rules.ShowResponse result = response.getInputObject(Rules.ShowResponse.class);
Rule resultRule = result.getRule();
assertEqual(rule, ruleMetadata, resultRule);

List<Rules.Active> actives = result.getActivesList();
assertThat(actives).extracting(Rules.Active::getQProfile).containsExactly(active.getQProfile());
assertThat(actives).extracting(Rules.Active::getInherit).containsExactly(active.getInherit());
assertThat(actives).extracting(Rules.Active::getSeverity).containsExactly(active.getSeverity());
}

@Test
public void show_rule_without_activation() throws Exception {
OrganizationDto organization = dbTester.organizations().insert();

QProfileDto profile = QProfileTesting.newXooP1(organization);
dbClient.qualityProfileDao().insert(dbTester.getSession(), profile);
dbTester.commit();

RuleDefinitionDto rule = insertRule();
RuleMetadataDto ruleMetadata = dbTester.rules().insertOrUpdateMetadata(rule, organization);

dbTester.qualityProfiles().activateRule(profile, rule, a -> a.setSeverity("BLOCKER"));
ActiveRuleIndexer activeRuleIndexer = new ActiveRuleIndexer(dbClient, esClient, new ActiveRuleIteratorFactory(dbClient));
activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes());

TestResponse response = actionTester.newRequest().setMethod("GET")
.setParam(ShowAction.PARAM_KEY, rule.getKey().toString())
.setParam(ShowAction.PARAM_ORGANIZATION, organization.getKey())
.setMediaType(PROTOBUF)
.execute();

Rules.ShowResponse result = response.getInputObject(Rules.ShowResponse.class);
Rule resultRule = result.getRule();
assertEqual(rule, ruleMetadata, resultRule);

List<Rules.Active> actives = result.getActivesList();
assertThat(actives).isEmpty();
}

@Test
public void throw_NotFoundException_if_organization_cannot_be_found() throws Exception {
RuleDefinitionDto rule = dbTester.rules().insert();

thrown.expect(NotFoundException.class);

actionTester.newRequest().setMethod("POST")
.setParam("key", rule.getKey().toString())
.setParam("organization", "foo")
.execute();
}

private void assertEqual(RuleDefinitionDto rule, RuleMetadataDto ruleMetadata, Rule resultRule) {
assertThat(resultRule.getKey()).isEqualTo(rule.getKey().toString());
assertThat(resultRule.getRepo()).isEqualTo(rule.getRepositoryKey());
assertThat(resultRule.getName()).isEqualTo(rule.getName());
assertThat(resultRule.getSeverity()).isEqualTo(rule.getSeverityString());
assertThat(resultRule.getStatus().toString()).isEqualTo(rule.getStatus().toString());
assertThat(resultRule.getInternalKey()).isEqualTo(rule.getConfigKey());
assertThat(resultRule.getIsTemplate()).isEqualTo(rule.isTemplate());
assertThat(resultRule.getTags().getTagsList()).containsExactlyInAnyOrder(ruleMetadata.getTags().toArray(new String[0]));
assertThat(resultRule.getSysTags().getSysTagsList()).containsExactlyInAnyOrder(rule.getSystemTags().toArray(new String[0]));
assertThat(resultRule.getLang()).isEqualTo(rule.getLanguage());
assertThat(resultRule.getParams().getParamsList()).isEmpty();
}

private RuleDefinitionDto insertRule() {
RuleDefinitionDto rule = dbTester.rules().insert();
ruleIndexer.indexRuleDefinition(rule.getKey());
return rule;
}

@SafeVarargs
private final RuleMetadataDto insertMetadata(OrganizationDto organization, RuleDefinitionDto rule, Consumer<RuleMetadataDto>... populaters) {
RuleMetadataDto metadata = dbTester.rules().insertOrUpdateMetadata(rule, organization, populaters);
ruleIndexer.indexRuleExtension(organization, rule.getKey());
return metadata;
}
}

Loading…
Откажи
Сачувај