diff --git a/gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java b/gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java index cdbc7690a266b7ac8850e4557d9e700e84d58e2e..e0051270b77c84a6fa86c4dd7bd8d6ccf4f4830a 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java +++ b/gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java @@ -160,8 +160,6 @@ public class InvitedRegistrationManager extends UserAwareComponent { } invitedRegistration.setUserId(getCurrentUserId()); - // FIXME (workaround): separated update for user and done in order to use triggers - invitedRegistrationDAO.setRegistrationUser(invitedRegistration); invitedRegistrationDAO.setRegistrationDone(invitedRegistration); } 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 d188d1c36639bed7ca7fd2b7f8f0a7423d376685..f1f2e141973751d237d6f12f081c075fae74290d 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 @@ -42,15 +42,17 @@ public class GroupsDAO { groupsHook.beforeCreate(group); } - String sql = "INSERT INTO gms_group (id, name, path, is_leaf, created_by) VALUES (?, ?, ?, ?, ?)"; + String sql = "INSERT INTO gms_group (id, name, path, is_leaf, locked, created_by) VALUES (?, ?, ?, ?, ?, ?)"; jdbcTemplate.update(conn -> { + int i = 0; PreparedStatement ps = conn.prepareStatement(sql); - ps.setString(1, group.getId()); - ps.setString(2, group.getName()); - ps.setObject(3, group.getPath(), Types.OTHER); - ps.setBoolean(4, group.isLeaf()); - ps.setString(5, group.getCreatedBy()); + ps.setString(++i, group.getId()); + ps.setString(++i, group.getName()); + ps.setObject(++i, group.getPath(), Types.OTHER); + ps.setBoolean(++i, group.isLeaf()); + ps.setBoolean(++i, group.isLocked()); + ps.setString(++i, group.getCreatedBy()); return ps; }); @@ -63,14 +65,16 @@ public class GroupsDAO { groupsHook.beforeUpdate(group); } - String sql = "UPDATE gms_group SET name = ?, path = ?, is_leaf = ? WHERE id = ?"; + String sql = "UPDATE gms_group SET name = ?, path = ?, is_leaf = ?, locked = ? WHERE id = ?"; jdbcTemplate.update(conn -> { + int i = 0; PreparedStatement ps = conn.prepareStatement(sql); - ps.setString(1, group.getName()); - ps.setObject(2, group.getPath(), Types.OTHER); - ps.setBoolean(3, group.isLeaf()); - ps.setString(4, group.getId()); + ps.setString(++i, group.getName()); + ps.setObject(++i, group.getPath(), Types.OTHER); + ps.setBoolean(++i, group.isLeaf()); + ps.setBoolean(++i, group.isLocked()); + ps.setString(++i, group.getId()); return ps; }); @@ -97,12 +101,7 @@ public class GroupsDAO { return ps; }, resultSet -> { if (resultSet.next()) { - GroupEntity group = new GroupEntity(); - group.setId(resultSet.getString("id")); - group.setName(resultSet.getString("name")); - group.setPath(resultSet.getString("path")); - group.setLeaf(resultSet.getBoolean("is_leaf")); - group.setLocked(resultSet.getBoolean("locked")); + GroupEntity group = getGroupFromResultSet(resultSet); return Optional.of(group); } return Optional.empty(); diff --git a/gms/src/main/java/it/inaf/ia2/gms/persistence/InvitedRegistrationDAO.java b/gms/src/main/java/it/inaf/ia2/gms/persistence/InvitedRegistrationDAO.java index 89698eb2b09fe8d65bdbc55c9c772f3a9334bbbb..63fd356e71c41049c9d8869aad09eb1aab38ff55 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/persistence/InvitedRegistrationDAO.java +++ b/gms/src/main/java/it/inaf/ia2/gms/persistence/InvitedRegistrationDAO.java @@ -100,9 +100,9 @@ public class InvitedRegistrationDAO { return Optional.ofNullable(registration); } - public void setRegistrationUser(InvitedRegistration invitedRegistration) { + public void setRegistrationDone(InvitedRegistration invitedRegistration) { - String sql = "UPDATE invited_registration_request SET \"user\" = ? WHERE id = ?"; + String sql = "UPDATE invited_registration_request SET \"user\" = ?, done = true WHERE id = ?"; jdbcTemplate.update(conn -> { PreparedStatement ps = conn.prepareStatement(sql); @@ -112,17 +112,6 @@ public class InvitedRegistrationDAO { }); } - public void setRegistrationDone(InvitedRegistration invitedRegistration) { - - String sql = "UPDATE invited_registration_request SET done = true WHERE id = ?"; - - jdbcTemplate.update(conn -> { - PreparedStatement ps = conn.prepareStatement(sql); - ps.setString(1, invitedRegistration.getId()); - return ps; - }); - } - /** * Called before deleting a group. */ 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 b0a3fcf775c4d998a87e3435c66ab19c0d1a95be..e5858961b4c2b41b3af9f1e5b0da48c6e79be0e8 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 @@ -11,6 +11,7 @@ import it.inaf.ia2.gms.persistence.LoggingDAO; import it.inaf.ia2.gms.persistence.MembershipsDAO; import it.inaf.ia2.gms.persistence.PermissionsDAO; import it.inaf.ia2.gms.persistence.model.GroupEntity; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.UUID; @@ -70,6 +71,7 @@ public class GroupsService { group.setPath(path); group.setLeaf(leaf); group.setCreatedBy(createdBy); + group.setCreationTime(new Date()); groupsDAO.createGroup(group); loggingDAO.logAction("Added group: parent_path=" + parent.getPath() + ", group_name=" + groupName); 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 8a617b1bc0e9a18ac2953e44a08a8fd1d6f3108f..a826741ec131e273c968b10109df4c25aea432b0 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 @@ -98,10 +98,6 @@ public class GroupsDAOTest { assertTrue(group.isPresent()); assertEquals(lbtInaf, group.get()); - // Find unexisting group - group = dao.findGroupById("not-found"); - assertFalse(group.isPresent()); - // Sub list List<GroupEntity> groups = dao.getDirectSubGroups(root.getPath()); assertEquals(2, groups.size()); @@ -146,7 +142,7 @@ public class GroupsDAOTest { assertTrue(childrenMap.get(lbt.getId())); assertFalse(childrenMap.get(tng.getId())); - // Rename + // Update String newName = "renamed"; tng.setName(newName); dao.updateGroup(tng); @@ -196,6 +192,46 @@ public class GroupsDAOTest { return UUID.randomUUID().toString().replaceAll("-", ""); } + @Test + public void testFields() { + + GroupEntity group = new GroupEntity(); + group.setId("group_id"); + group.setName("group_name"); + group.setPath("group_path"); + group.setLeaf(true); + group.setLocked(true); + group.setCreatedBy("creator_id"); + + dao.createGroup(group); + + GroupEntity savedGroup = dao.findGroupById("group_id").get(); + + assertEquals("group_id", savedGroup.getId()); + assertEquals("group_name", savedGroup.getName()); + assertEquals("group_path", savedGroup.getPath()); + assertTrue(savedGroup.isLeaf()); + assertTrue(savedGroup.isLocked()); + assertEquals("creator_id", savedGroup.getCreatedBy()); + + group.setName("new_name"); + group.setLeaf(false); + group.setLocked(false); + + dao.updateGroup(group); + + savedGroup = dao.findGroupById("group_id").get(); + + assertEquals("new_name", savedGroup.getName()); + assertFalse(savedGroup.isLeaf()); + assertFalse(savedGroup.isLocked()); + } + + @Test + public void testGetInexistentGroupById() { + assertTrue(dao.findGroupById("not-found").isEmpty()); + } + @Test public void testGroupCompleteNamesEmptyInput() { assertTrue(dao.getGroupCompleteNamesFromId(new HashSet<>()).isEmpty()); diff --git a/gms/src/test/java/it/inaf/ia2/gms/service/GroupsServiceTest.java b/gms/src/test/java/it/inaf/ia2/gms/service/GroupsServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..4cf460fe7393931b7256e0f26927ce537164953a --- /dev/null +++ b/gms/src/test/java/it/inaf/ia2/gms/service/GroupsServiceTest.java @@ -0,0 +1,71 @@ +package it.inaf.ia2.gms.service; + +import it.inaf.ia2.gms.persistence.GroupsDAO; +import it.inaf.ia2.gms.persistence.InvitedRegistrationDAO; +import it.inaf.ia2.gms.persistence.LoggingDAO; +import it.inaf.ia2.gms.persistence.MembershipsDAO; +import it.inaf.ia2.gms.persistence.PermissionsDAO; +import it.inaf.ia2.gms.persistence.model.GroupEntity; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import org.junit.runner.RunWith; +import static org.mockito.ArgumentMatchers.argThat; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class GroupsServiceTest { + + @Mock + private GroupsDAO groupsDAO; + @Mock + private PermissionsDAO permissionsDAO; + @Mock + private MembershipsDAO membershipsDAO; + @Mock + private InvitedRegistrationDAO invitedRegistrationDAO; + @Mock + private LoggingDAO loggingDAO; + + @InjectMocks + private GroupsService groupsService; + + private final GroupEntity root = group("ROOT", "ROOT", ""); + + @Test + public void testAddGroup() { + + GroupEntity group1 = groupsService.addGroup(root, "group1", false, "creator_id"); + + verify(groupsDAO, times(1)).createGroup(argThat(g -> "group1".equals(g.getName()))); + + assertNotNull(group1.getId()); + assertEquals("group1", group1.getName()); + assertFalse(group1.isLeaf()); + assertEquals("creator_id", group1.getCreatedBy()); + assertNotNull(group1.getCreationTime()); + + GroupEntity group2 = groupsService.addGroup(group1, "group2", true, "creator_id"); + + verify(groupsDAO, times(1)).createGroup(argThat(g -> "group2".equals(g.getName()))); + + assertNotNull(group2.getId()); + assertEquals("group2", group2.getName()); + assertTrue(group2.isLeaf()); + assertEquals(group1.getId() + "." + group2.getId(), group2.getPath()); + } + + private GroupEntity group(String id, String name, String path) { + GroupEntity group = new GroupEntity(); + group.setId(id); + group.setName(name); + group.setPath(path); + return group; + } +}