diff --git a/README.md b/README.md index 8513c3f178dbf66ced6224536a3f1036ae0142fb..4d923ce3c2e1e7bfb44e7f549c9d4486544e807b 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 d174c9db90e9043866d664be4cac3a3bb568388d..bb94ba24410f4c8ecb08ee2d5b253402c09318a8 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 0000000000000000000000000000000000000000..29be85f1e1fc255097feb3051e502b5c21374fc5 --- /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 ad0ee16c849bb5d12d1e1fb5295f7829b3e6667b..3ddfc6a4dec53b83fef3e602b0a828f2758108f6 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 f7b8791e9d04577a3bbd3694f29f16c88603151f..36a15b26068d6884bf0074068c4f0c6b03a5b897 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 f55c143b7ce58add20fcab7adaa2fac21c205a57..184d64bf4d3f085bd43757a8e8bfdd64d9653417 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 5a38bca174501d226cbb5ec84846b7ded7e02023..88f85098ffd628212f9d6db6bfee2be091c9791f 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 15ad515678f6652f74b53e135511d5571aeabe41..e37a4b6427674cc744314ad6e21c8891727d93de 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 a4d877abfea8f216503862a9b02c1b3877b44e4c..ffb58173b8236163c2e890f3c6f05e5fc7f95477 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 c92e337f53978e2ee80a674e1e4a0a1a84cba475..94200da73eda4b6759c19f6a73062489b9bd584c 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 0000000000000000000000000000000000000000..8fb202b01fc14d6c7ec232a9fab5726db95bd908 --- /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 a0242fa37561d4e3d141232031904b357a4b10c6..0000000000000000000000000000000000000000 --- 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 8a1ac938dfc95076607203e63b6dc212725e1a82..5ab680e13b6202b93a58288f3587fcc24b30624d 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 0000000000000000000000000000000000000000..136befaeb425607bde60075f06ddb551fe646133 --- /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 643cef67672d291bb775580a44ad96002150de5c..9d5ad1aa45da89c863eca21885e10d3d24b922d4 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 2c546b004db478db6d0e2fbfa3b689e43c106838..398cd3d97aeda2fc2dbdb3bf5d9aee3872ecb1a9 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 e2bb67d9b5e05570efd0e58de4f92514abd969e7..6f411d818821c55396fa458448552a801bc3b3e2 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 0000000000000000000000000000000000000000..9a6d0f39570321ea215ec29dedd352aad8dc4d9a --- /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 1273d72a251d656eaa5ede726b297a1fa39d32a4..fc04b4e3a282ad9b15f514dce6bbb730f8d60ad2 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);