diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2017-06-01 17:27:41 +0200 |
---|---|---|
committer | Eric Hartmann <hartmann.eric@gmail.com> | 2017-06-14 15:43:12 +0200 |
commit | 380816fec9f40f8d2c25c3f08be2d783b7293226 (patch) | |
tree | 286fef86e8cdd36565d51937294c200e98a88f25 /it/it-tests | |
parent | 3e26c9b9b44ebabbc2c81e134c26799ce3f4bc3b (diff) | |
download | sonarqube-380816fec9f40f8d2c25c3f08be2d783b7293226.tar.gz sonarqube-380816fec9f40f8d2c25c3f08be2d783b7293226.zip |
SONAR-9303 IT to test built-in profile cannot be modified
Diffstat (limited to 'it/it-tests')
-rw-r--r-- | it/it-tests/src/test/java/it/qualityProfile/QualityProfilesBuiltInTest.java | 93 |
1 files changed, 78 insertions, 15 deletions
diff --git a/it/it-tests/src/test/java/it/qualityProfile/QualityProfilesBuiltInTest.java b/it/it-tests/src/test/java/it/qualityProfile/QualityProfilesBuiltInTest.java index 74c74989787..0d9c3bcb38c 100644 --- a/it/it-tests/src/test/java/it/qualityProfile/QualityProfilesBuiltInTest.java +++ b/it/it-tests/src/test/java/it/qualityProfile/QualityProfilesBuiltInTest.java @@ -21,37 +21,71 @@ package it.qualityProfile; import com.sonar.orchestrator.Orchestrator; import it.Category6Suite; +import java.util.function.Predicate; +import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; +import org.sonarqube.ws.QualityProfiles; import org.sonarqube.ws.QualityProfiles.SearchWsResponse; import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile; +import org.sonarqube.ws.client.HttpException; import org.sonarqube.ws.client.WsClient; import org.sonarqube.ws.client.organization.CreateWsRequest; +import org.sonarqube.ws.client.qualityprofile.ActivateRuleWsRequest; +import org.sonarqube.ws.client.qualityprofile.CopyRequest; +import org.sonarqube.ws.client.qualityprofile.DeleteRequest; import org.sonarqube.ws.client.qualityprofile.SearchWsRequest; +import org.sonarqube.ws.client.qualityprofile.SetDefaultRequest; import static it.Category6Suite.enableOrganizationsSupport; +import static java.net.HttpURLConnection.HTTP_BAD_REQUEST; +import static org.apache.commons.lang.RandomStringUtils.randomAscii; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; +import static org.junit.Assert.fail; import static util.ItUtils.newAdminWsClient; import static util.ItUtils.newOrganizationKey; public class QualityProfilesBuiltInTest { - private static final String ANOTHER_ORGANIZATION = newOrganizationKey(); + private static final String ORGANIZATION = newOrganizationKey(); + private static final String RULE_ONE_BUG_PER_LINE = "xoo:OneBugIssuePerLine"; + @ClassRule public static Orchestrator orchestrator = Category6Suite.ORCHESTRATOR; + private static WsClient adminWsClient; @BeforeClass public static void setUp() { enableOrganizationsSupport(); adminWsClient = newAdminWsClient(orchestrator); + adminWsClient.organizations().create(new CreateWsRequest.Builder() + .setKey(ORGANIZATION) + .setName(ORGANIZATION).build()); + } + + @AfterClass + public static void tearDown() { + adminWsClient.organizations().delete(ORGANIZATION); + } + + @Test + public void built_in_profiles_provided_copied_to_new_organization() { + SearchWsResponse result = adminWsClient.qualityProfiles().search(new SearchWsRequest().setOrganizationKey(ORGANIZATION)); + + assertThat(result.getProfilesList()) + .extracting(QualityProfile::getName, QualityProfile::getLanguage, QualityProfile::getIsBuiltIn, QualityProfile::getIsDefault) + .containsExactlyInAnyOrder( + tuple("Basic", "xoo", true, true), + tuple("empty", "xoo", true, false), + tuple("Basic", "xoo2", true, true)); } @Test - public void xoo_profiles_provided() { - SearchWsResponse result = adminWsClient.qualityProfiles().search(new SearchWsRequest()); + public void built_in_profiles_provided_for_default_organization() { + SearchWsResponse result = adminWsClient.qualityProfiles().search(new SearchWsRequest().setOrganizationKey("default-organization")); assertThat(result.getProfilesList()) .extracting(QualityProfile::getOrganization, QualityProfile::getName, QualityProfile::getLanguage, QualityProfile::getIsBuiltIn, QualityProfile::getIsDefault) @@ -62,18 +96,47 @@ public class QualityProfilesBuiltInTest { } @Test - public void xoo_profiles_provided_copied_to_new_organization() { - adminWsClient.organizations().create(new CreateWsRequest.Builder() - .setKey(ANOTHER_ORGANIZATION) - .setName(ANOTHER_ORGANIZATION).build()); - SearchWsResponse result = adminWsClient.qualityProfiles().search(new SearchWsRequest() - .setOrganizationKey(ANOTHER_ORGANIZATION)); + public void cannot_delete_built_in_profile_even_when_non_default() { + QualityProfile defaultBuiltInProfile = getProfile(p -> p.getIsBuiltIn() && p.getIsDefault() && "Basic".equals(p.getName()) && "xoo".equals(p.getLanguage())); - assertThat(result.getProfilesList()) - .extracting(QualityProfile::getOrganization, QualityProfile::getName, QualityProfile::getLanguage, QualityProfile::getIsBuiltIn, QualityProfile::getIsDefault) - .containsExactlyInAnyOrder( - tuple(ANOTHER_ORGANIZATION, "Basic", "xoo", true, true), - tuple(ANOTHER_ORGANIZATION, "empty", "xoo", true, false), - tuple(ANOTHER_ORGANIZATION, "Basic", "xoo2", true, true)); + QualityProfiles.CopyWsResponse copiedProfile = adminWsClient.qualityProfiles().copy(new CopyRequest(defaultBuiltInProfile.getKey(), randomAscii(20))); + adminWsClient.qualityProfiles().setDefault(new SetDefaultRequest(copiedProfile.getKey())); + + try { + adminWsClient.qualityProfiles().delete(new DeleteRequest(defaultBuiltInProfile.getKey())); + fail(); + } catch (HttpException e) { + assertThat(e.code()).isEqualTo(400); + assertThat(e.content()).contains("Operation forbidden for built-in Quality Profile 'Basic' with language 'xoo'"); + } finally { + adminWsClient.qualityProfiles().setDefault(new SetDefaultRequest(defaultBuiltInProfile.getKey())); + adminWsClient.qualityProfiles().delete(new DeleteRequest(copiedProfile.getKey())); + } + } + + @Test + public void fail_to_modify_built_in_quality_profile() { + QualityProfile profile = getProfile(p -> p.getIsBuiltIn() && "Basic".equals(p.getName()) && "xoo".equals(p.getLanguage())); + assertThat(profile.getIsBuiltIn()).isTrue(); + + try { + adminWsClient.qualityProfiles().activateRule(ActivateRuleWsRequest.builder() + .setOrganization(ORGANIZATION) + .setProfileKey(profile.getKey()) + .setRuleKey(RULE_ONE_BUG_PER_LINE) + .build()); + fail(); + } catch (HttpException e) { + assertThat(e.code()).isEqualTo(HTTP_BAD_REQUEST); + assertThat(e.content()).contains("Operation forbidden for built-in Quality Profile 'Basic' with language 'xoo'"); + } + } + + private QualityProfile getProfile(Predicate<QualityProfile> filter) { + return adminWsClient.qualityProfiles().search(new SearchWsRequest() + .setOrganizationKey(ORGANIZATION)).getProfilesList() + .stream() + .filter(filter) + .findAny().orElseThrow(IllegalStateException::new); } } |