From 606070de3e2222cb94f592f5e2059512a5b8da2f Mon Sep 17 00:00:00 2001
From: RIHTARSIC Joze <joze.rihtarsic@ext.ec.europa.eu>
Date: Tue, 2 Apr 2024 11:31:47 +0200
Subject: [PATCH] [EDELIVERY-12927] fix unit tests

---
 .../data/dao/utils/SMPSchemaGenerator.java    | 63 ++++++++++++-------
 .../dao/utils/SMPSchemaGeneratorTest.java     | 11 ++--
 .../smp/ui/edit/ResourceEditControllerIT.java |  5 +-
 3 files changed, 50 insertions(+), 29 deletions(-)

diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGenerator.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGenerator.java
index 3e1c5fc4e..1682a8b3e 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGenerator.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGenerator.java
@@ -34,11 +34,9 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.lang.reflect.Field;
+import java.net.URL;
 import java.nio.file.Files;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.EnumSet;
-import java.util.List;
+import java.util.*;
 
 /**
  * Class generates DDL script for SMP. Purpose of script is to manually run SQL script to create database. And to
@@ -50,7 +48,10 @@ import java.util.List;
 public class SMPSchemaGenerator {
     protected static String filenameTemplate = "%s.ddl";
     protected static String filenameDropTemplate = "%s-drop.ddl";
-    protected static String smpEntityPackageName = "eu.europa.ec.edelivery.smp.data.model,eu.europa.ec.edelivery.smp.data.model.user,eu.europa.ec.edelivery.smp.data.model.doc,eu.europa.ec.edelivery.smp.data.model.ext";
+    protected static String smpEntityPackageName = "eu.europa.ec.edelivery.smp.data.model," +
+            "eu.europa.ec.edelivery.smp.data.model.user," +
+            "eu.europa.ec.edelivery.smp.data.model.doc," +
+            "eu.europa.ec.edelivery.smp.data.model.ext";
     private static final String SQL_MESSAGE = "-- ------------------------------------------------------------------------\n-- This file was generated by hibernate for SMP version %s.\n-- ------------------------------------------------------------------------\n\n";
 
     protected static final SMPLogger LOG = SMPLoggerFactory.getLogger(SMPSchemaGenerator.class);
@@ -98,7 +99,6 @@ public class SMPSchemaGenerator {
             // metadata.addPackage did not work...
             List<Class> clsList = getAllEntityClasses(pckName);
             for (Class clazz : clsList) {
-
                 metadata.addAnnotatedClass(clazz);
             }
         }
@@ -184,28 +184,49 @@ public class SMPSchemaGenerator {
      * @return
      */
     public List<Class> getAllEntityClasses(String pckgname) throws ClassNotFoundException {
-        ArrayList classes = new ArrayList();
+        List<Class> classes = new ArrayList<>();
 
-        // Get a File object for the package
-        File directory = null;
+        // Get list of folders for the package
+        List<File> resourceFolders = new ArrayList<>();
         try {
-            directory = new File(Thread.currentThread().getContextClassLoader().getResource(pckgname.replace('.', '/')).getFile());
-        } catch (NullPointerException x) {
+            // can be multiple resource locations: as example test-classes and classes
+            Enumeration<URL> resourceUrls = Thread.currentThread().getContextClassLoader().getResources(pckgname.replace('.', '/'));
+            while (resourceUrls.hasMoreElements()) {
+                URL resource = resourceUrls.nextElement();
+                resourceFolders.add(new File(resource.getFile()));
+            }
+
+        } catch (IOException | NullPointerException x) {
             throw new ClassNotFoundException(pckgname + " does not appear to be a valid package");
         }
-        if (directory.exists()) {
-            // Get the list of the files contained in the package
-            String[] files = directory.list();
-            for (int i = 0; i < files.length; i++) {
-                if (files[i].endsWith(".class")) {
-                    // removes the .class extension
-                    classes.add(Class.forName(pckgname + '.' + files[i].substring(0, files[i].length() - 6)));
-                }
-            }
-        } else {
+
+        if (resourceFolders.isEmpty()) {
             throw new ClassNotFoundException("Package: " + pckgname + " does not exists!");
         }
+        // iterate over all resource folders
+        for (File resourceFolder : resourceFolders) {
+            classes.addAll(getClassesFromFolder(resourceFolder, pckgname));
+        }
+        return classes;
+    }
 
+    /**
+     * Returns list of classes in folder with given package name. The method is used to get classes
+     * only from resource folder and not the packaged jars.
+     * @param resourceFolder - folder with classes
+     * @param pckgName - package name
+     * @return list of classes in folder
+     * @throws ClassNotFoundException - if class not found
+     */
+    public List<Class> getClassesFromFolder(File resourceFolder, String pckgName) throws ClassNotFoundException {
+        List<Class> classes = new ArrayList<>();
+        String[] files = resourceFolder.list();
+        for (int i = 0; i < files.length; i++) {
+            if (files[i].endsWith(".class")) {
+                // removes the .class extension
+                classes.add(Class.forName(pckgName + '.' + files[i].substring(0, files[i].length() - 6)));
+            }
+        }
         return classes;
     }
 
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGeneratorTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGeneratorTest.java
index 55cdfb5bd..bf72ee552 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGeneratorTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGeneratorTest.java
@@ -35,8 +35,10 @@ class SMPSchemaGeneratorTest {
     private static final String DIALECT_ORACLE = "org.hibernate.dialect.Oracle10gDialect";
     private static final String DIALECT_MYSQL_INNO5 = "org.hibernate.dialect.MySQL5InnoDBDialect";
 
-    protected static String ENTITY_PACKAGES = "eu.europa.ec.edelivery.smp.data.model,eu.europa.ec.edelivery.smp.data.model.user,eu.europa.ec.edelivery.smp.data.model.doc,eu.europa.ec.edelivery.smp.data.model.ext";
-
+    protected static String ENTITY_PACKAGES = "eu.europa.ec.edelivery.smp.data.model," +
+            "eu.europa.ec.edelivery.smp.data.model.user," +
+            "eu.europa.ec.edelivery.smp.data.model.doc," +
+            "eu.europa.ec.edelivery.smp.data.model.ext";
 
     private static Object[] dialectTestCases() {
         return new Object[][]{
@@ -48,16 +50,14 @@ class SMPSchemaGeneratorTest {
         };
     }
 
-
     SMPSchemaGenerator testInstance = new SMPSchemaGenerator();
 
-
     @Test
     void createDDLScript() throws ClassNotFoundException, IOException {
         // given
         String folder = "target";
         String dialect = DIALECT_ORACLE;
-        String version = "4.1.0-SNAPSHOT";
+        String version = "5.1-SNAPSHOT";
         List<String> lstPackages = Arrays.asList(ENTITY_PACKAGES.split(","));
         File f = new File("target/oracle10g.ddl");
         File fDrop = new File("target/oracle10g-drop.ddl");
@@ -128,7 +128,6 @@ class SMPSchemaGeneratorTest {
     void getAllEntityClassesNotFound() {
 
         assertThrows(ClassNotFoundException.class, () -> testInstance.getAllEntityClasses("eu.not.exists"));
-
     }
 
     @Test
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/edit/ResourceEditControllerIT.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/edit/ResourceEditControllerIT.java
index 29d08e8d5..489fde0a3 100644
--- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/edit/ResourceEditControllerIT.java
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/edit/ResourceEditControllerIT.java
@@ -307,9 +307,10 @@ class ResourceEditControllerIT extends AbstractControllerTest {
     }
 
     @Test
-    public void testFilter() throws Exception {
+    void testFilter() throws Exception {
         // given when
         final String filter = ":%#^&$-_=asd.<>/\\";
+        final String expectedEscapedFilter = ":\\%#^&$-\\_=asd.<>/\\\\";
         String filterParam = URLEncoder.encode(filter);
         MockHttpSession session = loginWithSystemAdmin(mvc);
         UserRO userRO = getLoggedUserData(mvc, session);
@@ -328,6 +329,6 @@ class ResourceEditControllerIT extends AbstractControllerTest {
                 .andExpect(status().isOk()).andReturn();
 
         //then
-        Mockito.verify(uiResourceService).getGroupResources(anyLong(), anyInt(), anyInt(), eq(filter));
+        Mockito.verify(uiResourceService).getGroupResources(anyLong(), anyInt(), anyInt(), eq(expectedEscapedFilter));
     }
 }
-- 
GitLab