You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SetDefaultTemplateActionTest.java 9.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2019 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.server.permission.ws.template;
  21. import javax.annotation.Nullable;
  22. import org.junit.Test;
  23. import org.sonar.api.resources.Qualifiers;
  24. import org.sonar.db.DbClient;
  25. import org.sonar.db.DbSession;
  26. import org.sonar.db.organization.DefaultTemplates;
  27. import org.sonar.db.organization.OrganizationDto;
  28. import org.sonar.db.permission.template.PermissionTemplateDto;
  29. import org.sonar.db.permission.template.PermissionTemplateTesting;
  30. import org.sonar.server.exceptions.BadRequestException;
  31. import org.sonar.server.exceptions.ForbiddenException;
  32. import org.sonar.server.exceptions.NotFoundException;
  33. import org.sonar.server.exceptions.UnauthorizedException;
  34. import org.sonar.server.l18n.I18nRule;
  35. import org.sonar.server.permission.ws.BasePermissionWsTest;
  36. import org.sonar.server.ws.TestRequest;
  37. import static org.assertj.core.api.Assertions.assertThat;
  38. import static org.sonar.api.resources.Qualifiers.APP;
  39. import static org.sonar.api.resources.Qualifiers.PROJECT;
  40. import static org.sonar.api.resources.Qualifiers.VIEW;
  41. import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_ORGANIZATION;
  42. import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_QUALIFIER;
  43. import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_TEMPLATE_ID;
  44. import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_TEMPLATE_NAME;
  45. public class SetDefaultTemplateActionTest extends BasePermissionWsTest<SetDefaultTemplateAction> {
  46. private DbClient dbClient = db.getDbClient();
  47. private I18nRule i18n = new I18nRule();
  48. @Override
  49. protected SetDefaultTemplateAction buildWsAction() {
  50. return new SetDefaultTemplateAction(db.getDbClient(), newPermissionWsSupport(), newRootResourceTypes(), userSession, i18n);
  51. }
  52. @Test
  53. public void update_project_default_template() {
  54. PermissionTemplateDto portfolioDefaultTemplate = db.permissionTemplates().insertTemplate(db.getDefaultOrganization());
  55. PermissionTemplateDto applicationDefaultTemplate = db.permissionTemplates().insertTemplate(db.getDefaultOrganization());
  56. db.organizations().setDefaultTemplates(db.permissionTemplates().insertTemplate(db.getDefaultOrganization()),
  57. applicationDefaultTemplate, portfolioDefaultTemplate);
  58. PermissionTemplateDto template = insertTemplate(db.getDefaultOrganization());
  59. loginAsAdmin(db.getDefaultOrganization());
  60. newRequest(template.getUuid(), Qualifiers.PROJECT);
  61. assertDefaultTemplates(db.getDefaultOrganization(), template.getUuid(), applicationDefaultTemplate.getUuid(), portfolioDefaultTemplate.getUuid());
  62. }
  63. @Test
  64. public void update_project_default_template_without_qualifier_param() {
  65. OrganizationDto organization = db.organizations().insert();
  66. db.organizations().setDefaultTemplates(organization, "any-project-template-uuid", "any-view-template-uuid", null);
  67. PermissionTemplateDto template = insertTemplate(organization);
  68. loginAsAdmin(organization);
  69. // default value is project qualifier's value
  70. newRequest(template.getUuid(), null);
  71. assertDefaultTemplates(organization, template.getUuid(), "any-view-template-uuid", null);
  72. }
  73. @Test
  74. public void update_project_default_template_by_template_name() {
  75. OrganizationDto organization = db.organizations().insert();
  76. PermissionTemplateDto portfolioDefaultTemplate = db.permissionTemplates().insertTemplate(organization);
  77. PermissionTemplateDto applicationDefaultTemplate = db.permissionTemplates().insertTemplate(organization);
  78. db.organizations().setDefaultTemplates(db.permissionTemplates().insertTemplate(organization), applicationDefaultTemplate, portfolioDefaultTemplate);
  79. PermissionTemplateDto template = insertTemplate(organization);
  80. loginAsAdmin(organization);
  81. newRequest()
  82. .setParam(PARAM_ORGANIZATION, organization.getKey())
  83. .setParam(PARAM_TEMPLATE_NAME, template.getName().toUpperCase())
  84. .execute();
  85. db.getSession().commit();
  86. assertDefaultTemplates(organization, template.getUuid(), applicationDefaultTemplate.getUuid(), portfolioDefaultTemplate.getUuid());
  87. }
  88. @Test
  89. public void update_view_default_template() {
  90. OrganizationDto organization = db.organizations().insert();
  91. PermissionTemplateDto projectDefaultTemplate = db.permissionTemplates().insertTemplate(organization);
  92. db.organizations().setDefaultTemplates(projectDefaultTemplate, null, null);
  93. PermissionTemplateDto template = insertTemplate(organization);
  94. loginAsAdmin(organization);
  95. newRequest(template.getUuid(), VIEW);
  96. assertDefaultTemplates(organization, projectDefaultTemplate.getUuid(), null, template.getUuid());
  97. }
  98. @Test
  99. public void update_app_default_template() {
  100. OrganizationDto organization = db.organizations().insert();
  101. PermissionTemplateDto projectDefaultTemplate = db.permissionTemplates().insertTemplate(organization);
  102. db.organizations().setDefaultTemplates(projectDefaultTemplate, null, null);
  103. PermissionTemplateDto template = insertTemplate(organization);
  104. loginAsAdmin(organization);
  105. newRequest(template.getUuid(), APP);
  106. assertDefaultTemplates(organization, projectDefaultTemplate.getUuid(), template.getUuid(), null);
  107. }
  108. @Test
  109. public void fail_if_anonymous() {
  110. OrganizationDto organization = db.organizations().insert();
  111. PermissionTemplateDto template = insertTemplate(organization);
  112. userSession.anonymous();
  113. expectedException.expect(UnauthorizedException.class);
  114. newRequest(template.getUuid(), PROJECT);
  115. }
  116. @Test
  117. public void fail_if_not_admin() {
  118. OrganizationDto organization = db.organizations().insert();
  119. PermissionTemplateDto template = insertTemplate(organization);
  120. userSession.logIn();
  121. expectedException.expect(ForbiddenException.class);
  122. newRequest(template.getUuid(), null);
  123. }
  124. @Test
  125. public void fail_if_template_not_provided() {
  126. expectedException.expect(BadRequestException.class);
  127. newRequest(null, PROJECT);
  128. }
  129. @Test
  130. public void fail_if_template_does_not_exist() {
  131. expectedException.expect(NotFoundException.class);
  132. newRequest("unknown-template-uuid", PROJECT);
  133. }
  134. @Test
  135. public void fail_if_qualifier_is_not_root() {
  136. OrganizationDto organization = db.organizations().insert();
  137. PermissionTemplateDto template = insertTemplate(organization);
  138. loginAsAdmin(organization);
  139. expectedException.expect(IllegalArgumentException.class);
  140. expectedException.expectMessage("Value of parameter 'qualifier' (FIL) must be one of: [APP, TRK, VW]");
  141. newRequest(template.getUuid(), Qualifiers.FILE);
  142. }
  143. @Test
  144. public void fail_if_organization_has_no_default_templates() {
  145. OrganizationDto organization = db.organizations().insert();
  146. PermissionTemplateDto template = insertTemplate(organization);
  147. loginAsAdmin(organization);
  148. expectedException.expect(NotFoundException.class);
  149. expectedException.expectMessage("No Default templates for organization with uuid '" + organization.getUuid() + "'");
  150. newRequest(template.getUuid(), null);
  151. }
  152. private String newRequest(@Nullable String templateUuid, @Nullable String qualifier) {
  153. TestRequest request = newRequest();
  154. if (templateUuid != null) {
  155. request.setParam(PARAM_TEMPLATE_ID, templateUuid);
  156. }
  157. if (qualifier != null) {
  158. request.setParam(PARAM_QUALIFIER, qualifier);
  159. }
  160. return request.execute().getInput();
  161. }
  162. private PermissionTemplateDto insertTemplate(OrganizationDto organization) {
  163. PermissionTemplateDto res = dbClient.permissionTemplateDao().insert(db.getSession(), PermissionTemplateTesting.newPermissionTemplateDto()
  164. .setOrganizationUuid(organization.getUuid())
  165. .setUuid("permission-template-uuid"));
  166. db.commit();
  167. return res;
  168. }
  169. private void assertDefaultTemplates(OrganizationDto organizationDto, @Nullable String projectDefaultTemplateUuid,
  170. @Nullable String applicationDefaultTemplateUuid, @Nullable String portfolioDefaultTemplateUuid) {
  171. DbSession dbSession = db.getSession();
  172. DefaultTemplates defaultTemplates = db.getDbClient().organizationDao().getDefaultTemplates(dbSession, organizationDto.getUuid())
  173. .orElseThrow(() -> new IllegalStateException("No default templates for organization with uuid '" + organizationDto.getUuid() + "'"));
  174. assertThat(defaultTemplates.getProjectUuid()).isEqualTo(projectDefaultTemplateUuid);
  175. assertThat(defaultTemplates.getApplicationsUuid()).isEqualTo(applicationDefaultTemplateUuid);
  176. assertThat(defaultTemplates.getPortfoliosUuid()).isEqualTo(portfolioDefaultTemplateUuid);
  177. }
  178. }