From 032148ba5be47a1995d0615f907d42fa09c27947 Mon Sep 17 00:00:00 2001
From: Sonia Zorba <sonia.zorba@inaf.it>
Date: Tue, 16 Jul 2019 16:43:56 +0200
Subject: [PATCH] Minor changes

---
 .../it/inaf/ia2/gms/authn/OAuth2Config.java   |  2 -
 .../it/inaf/ia2/gms/authn/SecurityConfig.java |  7 ++-
 .../ia2/gms/controller/GroupsController.java  |  1 +
 .../it/inaf/ia2/gms/model/PaginatedData.java  |  2 +-
 .../inaf/ia2/gms/service/GroupsService.java   |  5 +-
 gms/src/main/resources/application.properties |  1 +
 .../inaf/ia2/gms/model/PaginatedDataTest.java | 58 +++++++++++++++++++
 7 files changed, 69 insertions(+), 7 deletions(-)
 create mode 100644 gms/src/test/java/it/inaf/ia2/gms/model/PaginatedDataTest.java

diff --git a/gms/src/main/java/it/inaf/ia2/gms/authn/OAuth2Config.java b/gms/src/main/java/it/inaf/ia2/gms/authn/OAuth2Config.java
index 9b45d30..4fd68b5 100644
--- a/gms/src/main/java/it/inaf/ia2/gms/authn/OAuth2Config.java
+++ b/gms/src/main/java/it/inaf/ia2/gms/authn/OAuth2Config.java
@@ -3,7 +3,6 @@ package it.inaf.ia2.gms.authn;
 import java.util.List;
 import org.springframework.beans.factory.ObjectProvider;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
 import org.springframework.boot.autoconfigure.security.oauth2.resource.DefaultUserInfoRestTemplateFactory;
 import org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoRestTemplateCustomizer;
 import org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoRestTemplateFactory;
@@ -22,7 +21,6 @@ import org.springframework.security.oauth2.provider.token.RemoteTokenServices;
  * Boot ResourceServerTokenServicesConfiguration.
  */
 @Configuration
-@EnableOAuth2Sso
 public class OAuth2Config extends AuthorizationServerEndpointsConfiguration {
 
     @Value("${security.oauth2.resource.jwk.key-set-uri}")
diff --git a/gms/src/main/java/it/inaf/ia2/gms/authn/SecurityConfig.java b/gms/src/main/java/it/inaf/ia2/gms/authn/SecurityConfig.java
index 130505e..ea8e317 100644
--- a/gms/src/main/java/it/inaf/ia2/gms/authn/SecurityConfig.java
+++ b/gms/src/main/java/it/inaf/ia2/gms/authn/SecurityConfig.java
@@ -1,16 +1,17 @@
 package it.inaf.ia2.gms.authn;
 
+import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.core.annotation.Order;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 
 @Configuration
-@Order(1000)
+@EnableOAuth2Sso
 public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
     @Override
-    protected void configure(HttpSecurity http) throws Exception {
+    public void configure(HttpSecurity http) throws Exception {
+        super.configure(http);
         http.csrf().disable();
     }
 }
diff --git a/gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java b/gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java
index 7586fd8..c1fb662 100644
--- a/gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java
+++ b/gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java
@@ -25,6 +25,7 @@ public class GroupsController {
     @Autowired
     private SessionData session;
 
+    @Autowired
     private UsersService usersService;
 
     @Autowired
diff --git a/gms/src/main/java/it/inaf/ia2/gms/model/PaginatedData.java b/gms/src/main/java/it/inaf/ia2/gms/model/PaginatedData.java
index 5ea07f7..0e61eb1 100644
--- a/gms/src/main/java/it/inaf/ia2/gms/model/PaginatedData.java
+++ b/gms/src/main/java/it/inaf/ia2/gms/model/PaginatedData.java
@@ -30,7 +30,7 @@ public class PaginatedData<T> {
         } else {
             int firstElementIndex = (currentPage - 1) * pageSize;
             int lastElementIndex = Math.min(currentPage * pageSize - 1, totalItems - 1);
-            items = new ArrayList<>(allItems.subList(firstElementIndex, lastElementIndex));
+            items = new ArrayList<>(allItems.subList(firstElementIndex, lastElementIndex + 1));
         }
 
         links = new ArrayList<>();
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 9a25817..4be39d1 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
@@ -18,6 +18,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
+import org.springframework.transaction.annotation.Transactional;
 
 @Service
 public class GroupsService {
@@ -47,6 +48,7 @@ public class GroupsService {
         }
     }
 
+    @Transactional
     public Group addGroup(String parentId, String groupName, User user) {
 
         Group parent = getGroupById(parentId);
@@ -70,6 +72,7 @@ public class GroupsService {
         return group;
     }
 
+    @Transactional
     public List<GroupNode> getSubgroups(Group parent, User user) {
 
         List<UserGroupPermission> permissions = getAllPermissions(user);
@@ -97,7 +100,7 @@ public class GroupsService {
 
         GroupNode groupNode = nodesMap.get(group.getId());
         if (groupNode == null) {
-            return null;
+            return new ArrayList<>();
         }
         return groupNode.getPermissions();
     }
diff --git a/gms/src/main/resources/application.properties b/gms/src/main/resources/application.properties
index 4685461..0893bb1 100644
--- a/gms/src/main/resources/application.properties
+++ b/gms/src/main/resources/application.properties
@@ -15,3 +15,4 @@ spring.jpa.database-platform=org.hibernate.dialect.MariaDBDialect
 spring.datasource.url=jdbc:mysql://localhost:3306/gms?useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
 spring.datasource.username=gms
 spring.datasource.password=gms
+#spring.jpa.open-in-view=false
diff --git a/gms/src/test/java/it/inaf/ia2/gms/model/PaginatedDataTest.java b/gms/src/test/java/it/inaf/ia2/gms/model/PaginatedDataTest.java
new file mode 100644
index 0000000..79f2d9b
--- /dev/null
+++ b/gms/src/test/java/it/inaf/ia2/gms/model/PaginatedDataTest.java
@@ -0,0 +1,58 @@
+package it.inaf.ia2.gms.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
+
+public class PaginatedDataTest {
+
+    @Test
+    public void testPagination() {
+
+        List<Integer> allItems = new ArrayList<>();
+        for (int i = 1; i <= 30; i++) {
+            allItems.add(i);
+        }
+
+        PaginatedData<Integer> paginatedData = new PaginatedData<>(allItems, 2, 10);
+
+        assertEquals(10, paginatedData.getItems().size());
+        assertEquals(11, (int) paginatedData.getItems().get(0));
+        assertEquals(20, (int) paginatedData.getItems().get(9));
+        assertEquals(30, paginatedData.getTotalItems());
+        assertEquals(3, paginatedData.getTotalPages());
+        assertFalse(paginatedData.isHasPreviousPages());
+        assertFalse(paginatedData.isHasFollowingPages());
+        assertEquals(10, paginatedData.getPageSize());
+        assertEquals(3, paginatedData.getLinks().size());
+        assertEquals(1, (int) paginatedData.getLinks().get(0));
+        assertEquals(2, (int) paginatedData.getLinks().get(1));
+        assertEquals(3, (int) paginatedData.getLinks().get(2));
+    }
+
+    @Test
+    public void testLotOfPages() {
+
+        List<Integer> allItems = new ArrayList<>();
+        for (int i = 1; i <= 200; i++) {
+            allItems.add(i);
+        }
+
+        PaginatedData<Integer> paginatedData = new PaginatedData<>(allItems, 8, 10);
+
+        assertEquals(10, paginatedData.getItems().size());
+        assertEquals(71, (int) paginatedData.getItems().get(0));
+        assertEquals(80, (int) paginatedData.getItems().get(9));
+        assertEquals(200, paginatedData.getTotalItems());
+        assertEquals(20, paginatedData.getTotalPages());
+        assertTrue(paginatedData.isHasPreviousPages());
+        assertTrue(paginatedData.isHasFollowingPages());
+        assertEquals(10, paginatedData.getPageSize());
+        assertEquals(5, paginatedData.getLinks().size());
+        assertEquals(6, (int) paginatedData.getLinks().get(0));
+        assertEquals(10, (int) paginatedData.getLinks().get(4));
+    }
+}
-- 
GitLab