From 9f9b7530983d1b5ad526bb1ccdde635814bb0386 Mon Sep 17 00:00:00 2001 From: Sonia Zorba <sonia.zorba@inaf.it> Date: Thu, 8 Aug 2019 17:11:59 +0200 Subject: [PATCH] Fixed tests and database setup --- README.md | 13 ++-- database/Dockerfile | 3 +- database/user.sql | 4 ++ gms-ui/src/components/GroupsPanel.vue | 2 +- gms-ui/src/components/Main.vue | 8 +-- gms/pom.xml | 8 +-- .../inaf/ia2/gms/persistence/GroupsDAO.java | 4 ++ .../inaf/ia2/gms/service/GroupsService.java | 4 +- .../inaf/ia2/gms/service/PermissionUtils.java | 15 ++-- gms/src/main/resources/application.properties | 5 +- .../it/inaf/ia2/gms/DataSourceConfig.java | 37 ++++++++++ .../it/inaf/ia2/gms/GmsApplicationTests.java | 15 ---- .../gms/controller/GroupsControllerTest.java | 2 +- .../it/inaf/ia2/gms/model/PermissionTest.java | 40 +++++++++++ .../ia2/gms/persistence/GroupsDAOTest.java | 14 ++-- .../NestedGroupsIntegrationTest.java | 34 ++++++--- .../gms/persistence/PermissionsDAOTest.java | 7 +- .../ia2/gms/service/PermissionUtilsTest.java | 69 +++++++++++++++++++ .../PermissionsServiceIntegrationTest.java | 18 ++--- 19 files changed, 225 insertions(+), 77 deletions(-) create mode 100644 database/user.sql create mode 100644 gms/src/test/java/it/inaf/ia2/gms/DataSourceConfig.java delete mode 100644 gms/src/test/java/it/inaf/ia2/gms/GmsApplicationTests.java create mode 100644 gms/src/test/java/it/inaf/ia2/gms/model/PermissionTest.java create mode 100644 gms/src/test/java/it/inaf/ia2/gms/service/PermissionUtilsTest.java diff --git a/README.md b/README.md index 8513c3f..4d923ce 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # IA2 GMS -## MySQL setup +## Database Docker image -``` -create database gms; -create user gms@localhost identified by 'gms'; -grant all privileges on gms.* to gms@localhost; +To build the image run **from current directory**: -``` + docker build -f database/Dockerfile --tag gms-db . + +To start the image and use the database: + + docker run -d -p 5432:5432 -i -t gms-db:latest diff --git a/database/Dockerfile b/database/Dockerfile index d174c9d..bb94ba2 100644 --- a/database/Dockerfile +++ b/database/Dockerfile @@ -1,2 +1,3 @@ FROM library/postgres:11 -COPY ../gms/src/main/resources/sql/init.sql /docker-entrypoint-initdb.d/ +COPY gms/src/main/resources/sql/init.sql /docker-entrypoint-initdb.d/ +COPY database/user.sql /docker-entrypoint-initdb.d/ diff --git a/database/user.sql b/database/user.sql new file mode 100644 index 0000000..29be85f --- /dev/null +++ b/database/user.sql @@ -0,0 +1,4 @@ +CREATE ROLE gms WITH LOGIN PASSWORD 'gms'; +GRANT USAGE ON SCHEMA public TO gms; +GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO gms; +GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO gms; \ No newline at end of file diff --git a/gms-ui/src/components/GroupsPanel.vue b/gms-ui/src/components/GroupsPanel.vue index ad0ee16..3ddfc6a 100644 --- a/gms-ui/src/components/GroupsPanel.vue +++ b/gms-ui/src/components/GroupsPanel.vue @@ -9,7 +9,7 @@ <b-list-group v-for="group in model.groupsPanel.items"> <b-list-group-item href="#" v-on:click="openGroup(group)"> <span class="float-left">{{group.groupName}}</span> - <span v-if="group.permissions.includes('ADMIN')" class="float-right"> + <span v-if="group.permission === 'ADMIN'" class="float-right"> <a href="#" v-on:click.stop="openRenameGroupModal(group)" title="Rename"> <font-awesome-icon icon="edit"></font-awesome-icon> </a> diff --git a/gms-ui/src/components/Main.vue b/gms-ui/src/components/Main.vue index f7b8791..36a15b2 100644 --- a/gms-ui/src/components/Main.vue +++ b/gms-ui/src/components/Main.vue @@ -40,10 +40,10 @@ export default { }, computed: mapState({ model: state => state.model, - showAddMemberBtn: state => state.model.permissions.includes('ADMIN') && state.input.selectedTab === 'members', - showAddCollaboratorBtn: state => state.model.permissions.includes('MANAGE_MEMBERS') && state.input.selectedTab === 'members', - showAddGroupBtn: state => state.model.permissions.includes('ADMIN') && state.input.selectedTab === 'groups', - showAddPermissionBtn: state => state.model.permissions.includes('ADMIN') && state.input.selectedTab === 'permissions' + showAddMemberBtn: state => state.model.permission === 'ADMIN' && state.input.selectedTab === 'members', + showAddCollaboratorBtn: state => state.model.permission === 'MANAGE_MEMBERS' && state.input.selectedTab === 'members', + showAddGroupBtn: state => state.model.permission === 'ADMIN' && state.input.selectedTab === 'groups', + showAddPermissionBtn: state => state.model.permission === 'ADMIN' && state.input.selectedTab === 'permissions' }), methods: { tabChanged: function(tabIndex) { diff --git a/gms/pom.xml b/gms/pom.xml index f55c143..184d64b 100644 --- a/gms/pom.xml +++ b/gms/pom.xml @@ -39,7 +39,6 @@ <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> - <version>42.2.6</version> <scope>runtime</scope> </dependency> <dependency> @@ -58,10 +57,11 @@ <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency> + <!-- Embedded PostgreSQL: --> <dependency> - <groupId>io.zonky.test</groupId> - <artifactId>embedded-database-spring-test</artifactId> - <version>1.5.0</version> + <groupId>com.opentable.components</groupId> + <artifactId>otj-pg-embedded</artifactId> + <version>0.13.1</version> <scope>test</scope> </dependency> </dependencies> diff --git a/gms/src/main/java/it/inaf/ia2/gms/persistence/GroupsDAO.java b/gms/src/main/java/it/inaf/ia2/gms/persistence/GroupsDAO.java index 5a38bca..88f8509 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/persistence/GroupsDAO.java +++ b/gms/src/main/java/it/inaf/ia2/gms/persistence/GroupsDAO.java @@ -132,6 +132,10 @@ public class GroupsDAO { public Map<String, Boolean> getHasChildrenMap(Set<String> groupIds) { + if (groupIds.isEmpty()) { + return new HashMap<>(); + } + String sql = "SELECT g.id, COUNT(s.*) > 0 AS has_children \n" + "FROM gms_group g\n" + "LEFT JOIN gms_group s ON s.path <@ g.path AND s.path <> g.path\n" diff --git a/gms/src/main/java/it/inaf/ia2/gms/service/GroupsService.java b/gms/src/main/java/it/inaf/ia2/gms/service/GroupsService.java index 15ad515..e37a4b6 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/service/GroupsService.java +++ b/gms/src/main/java/it/inaf/ia2/gms/service/GroupsService.java @@ -10,7 +10,6 @@ import it.inaf.ia2.gms.persistence.GroupsDAO; import it.inaf.ia2.gms.persistence.model.GroupEntity; import java.util.List; import java.util.UUID; -import org.springframework.transaction.annotation.Transactional; @Service public class GroupsService { @@ -38,7 +37,6 @@ public class GroupsService { } } - @Transactional public GroupEntity addGroup(String parentId, String groupName, String userId) { GroupEntity parent = getGroupById(parentId); @@ -52,7 +50,7 @@ public class GroupsService { throw new BadRequestException("There is already a group named " + groupName); } - String newGroupId = UUID.randomUUID().toString(); + String newGroupId = UUID.randomUUID().toString().replaceAll("-", ""); String path = parent.getPath(); if (!path.isEmpty()) { diff --git a/gms/src/main/java/it/inaf/ia2/gms/service/PermissionUtils.java b/gms/src/main/java/it/inaf/ia2/gms/service/PermissionUtils.java index a4d877a..ffb5817 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/service/PermissionUtils.java +++ b/gms/src/main/java/it/inaf/ia2/gms/service/PermissionUtils.java @@ -18,15 +18,12 @@ public class PermissionUtils { boolean permissionInChildGroup = permission.getGroupPath().startsWith(group.getPath()); boolean permissionInParentGroup = group.getPath().startsWith(permission.getGroupPath()); - if (directPermission || permissionInChildGroup || permissionInParentGroup) { - - if (permissionInChildGroup) { - // Traversal only - groupPermission = Permission.addPermission(groupPermission, Permission.TRAVERSE); - } else { - // Direct permission or permission inherited from parent - groupPermission = Permission.addPermission(groupPermission, permission.getPermission()); - } + if (directPermission || permissionInParentGroup) { + // Direct permission or permission inherited from parent + groupPermission = Permission.addPermission(groupPermission, permission.getPermission()); + } else if (permissionInChildGroup) { + // Traversal only + groupPermission = Permission.addPermission(groupPermission, Permission.TRAVERSE); } if (groupPermission == Permission.ADMIN) { diff --git a/gms/src/main/resources/application.properties b/gms/src/main/resources/application.properties index c92e337..94200da 100644 --- a/gms/src/main/resources/application.properties +++ b/gms/src/main/resources/application.properties @@ -11,12 +11,9 @@ security.oauth2.resource.jwk.key-set-uri=http://localhost/rap-ia2/auth/oidc/jwks logging.level.org.springframework.security=DEBUG logging.level.org.springframework.jdbc=TRACE -spring.jpa.hibernate.ddl-auto=update -spring.jpa.database-platform=org.hibernate.dialect.MariaDBDialect -spring.datasource.url=jdbc:mysql://localhost:3306/gms?useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC +spring.datasource.url=jdbc:postgresql://localhost:5432/postgres spring.datasource.username=gms spring.datasource.password=gms -#spring.jpa.open-in-view=false rap.ws-url=http://localhost/rap-ia2/ws diff --git a/gms/src/test/java/it/inaf/ia2/gms/DataSourceConfig.java b/gms/src/test/java/it/inaf/ia2/gms/DataSourceConfig.java new file mode 100644 index 0000000..8fb202b --- /dev/null +++ b/gms/src/test/java/it/inaf/ia2/gms/DataSourceConfig.java @@ -0,0 +1,37 @@ +package it.inaf.ia2.gms; + +import com.opentable.db.postgres.embedded.EmbeddedPostgres; +import java.sql.Connection; +import javax.sql.DataSource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.context.annotation.Scope; +import org.springframework.core.io.ClassPathResource; +import org.springframework.jdbc.datasource.init.ScriptUtils; + +@Configuration +public class DataSourceConfig { + + /** + * Using the prototype scope we are generating a different database in each + * test. + */ + @Bean + @Scope("prototype") + @Primary + public DataSource dataSource() throws Exception { + DataSource embeddedPostgresDS = EmbeddedPostgres.builder() + .start().getPostgresDatabase(); + + initDatabase(embeddedPostgresDS); + + return embeddedPostgresDS; + } + + private void initDatabase(DataSource dataSource) throws Exception { + try (Connection conn = dataSource.getConnection()) { + ScriptUtils.executeSqlScript(conn, new ClassPathResource("/sql/init.sql")); + } + } +} diff --git a/gms/src/test/java/it/inaf/ia2/gms/GmsApplicationTests.java b/gms/src/test/java/it/inaf/ia2/gms/GmsApplicationTests.java deleted file mode 100644 index a0242fa..0000000 --- a/gms/src/test/java/it/inaf/ia2/gms/GmsApplicationTests.java +++ /dev/null @@ -1,15 +0,0 @@ -package it.inaf.ia2.gms; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class GmsApplicationTests { - - @Test - public void contextLoads() { - } -} diff --git a/gms/src/test/java/it/inaf/ia2/gms/controller/GroupsControllerTest.java b/gms/src/test/java/it/inaf/ia2/gms/controller/GroupsControllerTest.java index 8a1ac93..5ab680e 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/controller/GroupsControllerTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/controller/GroupsControllerTest.java @@ -49,7 +49,7 @@ public class GroupsControllerTest { when(groupsModelService.getGroupsModel(any(), any())) .thenReturn(response); - mockMvc.perform(get("/groups?groupId=ROOT&tab=groups&paginatorPageSize=20&paginatorPage=1")) + mockMvc.perform(get("/groups?groupId=ROOT&tab=groups&paginatorPageSize=20&paginatorPage=1&page=main")) .andExpect(status().isOk()); ArgumentCaptor<GroupsModelRequest> requestCaptor = ArgumentCaptor.forClass(GroupsModelRequest.class); diff --git a/gms/src/test/java/it/inaf/ia2/gms/model/PermissionTest.java b/gms/src/test/java/it/inaf/ia2/gms/model/PermissionTest.java new file mode 100644 index 0000000..136befa --- /dev/null +++ b/gms/src/test/java/it/inaf/ia2/gms/model/PermissionTest.java @@ -0,0 +1,40 @@ +package it.inaf.ia2.gms.model; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class PermissionTest { + + @Test + public void addPermissionTest() { + + // Old = null + assertEquals(Permission.ADMIN, Permission.addPermission(null, Permission.ADMIN)); + assertEquals(Permission.MANAGE_MEMBERS, Permission.addPermission(null, Permission.MANAGE_MEMBERS)); + assertEquals(Permission.VIEW_MEMBERS, Permission.addPermission(null, Permission.VIEW_MEMBERS)); + assertEquals(Permission.TRAVERSE, Permission.addPermission(null, Permission.TRAVERSE)); + + // Old = ADMIN -> never change + assertEquals(Permission.ADMIN, Permission.addPermission(Permission.ADMIN, Permission.VIEW_MEMBERS)); + assertEquals(Permission.ADMIN, Permission.addPermission(Permission.ADMIN, Permission.MANAGE_MEMBERS)); + assertEquals(Permission.ADMIN, Permission.addPermission(Permission.ADMIN, Permission.TRAVERSE)); + + // Old = MANAGE_MEMBERS + assertEquals(Permission.ADMIN, Permission.addPermission(Permission.MANAGE_MEMBERS, Permission.ADMIN)); + assertEquals(Permission.MANAGE_MEMBERS, Permission.addPermission(Permission.MANAGE_MEMBERS, Permission.VIEW_MEMBERS)); + assertEquals(Permission.MANAGE_MEMBERS, Permission.addPermission(Permission.MANAGE_MEMBERS, Permission.TRAVERSE)); + + // Old = VIEW_MEMBERS + assertEquals(Permission.ADMIN, Permission.addPermission(Permission.VIEW_MEMBERS, Permission.ADMIN)); + assertEquals(Permission.MANAGE_MEMBERS, Permission.addPermission(Permission.VIEW_MEMBERS, Permission.MANAGE_MEMBERS)); + assertEquals(Permission.VIEW_MEMBERS, Permission.addPermission(Permission.VIEW_MEMBERS, Permission.TRAVERSE)); + + // Old = TRAVERSE + assertEquals(Permission.ADMIN, Permission.addPermission(Permission.TRAVERSE, Permission.ADMIN)); + assertEquals(Permission.MANAGE_MEMBERS, Permission.addPermission(Permission.TRAVERSE, Permission.MANAGE_MEMBERS)); + assertEquals(Permission.VIEW_MEMBERS, Permission.addPermission(Permission.TRAVERSE, Permission.VIEW_MEMBERS)); + } +} diff --git a/gms/src/test/java/it/inaf/ia2/gms/persistence/GroupsDAOTest.java b/gms/src/test/java/it/inaf/ia2/gms/persistence/GroupsDAOTest.java index 643cef6..9d5ad1a 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/persistence/GroupsDAOTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/persistence/GroupsDAOTest.java @@ -1,7 +1,6 @@ package it.inaf.ia2.gms.persistence; -import com.google.common.collect.ImmutableSet; -import io.zonky.test.db.AutoConfigureEmbeddedDatabase; +import it.inaf.ia2.gms.DataSourceConfig; import it.inaf.ia2.gms.model.GroupBreadcrumb; import it.inaf.ia2.gms.persistence.model.GroupEntity; import java.util.List; @@ -15,12 +14,13 @@ import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.internal.util.collections.Sets; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.jdbc.Sql; +import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) -@AutoConfigureEmbeddedDatabase(beanName = "dataSource") +@ContextConfiguration(classes = DataSourceConfig.class) public class GroupsDAOTest { @Autowired @@ -34,7 +34,7 @@ public class GroupsDAOTest { } @Test - @Sql("/sql/init.sql") + //@Sql("/sql/init.sql") public void testAll() { // Create groups @@ -89,11 +89,11 @@ public class GroupsDAOTest { assertEquals("INAF", groups.get(0).getName()); // Children map - Map<String, Boolean> childrenMap = dao.getHasChildrenMap(ImmutableSet.of(root.getId())); + Map<String, Boolean> childrenMap = dao.getHasChildrenMap(Sets.newSet(root.getId())); assertEquals(1, childrenMap.size()); assertTrue(childrenMap.get(root.getId())); - childrenMap = dao.getHasChildrenMap(ImmutableSet.of(lbt.getId(), tng.getId())); + childrenMap = dao.getHasChildrenMap(Sets.newSet(lbt.getId(), tng.getId())); assertEquals(2, childrenMap.size()); assertTrue(childrenMap.get(lbt.getId())); assertFalse(childrenMap.get(tng.getId())); diff --git a/gms/src/test/java/it/inaf/ia2/gms/persistence/NestedGroupsIntegrationTest.java b/gms/src/test/java/it/inaf/ia2/gms/persistence/NestedGroupsIntegrationTest.java index 2c546b0..398cd3d 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/persistence/NestedGroupsIntegrationTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/persistence/NestedGroupsIntegrationTest.java @@ -1,38 +1,43 @@ package it.inaf.ia2.gms.persistence; -import io.zonky.test.db.AutoConfigureEmbeddedDatabase; +import it.inaf.ia2.gms.DataSourceConfig; import it.inaf.ia2.gms.service.GroupsService; import it.inaf.ia2.gms.model.GroupNode; import it.inaf.ia2.gms.model.PaginatedModelRequest; import it.inaf.ia2.gms.model.Permission; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity; +import it.inaf.ia2.gms.rap.RapClient; import it.inaf.ia2.gms.service.GroupsTreeBuilder; +import it.inaf.ia2.gms.service.PermissionsService; import java.util.List; +import javax.sql.DataSource; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Test; import org.junit.runner.RunWith; +import static org.mockito.Mockito.mock; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) -@AutoConfigureEmbeddedDatabase(beanName = "dataSource") +@ContextConfiguration(classes = DataSourceConfig.class) public class NestedGroupsIntegrationTest { @Autowired - private PermissionsDAO permissionsDAO; - - @Autowired - private GroupsService groupsService; - - @Autowired - private GroupsTreeBuilder groupsTreeBuilder; + private DataSource dataSource; @Test public void testNestedGroupRetrieval() { + GroupsDAO groupsDAO = new GroupsDAO(dataSource); + PermissionsDAO permissionsDAO = new PermissionsDAO(dataSource); + PermissionsService permissionsService = new PermissionsService(permissionsDAO, mock(RapClient.class)); + GroupsService groupsService = new GroupsService(groupsDAO, permissionsService); + GroupsTreeBuilder groupsTreeBuilder = new GroupsTreeBuilder(groupsDAO, permissionsDAO); + String userId = "USER_ID"; // Test super admin @@ -100,14 +105,23 @@ public class NestedGroupsIntegrationTest { p1Permission.setUserId(userId); p1Permission.setGroupId(lbtInafProgram1.getId()); p1Permission.setPermission(Permission.MANAGE_MEMBERS); + p1Permission.setGroupPath(lbtInafProgram1.getPath()); permissionsDAO.createPermission(p1Permission); PermissionEntity lbtPermission = new PermissionEntity(); lbtPermission.setUserId(userId); lbtPermission.setGroupId(lbtInaf.getId()); lbtPermission.setPermission(Permission.VIEW_MEMBERS); + lbtPermission.setGroupPath(lbtInaf.getPath()); permissionsDAO.createPermission(lbtPermission); + PermissionEntity radioPermission = new PermissionEntity(); + radioPermission.setUserId(userId); + radioPermission.setGroupId(radio.getId()); + radioPermission.setPermission(Permission.VIEW_MEMBERS); + radioPermission.setGroupPath(radio.getPath()); + permissionsDAO.createPermission(radioPermission); + // Check level 0 (ROOT) groupNodes = groupsTreeBuilder.listSubGroups(root.getId(), userId, request).getItems(); assertEquals(2, groupNodes.size()); @@ -117,7 +131,7 @@ public class NestedGroupsIntegrationTest { assertTrue(lbtGN.isHasChildren()); radioGN = groupNodes.get(1); assertEquals("Radio", radioGN.getGroupName()); - assertEquals(Permission.TRAVERSE, radioGN.getPermission()); + assertEquals(Permission.VIEW_MEMBERS, radioGN.getPermission()); assertFalse(radioGN.isHasChildren()); // Check level 1 diff --git a/gms/src/test/java/it/inaf/ia2/gms/persistence/PermissionsDAOTest.java b/gms/src/test/java/it/inaf/ia2/gms/persistence/PermissionsDAOTest.java index e2bb67d..6f411d8 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/persistence/PermissionsDAOTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/persistence/PermissionsDAOTest.java @@ -1,6 +1,6 @@ package it.inaf.ia2.gms.persistence; -import io.zonky.test.db.AutoConfigureEmbeddedDatabase; +import it.inaf.ia2.gms.DataSourceConfig; import it.inaf.ia2.gms.model.Permission; import it.inaf.ia2.gms.persistence.model.PermissionEntity; import it.inaf.ia2.gms.persistence.model.GroupEntity; @@ -12,11 +12,11 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.jdbc.Sql; +import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) -@AutoConfigureEmbeddedDatabase(beanName = "dataSource") +@ContextConfiguration(classes = DataSourceConfig.class) public class PermissionsDAOTest { @Autowired @@ -32,7 +32,6 @@ public class PermissionsDAOTest { } @Test - @Sql("/sql/init.sql") public void testAll() { GroupEntity root = new GroupEntity(); diff --git a/gms/src/test/java/it/inaf/ia2/gms/service/PermissionUtilsTest.java b/gms/src/test/java/it/inaf/ia2/gms/service/PermissionUtilsTest.java new file mode 100644 index 0000000..9a6d0f3 --- /dev/null +++ b/gms/src/test/java/it/inaf/ia2/gms/service/PermissionUtilsTest.java @@ -0,0 +1,69 @@ +package it.inaf.ia2.gms.service; + +import it.inaf.ia2.gms.model.Permission; +import it.inaf.ia2.gms.persistence.model.GroupEntity; +import it.inaf.ia2.gms.persistence.model.PermissionEntity; +import java.util.Collections; +import java.util.List; +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class PermissionUtilsTest { + + @Test + public void testDirectPermission() { + + GroupEntity group = new GroupEntity(); + group.setId("id"); + group.setName("name"); + group.setPath("path"); + + PermissionEntity permission = new PermissionEntity(); + permission.setGroupId("id"); + permission.setGroupPath("path"); + permission.setPermission(Permission.MANAGE_MEMBERS); + + List<PermissionEntity> permissions = Collections.singletonList(permission); + + assertEquals(Permission.MANAGE_MEMBERS, PermissionUtils.getGroupPermission(group, permissions).get()); + } + + @Test + public void testPermissionInheritedFromParent() { + + GroupEntity group = new GroupEntity(); + group.setId("id_LBT_INAF"); + group.setName("INAF"); + group.setPath("LBT:INAF"); + + PermissionEntity permission = new PermissionEntity(); + permission.setGroupId("id_LBT"); + permission.setGroupPath("LBT"); + permission.setPermission(Permission.ADMIN); + + List<PermissionEntity> permissions = Collections.singletonList(permission); + + assertEquals(Permission.ADMIN, PermissionUtils.getGroupPermission(group, permissions).get()); + } + + @Test + public void testTraversalIfPermissionInChild() { + + GroupEntity group = new GroupEntity(); + group.setId("id_LBT"); + group.setName("name"); + group.setPath("LBT"); + + PermissionEntity permission = new PermissionEntity(); + permission.setGroupId("id_LBT_INAF_P1"); + permission.setGroupPath("LBT:INAF:P1"); + permission.setPermission(Permission.VIEW_MEMBERS); + + List<PermissionEntity> permissions = Collections.singletonList(permission); + + assertEquals(Permission.TRAVERSE, PermissionUtils.getGroupPermission(group, permissions).get()); + } +} diff --git a/gms/src/test/java/it/inaf/ia2/gms/service/PermissionsServiceIntegrationTest.java b/gms/src/test/java/it/inaf/ia2/gms/service/PermissionsServiceIntegrationTest.java index 1273d72..fc04b4e 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/service/PermissionsServiceIntegrationTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/service/PermissionsServiceIntegrationTest.java @@ -1,6 +1,6 @@ package it.inaf.ia2.gms.service; -import io.zonky.test.db.AutoConfigureEmbeddedDatabase; +import it.inaf.ia2.gms.DataSourceConfig; import it.inaf.ia2.gms.model.Permission; import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.model.UserPermission; @@ -11,6 +11,7 @@ import it.inaf.ia2.gms.persistence.model.PermissionEntity; import it.inaf.ia2.gms.rap.RapClient; import java.util.Collections; import java.util.List; +import javax.sql.DataSource; import static org.junit.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; @@ -18,26 +19,27 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) -@AutoConfigureEmbeddedDatabase(beanName = "dataSource") +@ContextConfiguration(classes = DataSourceConfig.class) public class PermissionsServiceIntegrationTest { private static final String USER_ID = "USER_ID"; - @Autowired - private GroupsDAO groupsDAO; - - @Autowired - private PermissionsDAO permissionsDAO; - @MockBean private RapClient rapClient; + @Autowired + private DataSource dataSource; + @Test public void permissionsRetrievalTest() { + GroupsDAO groupsDAO = new GroupsDAO(dataSource); + PermissionsDAO permissionsDAO = new PermissionsDAO(dataSource); + // Mock RAP client RapUser rapUser = new RapUser(); rapUser.setId(USER_ID); -- GitLab