From 771647e32377530d4a659bf286fe509ab93c02be Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Wed, 26 Aug 2015 12:08:16 +0200 Subject: [PATCH] SONAR-6498 WS permissions/delete_template delete a permission template --- .../ws/AddGroupToTemplateAction.java | 4 +- .../ws/AddUserToTemplateAction.java | 4 +- .../permission/ws/DeleteTemplateAction.java | 70 ++++++++++ .../server/permission/ws/Parameters.java | 9 +- .../permission/ws/PermissionsWsModule.java | 3 +- .../ws/RemoveGroupFromTemplateAction.java | 4 +- .../ws/RemoveUserFromTemplateAction.java | 4 +- .../permission/ws/UpdateTemplateAction.java | 6 +- .../ws/DeleteTemplateActionTest.java | 129 ++++++++++++++++++ .../ws/PermissionsWsModuleTest.java | 2 +- .../db/permission/PermissionTemplateDao.java | 4 + .../permission/PermissionTemplateMapper.java | 2 + .../permission/PermissionTemplateMapper.xml | 5 + .../permission/PermissionTemplateDaoTest.java | 79 ++++++----- 14 files changed, 277 insertions(+), 48 deletions(-) create mode 100644 server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java create mode 100644 server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java index 9c4bbf1b31a..77882af0b3d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddGroupToTemplateAction.java @@ -41,7 +41,7 @@ import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_KEY; import static org.sonar.server.permission.ws.Parameters.createGroupIdParameter; import static org.sonar.server.permission.ws.Parameters.createGroupNameParameter; import static org.sonar.server.permission.ws.Parameters.createProjectPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameterToAddRemoveUserOrGroup; public class AddGroupToTemplateAction implements PermissionsWsAction { private final DbClient dbClient; @@ -65,7 +65,7 @@ public class AddGroupToTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateKeyParameter(action); + createTemplateKeyParameterToAddRemoveUserOrGroup(action); createProjectPermissionParameter(action); createGroupIdParameter(action); createGroupNameParameter(action); diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserToTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserToTemplateAction.java index 22443cfb09a..4e0922313b0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserToTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/AddUserToTemplateAction.java @@ -41,7 +41,7 @@ import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_KEY; import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN; import static org.sonar.server.permission.ws.Parameters.createProjectPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameterToAddRemoveUserOrGroup; import static org.sonar.server.permission.ws.Parameters.createUserLoginParameter; public class AddUserToTemplateAction implements PermissionsWsAction { @@ -65,7 +65,7 @@ public class AddUserToTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateKeyParameter(action); + createTemplateKeyParameterToAddRemoveUserOrGroup(action); createProjectPermissionParameter(action); createUserLoginParameter(action); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java new file mode 100644 index 00000000000..0eaeb105d73 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/DeleteTemplateAction.java @@ -0,0 +1,70 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.sonar.server.permission.ws; + +import org.sonar.api.server.ws.Request; +import org.sonar.api.server.ws.Response; +import org.sonar.api.server.ws.WebService; +import org.sonar.db.DbClient; +import org.sonar.db.DbSession; +import org.sonar.server.user.UserSession; + +import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdminUser; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_KEY; +import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameter; + +public class DeleteTemplateAction implements PermissionsWsAction { + private final DbClient dbClient; + private final UserSession userSession; + + public DeleteTemplateAction(DbClient dbClient, UserSession userSession) { + this.dbClient = dbClient; + this.userSession = userSession; + } + + @Override + public void define(WebService.NewController context) { + WebService.NewAction action = context.createAction("delete_template") + .setDescription("Delete a permission template.
" + + "It requires administration permissions to access.") + .setSince("5.2") + .setPost(true) + .setHandler(this); + + createTemplateKeyParameter(action); + } + + @Override + public void handle(Request wsRequest, Response wsResponse) throws Exception { + checkGlobalAdminUser(userSession); + String key = wsRequest.mandatoryParam(PARAM_TEMPLATE_KEY); + + DbSession dbSession = dbClient.openSession(false); + try { + dbClient.permissionTemplateDao().deleteByKey(dbSession, key); + dbSession.commit(); + + wsResponse.noContent(); + } finally { + dbClient.closeSession(dbSession); + } + } +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/Parameters.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/Parameters.java index 7d11fac90c5..d9a8fac4cfe 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/Parameters.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/Parameters.java @@ -98,7 +98,7 @@ class Parameters { .setExampleValue("g.hopper"); } - static void createTemplateKeyParameter(NewAction action) { + static void createTemplateKeyParameterToAddRemoveUserOrGroup(NewAction action) { action.createParam(PARAM_LONG_TEMPLATE_KEY) .setRequired(true) .setDescription("Template key") @@ -116,4 +116,11 @@ class Parameters { .setDescription("Description") .setExampleValue("Permissions for all projects related to the financial service"); } + + static void createTemplateKeyParameter(NewAction action) { + action.createParam(PARAM_TEMPLATE_KEY) + .setRequired(true) + .setDescription("Key") + .setExampleValue("af8cb8cc-1e78-4c4e-8c00-ee8e814009a5"); + } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java index 2ff2cfcd9d7..6998cf23015 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/PermissionsWsModule.java @@ -43,6 +43,7 @@ public class PermissionsWsModule extends Module { AddGroupToTemplateAction.class, RemoveGroupFromTemplateAction.class, CreateTemplateAction.class, - UpdateTemplateAction.class); + UpdateTemplateAction.class, + DeleteTemplateAction.class); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateAction.java index 3a625cb0b53..ebd3820f4eb 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveGroupFromTemplateAction.java @@ -36,7 +36,7 @@ import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_KEY; import static org.sonar.server.permission.ws.Parameters.createGroupIdParameter; import static org.sonar.server.permission.ws.Parameters.createGroupNameParameter; import static org.sonar.server.permission.ws.Parameters.createProjectPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameterToAddRemoveUserOrGroup; public class RemoveGroupFromTemplateAction implements PermissionsWsAction { private final DbClient dbClient; @@ -60,7 +60,7 @@ public class RemoveGroupFromTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateKeyParameter(action); + createTemplateKeyParameterToAddRemoveUserOrGroup(action); createProjectPermissionParameter(action); createGroupIdParameter(action); createGroupNameParameter(action); diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserFromTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserFromTemplateAction.java index 4d0474b6af3..3ed9eeebf40 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserFromTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/RemoveUserFromTemplateAction.java @@ -35,7 +35,7 @@ import static org.sonar.server.permission.ws.Parameters.PARAM_PERMISSION; import static org.sonar.server.permission.ws.Parameters.PARAM_LONG_TEMPLATE_KEY; import static org.sonar.server.permission.ws.Parameters.PARAM_USER_LOGIN; import static org.sonar.server.permission.ws.Parameters.createProjectPermissionParameter; -import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameterToAddRemoveUserOrGroup; import static org.sonar.server.permission.ws.Parameters.createUserLoginParameter; public class RemoveUserFromTemplateAction implements PermissionsWsAction { @@ -59,7 +59,7 @@ public class RemoveUserFromTemplateAction implements PermissionsWsAction { "It requires administration permissions to access.") .setHandler(this); - createTemplateKeyParameter(action); + createTemplateKeyParameterToAddRemoveUserOrGroup(action); createProjectPermissionParameter(action); createUserLoginParameter(action); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/UpdateTemplateAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/UpdateTemplateAction.java index bab5ce1c3ad..77544635e70 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/UpdateTemplateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/UpdateTemplateAction.java @@ -44,6 +44,7 @@ import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_KEY; import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_NAME; import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_PATTERN; import static org.sonar.server.permission.ws.Parameters.createTemplateDescriptionParameter; +import static org.sonar.server.permission.ws.Parameters.createTemplateKeyParameter; import static org.sonar.server.permission.ws.Parameters.createTemplateProjectKeyPatternParameter; import static org.sonar.server.permission.ws.PermissionTemplateDtoToPermissionTemplateResponse.toPermissionTemplateResponse; import static org.sonar.server.ws.WsUtils.checkRequest; @@ -72,10 +73,7 @@ public class UpdateTemplateAction implements PermissionsWsAction { .setPost(true) .setHandler(this); - action.createParam(PARAM_TEMPLATE_KEY) - .setRequired(true) - .setDescription("Key") - .setExampleValue("af8cb8cc-1e78-4c4e-8c00-ee8e814009a5"); + createTemplateKeyParameter(action); action.createParam(PARAM_TEMPLATE_NAME) .setDescription("Name") diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java new file mode 100644 index 00000000000..e30c3f403ee --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/DeleteTemplateActionTest.java @@ -0,0 +1,129 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.sonar.server.permission.ws; + +import javax.annotation.Nullable; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.sonar.api.utils.System2; +import org.sonar.core.permission.GlobalPermissions; +import org.sonar.db.DbClient; +import org.sonar.db.DbSession; +import org.sonar.db.DbTester; +import org.sonar.db.permission.PermissionTemplateDto; +import org.sonar.server.exceptions.ForbiddenException; +import org.sonar.server.exceptions.UnauthorizedException; +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.assertj.core.api.Assertions.assertThat; +import static org.sonar.db.permission.PermissionTemplateTesting.newPermissionTemplateDto; +import static org.sonar.server.permission.ws.Parameters.PARAM_TEMPLATE_KEY; + +public class DeleteTemplateActionTest { + + static final String TEMPLATE_KEY = "permission-template-key"; + + @Rule + public DbTester db = DbTester.create(System2.INSTANCE); + @Rule + public UserSessionRule userSession = UserSessionRule.standalone(); + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + WsActionTester ws; + DbClient dbClient; + DbSession dbSession; + PermissionTemplateDto permissionTemplate; + + @Before + public void setUp() { + userSession.login().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + + dbClient = db.getDbClient(); + dbSession = db.getSession(); + ws = new WsActionTester(new DeleteTemplateAction(dbClient, userSession)); + + permissionTemplate = insertTemplate(newPermissionTemplateDto().setKee("permission-template-key")); + commit(); + assertThat(dbClient.permissionTemplateDao().selectByKey(dbSession, TEMPLATE_KEY)).isNotNull(); + } + + @Test + public void delete_template_in_db() { + + TestResponse result = newRequest(TEMPLATE_KEY); + + assertThat(result.getInput()).isEmpty(); + assertThat(dbClient.permissionTemplateDao().selectByKey(dbSession, TEMPLATE_KEY)).isNull(); + } + + @Test + public void fail_if_not_logged_in() { + expectedException.expect(UnauthorizedException.class); + userSession.anonymous(); + + newRequest(TEMPLATE_KEY); + } + + @Test + public void fail_if_not_admin() { + expectedException.expect(ForbiddenException.class); + userSession.login().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + + newRequest(TEMPLATE_KEY); + } + + @Test + public void fail_if_key_is_not_provided() { + expectedException.expect(IllegalArgumentException.class); + + newRequest(null); + } + + private PermissionTemplateDto insertTemplate(PermissionTemplateDto template) { + return dbClient.permissionTemplateDao().insert(dbSession, template); + } + + private void commit() { + dbSession.commit(); + } + + private TestResponse newRequest(@Nullable String key) { + TestRequest request = ws.newRequest(); + if (key != null) { + request.setParam(PARAM_TEMPLATE_KEY, key); + } + + TestResponse result = executeRequest(request); + commit(); + return result; + } + + private static TestResponse executeRequest(TestRequest request) { + return request.execute(); + } + +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java index 59edfb47928..69eadbe065f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/ws/PermissionsWsModuleTest.java @@ -30,6 +30,6 @@ public class PermissionsWsModuleTest { public void verify_count_of_added_components() { ComponentContainer container = new ComponentContainer(); new PermissionsWsModule().configure(container); - assertThat(container.size()).isEqualTo(20); + assertThat(container.size()).isEqualTo(21); } } diff --git a/sonar-db/src/main/java/org/sonar/db/permission/PermissionTemplateDao.java b/sonar-db/src/main/java/org/sonar/db/permission/PermissionTemplateDao.java index fda57b228c8..a7c2ff80497 100644 --- a/sonar-db/src/main/java/org/sonar/db/permission/PermissionTemplateDao.java +++ b/sonar-db/src/main/java/org/sonar/db/permission/PermissionTemplateDao.java @@ -186,6 +186,10 @@ public class PermissionTemplateDao implements Dao { return permissionTemplate; } + public void deleteByKey(DbSession dbSession, String key) { + mapper(dbSession).deleteByKey(key); + } + public void deletePermissionTemplate(Long templateId) { SqlSession session = myBatis.openSession(false); try { diff --git a/sonar-db/src/main/java/org/sonar/db/permission/PermissionTemplateMapper.java b/sonar-db/src/main/java/org/sonar/db/permission/PermissionTemplateMapper.java index 49ac13fdb12..536a79afbb5 100644 --- a/sonar-db/src/main/java/org/sonar/db/permission/PermissionTemplateMapper.java +++ b/sonar-db/src/main/java/org/sonar/db/permission/PermissionTemplateMapper.java @@ -64,4 +64,6 @@ public interface PermissionTemplateMapper { int countUsers(Map params); int countGroups(Map parameters); + + void deleteByKey(String key); } diff --git a/sonar-db/src/main/resources/org/sonar/db/permission/PermissionTemplateMapper.xml b/sonar-db/src/main/resources/org/sonar/db/permission/PermissionTemplateMapper.xml index 4ab1ae42006..9eb1a4850c6 100644 --- a/sonar-db/src/main/resources/org/sonar/db/permission/PermissionTemplateMapper.xml +++ b/sonar-db/src/main/resources/org/sonar/db/permission/PermissionTemplateMapper.xml @@ -19,6 +19,11 @@ WHERE id = #{templateId} + + DELETE FROM permission_templates + WHERE kee = #{key} + + DELETE FROM perm_templates_users WHERE template_id = #{templateId} diff --git a/sonar-db/src/test/java/org/sonar/db/permission/PermissionTemplateDaoTest.java b/sonar-db/src/test/java/org/sonar/db/permission/PermissionTemplateDaoTest.java index b403a838c27..686aecd5a84 100644 --- a/sonar-db/src/test/java/org/sonar/db/permission/PermissionTemplateDaoTest.java +++ b/sonar-db/src/test/java/org/sonar/db/permission/PermissionTemplateDaoTest.java @@ -46,32 +46,34 @@ public class PermissionTemplateDaoTest { System2 system = mock(System2.class); @Rule - public DbTester dbTester = DbTester.create(system); + public DbTester db = DbTester.create(system); @Rule public ExpectedException expectedException = ExpectedException.none(); - PermissionTemplateDao underTest = dbTester.getDbClient().permissionTemplateDao(); + DbSession session = db.getSession(); + + PermissionTemplateDao underTest = new PermissionTemplateDao(db.myBatis(), system); @Test public void should_create_permission_template() throws ParseException { - dbTester.prepareDbUnit(getClass(), "createPermissionTemplate.xml"); + db.prepareDbUnit(getClass(), "createPermissionTemplate.xml"); Date now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2013-01-02 01:04:05"); when(system.now()).thenReturn(now.getTime()); - PermissionTemplateDto permissionTemplate = underTest.insert(dbTester.getSession(), newPermissionTemplateDto() + PermissionTemplateDto permissionTemplate = underTest.insert(db.getSession(), newPermissionTemplateDto() .setName("my template") .setDescription("my description") .setKeyPattern("myregexp")); assertThat(permissionTemplate).isNotNull(); assertThat(permissionTemplate.getId()).isEqualTo(1L); - dbTester.assertDbUnitTable(getClass(), "createPermissionTemplate-result.xml", "permission_templates", "id", "name", "description"); + db.assertDbUnitTable(getClass(), "createPermissionTemplate-result.xml", "permission_templates", "id", "name", "description"); } @Test public void should_skip_key_normalization_on_default_template() { - dbTester.truncateTables(); + db.truncateTables(); PermissionTemplateMapper mapper = mock(PermissionTemplateMapper.class); @@ -92,7 +94,7 @@ public class PermissionTemplateDaoTest { @Test public void should_select_permission_template() { - dbTester.prepareDbUnit(getClass(), "selectPermissionTemplate.xml"); + db.prepareDbUnit(getClass(), "selectPermissionTemplate.xml"); PermissionTemplateDto permissionTemplate = underTest.selectPermissionTemplate("my_template_20130102_030405"); @@ -113,7 +115,7 @@ public class PermissionTemplateDaoTest { @Test public void should_select_empty_permission_template() { - dbTester.prepareDbUnit(getClass(), "selectEmptyPermissionTemplate.xml"); + db.prepareDbUnit(getClass(), "selectEmptyPermissionTemplate.xml"); PermissionTemplateDto permissionTemplate = underTest.selectPermissionTemplate("my_template_20130102_030405"); @@ -126,7 +128,7 @@ public class PermissionTemplateDaoTest { @Test public void should_select_permission_template_by_key() { - dbTester.prepareDbUnit(getClass(), "selectPermissionTemplate.xml"); + db.prepareDbUnit(getClass(), "selectPermissionTemplate.xml"); PermissionTemplateDto permissionTemplate = underTest.selectByKey("my_template_20130102_030405"); @@ -139,7 +141,7 @@ public class PermissionTemplateDaoTest { @Test public void should_select_all_permission_templates() { - dbTester.prepareDbUnit(getClass(), "selectAllPermissionTemplates.xml"); + db.prepareDbUnit(getClass(), "selectAllPermissionTemplates.xml"); List permissionTemplates = underTest.selectAllPermissionTemplates(); @@ -152,25 +154,36 @@ public class PermissionTemplateDaoTest { @Test public void should_update_permission_template() { - dbTester.prepareDbUnit(getClass(), "updatePermissionTemplate.xml"); + db.prepareDbUnit(getClass(), "updatePermissionTemplate.xml"); underTest.update(1L, "new_name", "new_description", "new_regexp"); - dbTester.assertDbUnitTable(getClass(), "updatePermissionTemplate-result.xml", "permission_templates", "id", "name", "kee", "description"); + db.assertDbUnitTable(getClass(), "updatePermissionTemplate-result.xml", "permission_templates", "id", "name", "kee", "description"); } @Test public void should_delete_permission_template() { - dbTester.prepareDbUnit(getClass(), "deletePermissionTemplate.xml"); + db.prepareDbUnit(getClass(), "deletePermissionTemplate.xml"); underTest.deletePermissionTemplate(1L); checkTemplateTables("deletePermissionTemplate-result.xml"); } + @Test + public void delete_by_key() { + String templateKey = "permission-template-key"; + underTest.insert(session, newPermissionTemplateDto().setKee(templateKey)); + assertThat(underTest.selectByKey(session, templateKey)).isNotNull(); + + underTest.deleteByKey(session, templateKey); + + assertThat(underTest.selectByKey(session, templateKey)).isNull(); + } + @Test public void should_add_user_permission_to_template() { - dbTester.prepareDbUnit(getClass(), "addUserPermissionToTemplate.xml"); + db.prepareDbUnit(getClass(), "addUserPermissionToTemplate.xml"); underTest.insertUserPermission(1L, 1L, "new_permission"); @@ -179,7 +192,7 @@ public class PermissionTemplateDaoTest { @Test public void should_remove_user_permission_from_template() { - dbTester.prepareDbUnit(getClass(), "removeUserPermissionFromTemplate.xml"); + db.prepareDbUnit(getClass(), "removeUserPermissionFromTemplate.xml"); underTest.deleteUserPermission(1L, 2L, "permission_to_remove"); @@ -188,7 +201,7 @@ public class PermissionTemplateDaoTest { @Test public void should_add_group_permission_to_template() { - dbTester.prepareDbUnit(getClass(), "addGroupPermissionToTemplate.xml"); + db.prepareDbUnit(getClass(), "addGroupPermissionToTemplate.xml"); underTest.insertGroupPermission(1L, 1L, "new_permission"); @@ -197,7 +210,7 @@ public class PermissionTemplateDaoTest { @Test public void should_remove_group_permission_from_template() { - dbTester.prepareDbUnit(getClass(), "removeGroupPermissionFromTemplate.xml"); + db.prepareDbUnit(getClass(), "removeGroupPermissionFromTemplate.xml"); underTest.deleteGroupPermission(1L, 2L, "permission_to_remove"); @@ -206,17 +219,17 @@ public class PermissionTemplateDaoTest { @Test public void remove_by_group() { - dbTester.prepareDbUnit(getClass(), "remove_by_group.xml"); + db.prepareDbUnit(getClass(), "remove_by_group.xml"); - underTest.deleteByGroup(dbTester.getSession(), 2L); - dbTester.getSession().commit(); + underTest.deleteByGroup(db.getSession(), 2L); + db.getSession().commit(); - dbTester.assertDbUnitTable(getClass(), "remove_by_group-result.xml", "permission_templates", "id", "name", "kee", "description"); + db.assertDbUnitTable(getClass(), "remove_by_group-result.xml", "permission_templates", "id", "name", "kee", "description"); } @Test public void should_add_group_permission_with_null_name() { - dbTester.prepareDbUnit(getClass(), "addNullGroupPermissionToTemplate.xml"); + db.prepareDbUnit(getClass(), "addNullGroupPermissionToTemplate.xml"); underTest.insertGroupPermission(1L, null, "new_permission"); @@ -225,7 +238,7 @@ public class PermissionTemplateDaoTest { @Test public void should_remove_group_permission_with_null_name() { - dbTester.prepareDbUnit(getClass(), "removeNullGroupPermissionFromTemplate.xml"); + db.prepareDbUnit(getClass(), "removeNullGroupPermissionFromTemplate.xml"); underTest.deleteGroupPermission(1L, null, "permission_to_remove"); @@ -234,33 +247,33 @@ public class PermissionTemplateDaoTest { @Test public void should_retrieve_permission_template() { - dbTester.truncateTables(); + db.truncateTables(); PermissionTemplateDto permissionTemplateDto = new PermissionTemplateDto().setName("Test template").setKee("test_template"); PermissionTemplateDto templateWithPermissions = new PermissionTemplateDto().setKee("test_template"); underTest = mock(PermissionTemplateDao.class); - when(underTest.selectByKey(dbTester.getSession(), "test_template")).thenReturn(permissionTemplateDto); - when(underTest.selectPermissionTemplate(dbTester.getSession(), "test_template")).thenReturn(templateWithPermissions); - when(underTest.selectPermissionTemplateWithPermissions(dbTester.getSession(), "test_template")).thenCallRealMethod(); + when(underTest.selectByKey(db.getSession(), "test_template")).thenReturn(permissionTemplateDto); + when(underTest.selectPermissionTemplate(db.getSession(), "test_template")).thenReturn(templateWithPermissions); + when(underTest.selectPermissionTemplateWithPermissions(db.getSession(), "test_template")).thenCallRealMethod(); - PermissionTemplateDto permissionTemplate = underTest.selectPermissionTemplateWithPermissions(dbTester.getSession(), "test_template"); + PermissionTemplateDto permissionTemplate = underTest.selectPermissionTemplateWithPermissions(db.getSession(), "test_template"); assertThat(permissionTemplate).isSameAs(templateWithPermissions); } @Test public void should_fail_on_unmatched_template() { - dbTester.truncateTables(); + db.truncateTables(); expectedException.expect(IllegalArgumentException.class); - underTest.selectPermissionTemplateWithPermissions(dbTester.getSession(), "unmatched"); + underTest.selectPermissionTemplateWithPermissions(db.getSession(), "unmatched"); } private void checkTemplateTables(String fileName) { - dbTester.assertDbUnitTable(getClass(), fileName, "permission_templates", "id", "name", "description"); - dbTester.assertDbUnitTable(getClass(), fileName, "perm_templates_users", "id", "template_id", "user_id", "permission_reference"); - dbTester.assertDbUnitTable(getClass(), fileName, "perm_templates_groups", "id", "template_id", "group_id", "permission_reference"); + db.assertDbUnitTable(getClass(), fileName, "permission_templates", "id", "name", "description"); + db.assertDbUnitTable(getClass(), fileName, "perm_templates_users", "id", "template_id", "user_id", "permission_reference"); + db.assertDbUnitTable(getClass(), fileName, "perm_templates_groups", "id", "template_id", "group_id", "permission_reference"); } } -- 2.39.5