From eda7bbea8c0e69b963217614bd6e8b7f37ce5367 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 23 Feb 2010 08:04:09 +0000
Subject: [PATCH] LMS-1361 more system tests, improved error messages

SVN: 14876
---
 .../plugin/query/server/QueryServer.java      |  13 ++-
 openbis/source/java/service.properties        |   2 -
 .../openbis/systemtest/SystemTestCase.java    |   6 +-
 .../plugin/query/QueryEditingTest.java        | 102 +++++++++++++++++-
 .../plugin/query/QuerySystemTestCase.java     |  12 +--
 5 files changed, 115 insertions(+), 20 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java
index 64a5902fc3f..ebabc090627 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.plugin.query.server;
 
 import java.util.List;
+import java.util.Properties;
 
 import javax.annotation.Resource;
 
@@ -122,7 +123,8 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
             getDAOFactory().getQueryDAO().createQuery(query);
         } catch (DataAccessException ex)
         {
-            DataAccessExceptionTranslator.throwException(ex, "Query", null);
+            DataAccessExceptionTranslator.throwException(ex, "Query definition '"
+                    + expression.getName() + "'", null);
         }
     }
 
@@ -140,7 +142,7 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
             }
         } catch (DataAccessException ex)
         {
-            DataAccessExceptionTranslator.throwException(ex, "Query", null);
+            DataAccessExceptionTranslator.throwException(ex, "Query definition", null);
         }
     }
 
@@ -160,7 +162,8 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
             queryDAO.validateAndSaveUpdatedEntity(query);
         } catch (DataAccessException ex)
         {
-            DataAccessExceptionTranslator.throwException(ex, "Query", null);
+            DataAccessExceptionTranslator.throwException(ex, "Query definition '"
+                    + updates.getName() + "'", null);
         }
     }
 
@@ -215,8 +218,10 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
     {
         if (databaseDefinition == null)
         {
+            Properties resolvedProps = configurer.getResolvedProps();
+            resolvedProps.list(System.out);
             ExtendedProperties databaseProperties =
-                    ExtendedProperties.getSubset(configurer.getResolvedProps(),
+                    ExtendedProperties.getSubset(resolvedProps,
                             DATABASE_PROPERTIES_PREFIX, true);
             if (databaseProperties.isEmpty() == false)
             {
diff --git a/openbis/source/java/service.properties b/openbis/source/java/service.properties
index 7c3d0787b4c..a12927a5bf1 100644
--- a/openbis/source/java/service.properties
+++ b/openbis/source/java/service.properties
@@ -78,5 +78,3 @@ query-database.label = openBIS meta data
 query-database.databaseEngineCode = ${database.engine}
 query-database.basicDatabaseName = openbis
 query-database.databaseKind = ${database.kind}
-query-database.owner = read-only-user
-query-database.owner-password = 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java
index fa6f8cba62b..e3b0d180cc5 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java
@@ -21,6 +21,7 @@ import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
 import org.testng.AssertJUnit;
+import org.testng.annotations.BeforeSuite;
 
 import ch.systemsx.cisd.common.servlet.SpringRequestContextProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientService;
@@ -40,11 +41,12 @@ public abstract class SystemTestCase extends AbstractTestNGSpringContextTests
     protected ICommonServer commonServer;
     protected ICommonClientService commonClientService;
     
-    static
+    @BeforeSuite
+    public void beforeSuite()
     {
         TestInitializer.init();
     }
-
+    
     /**
      * Sets a {@link MockHttpServletRequest} for the specified context provider
      */
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/query/QueryEditingTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/query/QueryEditingTest.java
index 0c1c2fe8e2c..a4d703c79b7 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/query/QueryEditingTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/query/QueryEditingTest.java
@@ -17,15 +17,28 @@
 package ch.systemsx.cisd.openbis.systemtest.plugin.query;
 
 import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.fail;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
+import org.testng.annotations.AfterMethod;
 import org.testng.annotations.Test;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridRowModels;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetFetchConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableModelReference;
+import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExpression;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRow;
 import ch.systemsx.cisd.openbis.plugin.query.shared.basic.dto.QueryExpression;
 import ch.systemsx.cisd.openbis.plugin.query.shared.basic.dto.QueryParameterBindings;
 
@@ -37,6 +50,25 @@ import ch.systemsx.cisd.openbis.plugin.query.shared.basic.dto.QueryParameterBind
 @Test(groups = "system test")
 public class QueryEditingTest extends QuerySystemTestCase
 {
+    @AfterMethod
+    public void tearDown()
+    {
+        List<QueryExpression> queries = queryClientService.listQueries();
+        List<TechId> ids = new ArrayList<TechId>();
+        for (QueryExpression queryExpression : queries)
+        {
+            ids.add(new TechId(queryExpression.getId()));
+        }
+        queryClientService.deleteQueries(ids);
+    }
+    
+    @Test
+    public void testGetQueryDatabaseLabel()
+    {
+        logIntoCommonClientService();
+        
+        assertEquals("openBIS meta data", queryClientService.tryToGetQueryDatabaseLabel());
+    }
     
     @Test
     public void testRegisterEditAndDeleteQueryDefinition()
@@ -71,6 +103,59 @@ public class QueryEditingTest extends QuerySystemTestCase
         assertEquals(0, queryClientService.listQueries().size());
     }
     
+    @Test
+    public void testRegisterQueryDefinitionsWithSameName()
+    {
+        logIntoCommonClientService();
+        
+        NewExpression query = createQuery("query", "select * from sample_types", true);
+        queryClientService.registerQuery(query);
+        
+        try
+        {
+            queryClientService.registerQuery(query);
+            fail("UserFailureException expected");
+        } catch (UserFailureException ex)
+        {
+            assertEquals("Query definition 'query' already exists "
+                    + "in the database and needs to be unique.", ex.getMessage());
+        }
+    }
+    
+    @Test
+    public void testChangeNameOfQueryDefinitionsToAnExistingOne()
+    {
+        logIntoCommonClientService();
+        
+        NewExpression query1 = createQuery("query1", "select * from sample_types", true);
+        NewExpression query2 = createQuery("query2", "select * from experiment_types", true);
+        queryClientService.registerQuery(query1);
+        queryClientService.registerQuery(query2);
+        
+        List<QueryExpression> queries = queryClientService.listQueries();
+        assertEquals(2, queries.size());
+        Collections.sort(queries, new Comparator<QueryExpression>()
+            {
+                public int compare(QueryExpression o1, QueryExpression o2)
+                {
+                    return o1.getName().compareTo(o2.getName());
+                }
+            });
+        QueryExpression queryExpression = queries.get(0);
+        assertEquals("query1", queryExpression.getName());
+        queryExpression.setName("query2");
+        
+        try
+        {
+            queryClientService.updateQuery(queryExpression);
+            fail("UserFailureException expected");
+        } catch (UserFailureException ex)
+        {
+            assertEquals("Query definition 'query2' already exists "
+                    + "in the database and needs to be unique.", ex.getMessage());
+        }
+    }
+    
     @Test(groups = "broken")
     public void testCreateQueryResult()
     {
@@ -80,7 +165,22 @@ public class QueryEditingTest extends QuerySystemTestCase
         bindings.addBinding("id", "1");
         TableModelReference table =
                 queryClientService.createQueryResultsReport(
-                        "select * from sample_types where id = ${id}", bindings);
+                        "select id, code from sample_types where id = ${id}", bindings);
+        List<TableModelColumnHeader> headers = table.getHeader();
+        assertEquals("id", headers.get(0).getTitle());
+        assertEquals(DataTypeCode.INTEGER, headers.get(0).getDataType());
+        assertEquals(true, headers.get(0).isNumeric());
+        assertEquals("code", headers.get(1).getTitle());
+        assertEquals(DataTypeCode.VARCHAR, headers.get(1).getDataType());
+        assertEquals(false, headers.get(1).isNumeric());
+        assertEquals(2, headers.size());
+        
+        DefaultResultSetConfig<String, TableModelRow> config = new DefaultResultSetConfig<String, TableModelRow>();
+        config.setCacheConfig(ResultSetFetchConfig.createFetchFromCache(table.getResultSetKey()));
+        ResultSet<TableModelRow> rs = commonClientService.listReport(config);
+        GridRowModels<TableModelRow> l = rs.getList();
+        assertEquals("[1, MASTER_PLATE]", l.get(0).getOriginalObject().getValues().toString());
+        assertEquals(1, rs.getTotalLength());
     }
     
     private NewExpression createQuery(String name, String expression, boolean isPublic)
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/query/QuerySystemTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/query/QuerySystemTestCase.java
index 8e4e62a0603..b666241c975 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/query/QuerySystemTestCase.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/query/QuerySystemTestCase.java
@@ -28,18 +28,8 @@ import ch.systemsx.cisd.openbis.systemtest.SystemTestCase;
  */
 public class QuerySystemTestCase extends SystemTestCase
 {
-    static
-    {
-        System.setProperty("query-database.label", "openBIS");
-        System.setProperty("query-database.databaseEngineCode", "postgresql");
-        System.setProperty("query-database.basicDatabaseName", "openbis");
-        System.setProperty("query-database.databaseKind", "test");
-        System.setProperty("query-database.owner", "postgres");
-        System.setProperty("query-database.owner-password", "");
-    }
-    
     protected IQueryClientService queryClientService;
-
+    
     @Autowired
     public final void setQueryClientService(IQueryClientService queryClientService)
     {
-- 
GitLab