From 08bba39024ce0cb1370e7f7c21f570e7efe9f6f5 Mon Sep 17 00:00:00 2001
From: Viktor Kovtun <viktor.kovtun@id.ethz.ch>
Date: Sat, 26 Sep 2020 12:40:51 +0200
Subject: [PATCH] SSDM-10151 Added SearchMaterialTest.testWithAnyProperty() and
 SearchMaterialTest.testWithAnyField(). Refactored repeated code in
 AbstractSearchPropertyTest.

---
 .../asapi/v3/AbstractSearchPropertyTest.java  | 23 ++---
 .../asapi/v3/SearchMaterialTest.java          | 98 +++++++++++++++++++
 2 files changed, 106 insertions(+), 15 deletions(-)

diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractSearchPropertyTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractSearchPropertyTest.java
index 61014177517..f7eb53d27ef 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractSearchPropertyTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractSearchPropertyTest.java
@@ -411,32 +411,25 @@ public abstract class AbstractSearchPropertyTest extends AbstractTest
     public void testWithAnyProperty(final DataType dataType, final String value, final String queryString,
             final boolean found)
     {
-        // Given
-        final String sessionToken = v3api.login(TEST_USER, PASSWORD);
-        final PropertyTypePermId propertyTypeId = createAPropertyType(sessionToken, dataType);
-        final ObjectPermId entityPermId = createEntity(sessionToken, propertyTypeId, value);
-        final AbstractEntitySearchCriteria<?> searchCriteria = createSearchCriteria();
-        new StringQueryInjector(searchCriteria, null, false).buildCriteria(queryString);
-
-        // When
-        final List<? extends IPermIdHolder> entities = search(sessionToken, searchCriteria);
-
-        // Then
-        final boolean hasMatch = entities.stream().anyMatch(
-                entity -> entity.getPermId().toString().equals(entityPermId.getPermId()));
-        assertEquals(hasMatch, found);
+        testWithAny(dataType, value, queryString, found, false);
     }
 
     @Test(dataProvider = "withAnyPropertyExamples")
     public void testWithAnyField(final DataType dataType, final String value, final String queryString,
             final boolean found)
+    {
+        testWithAny(dataType, value, queryString, found, true);
+    }
+
+    public void testWithAny(final DataType dataType, final String value, final String queryString,
+            final boolean found, final boolean anyField)
     {
         // Given
         final String sessionToken = v3api.login(TEST_USER, PASSWORD);
         final PropertyTypePermId propertyTypeId = createAPropertyType(sessionToken, dataType);
         final ObjectPermId entityPermId = createEntity(sessionToken, propertyTypeId, value);
         final AbstractEntitySearchCriteria<?> searchCriteria = createSearchCriteria();
-        new StringQueryInjector(searchCriteria, null, true).buildCriteria(queryString);
+        new StringQueryInjector(searchCriteria, null, anyField).buildCriteria(queryString);
 
         // When
         final List<? extends IPermIdHolder> entities = search(sessionToken, searchCriteria);
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchMaterialTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchMaterialTest.java
index c8624b83081..2792f9fe51a 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchMaterialTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchMaterialTest.java
@@ -1092,6 +1092,104 @@ public class SearchMaterialTest extends AbstractTest
         assertEquals(entities.get(0).getPermId(), entityPermId);
     }
 
+    @DataProvider
+    protected Object[][] withAnyPropertyExamples()
+    {
+        final String formattedDate = DATE_FORMAT.format(createDate(2020, Calendar.FEBRUARY, 15, 0, 0, 0));
+        final String formattedTimestamp = DATE_HOURS_MINUTES_SECONDS_FORMAT.format(
+                createDate(2020, Calendar.FEBRUARY, 15, 10, 0, 1));
+        return new Object[][] {
+                { DataType.VARCHAR, "12", "== 12", true },
+                { DataType.VARCHAR, "ab", "<= abc", true },
+                { DataType.VARCHAR, "12", "> 100", true },
+                { DataType.VARCHAR, "acd3", "contains bcd and endsWith 34", false },
+                { DataType.VARCHAR, "abcd3", "contains bcd and endsWith 34", false },
+                { DataType.VARCHAR, "abd34", "contains bcd and endsWith 34", false },
+                { DataType.VARCHAR, "abcd34", "contains bcd and endsWith 34", true },
+                { DataType.MULTILINE_VARCHAR, "ac3", "contains bc or endsWith 4", false },
+                { DataType.MULTILINE_VARCHAR, "abc3", "contains bc or endsWith 4", true },
+                { DataType.MULTILINE_VARCHAR, "ab4", "contains bc or endsWith 4", true },
+                { DataType.MULTILINE_VARCHAR, "abc4", "contains bc or endsWith 4", true },
+                { DataType.MULTILINE_VARCHAR, "12", "> 100 and <= 13", true },
+                { DataType.BOOLEAN, "true", "== true", true },
+                { DataType.BOOLEAN, "true", "== false", false },
+                { DataType.BOOLEAN, "false", "contains rue", false },
+                { DataType.BOOLEAN, "true", "contains rue", true },
+                { DataType.BOOLEAN, "false", "contains als", true },
+                { DataType.BOOLEAN, "true", "contains als", false },
+
+                { DataType.INTEGER, "12", "== 12", true },
+                { DataType.REAL, "12.5", "== 12.5", true },
+                { DataType.INTEGER, "13333", "<= 13333 and > 13332", true },
+                { DataType.INTEGER, "13333", "<= 13333.0 and > 13332", true },
+                { DataType.INTEGER, "13333", "< 13333.001 and > 13332", true },
+                { DataType.INTEGER, "999999999999", "< 999999999999.001 and >= 999999999999", true },
+                { DataType.INTEGER, "14", "> 13 and <= 19.5", true },
+                { DataType.INTEGER, "19", "> 13 and <= 19.5", true },
+                { DataType.REAL, "19", "> 13 and <= 19.5", true },
+                { DataType.REAL, "19.5", "> 13 and <= 19.5", true },
+                { DataType.REAL, "19", ">= 23.5 or <= 19.5", true },
+                { DataType.REAL, "23.5", ">= 23.5 or <= 19.5", true },
+                { DataType.INTEGER, "19", ">= 23.5 or <= 19.5", true },
+                { DataType.INTEGER, "24", ">= 23.5 or <= 19.5", true },
+                { DataType.INTEGER, "19", ">= 24 or <= 19", true },
+                { DataType.INTEGER, "24", ">= 24 or <= 19", true },
+                { DataType.INTEGER, "12345", "startsWith 12 and endsWith 45", true },
+                { DataType.INTEGER, "12345", "startsWith 13 and endsWith 45", false },
+                { DataType.INTEGER, "12345", "startsWith 12 and endsWith 55", false },
+                { DataType.INTEGER, "12345", "startsWith 11 and endsWith 55", false },
+                { DataType.INTEGER, "12345", "startsWith 12 or endsWith 45", true },
+                { DataType.INTEGER, "12345", "startsWith 13 or endsWith 45", true },
+                { DataType.INTEGER, "12345", "startsWith 12 or endsWith 55", true },
+                { DataType.INTEGER, "12345", "startsWith 11 or endsWith 55", false },
+                { DataType.INTEGER, "12345", "contains 234", true },
+                { DataType.INTEGER, "12345", "contains 437", false },
+                { DataType.REAL, "12.345", "startsWith 12. and endsWith 45", true },
+                { DataType.REAL, "12.345", "startsWith 12. or endsWith 45", true },
+                { DataType.REAL, "12.345", "contains .34", true },
+                { DataType.REAL, "12.345", "contains 9876", false },
+
+                { DataType.DATE, formattedDate, "== 2020-02-15", true },
+                { DataType.DATE, formattedDate, "== 2020-02-14", false },
+                { DataType.TIMESTAMP, formattedTimestamp, "startsWith 2020-02-15 10:00:01", true },
+                { DataType.TIMESTAMP, formattedTimestamp, "startsWith 2020-02-15 10:00:00", false },
+        };
+    }
+
+    @Test(dataProvider = "withAnyPropertyExamples")
+    public void testWithAnyProperty(final DataType dataType, final String value, final String queryString,
+            final boolean found)
+    {
+        testWithAny(dataType, value, queryString, found, false);
+    }
+
+    @Test(dataProvider = "withAnyPropertyExamples")
+    public void testWithAnyField(final DataType dataType, final String value, final String queryString,
+            final boolean found)
+    {
+        testWithAny(dataType, value, queryString, found, true);
+    }
+
+    public void testWithAny(final DataType dataType, final String value, final String queryString,
+            final boolean found, final boolean anyField)
+    {
+        // Given
+        final String sessionToken = v3api.login(TEST_USER, PASSWORD);
+        final PropertyTypePermId propertyTypeId = createAPropertyType(sessionToken, dataType);
+        final MaterialPermId entityPermId = createMaterial(sessionToken, propertyTypeId, value);
+        final MaterialSearchCriteria searchCriteria = new MaterialSearchCriteria();
+        new AbstractSearchPropertyTest.StringQueryInjector(searchCriteria, null, anyField).buildCriteria(queryString);
+
+        // When
+        final List<? extends IPermIdHolder> entities = searchMaterials(sessionToken, searchCriteria,
+                new MaterialFetchOptions());
+
+        // Then
+        final boolean hasMatch = entities.stream().anyMatch(
+                entity -> entity.getPermId().toString().equals(entityPermId.toString()));
+        assertEquals(hasMatch, found);
+    }
+
     private MaterialPermId createMaterial(final String sessionToken, final PropertyTypePermId propertyType,
             final String formattedValue)
     {
-- 
GitLab