From efcc96b37487bfda1fa624a63a9fd38d7b8c628b Mon Sep 17 00:00:00 2001
From: florian <f.spreckelsen@inidscale.com>
Date: Mon, 11 Jul 2022 16:26:56 +0200
Subject: [PATCH] ENH: Split google-like query at spaces and join with AND

---
 src/core/js/webcaosdb.js             |  6 +++++-
 test/core/js/modules/webcaosdb.js.js | 22 ++++++++++++++++------
 2 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/src/core/js/webcaosdb.js b/src/core/js/webcaosdb.js
index 6d8971c0..a4adfb03 100644
--- a/src/core/js/webcaosdb.js
+++ b/src/core/js/webcaosdb.js
@@ -1410,7 +1410,11 @@ var queryForm = new function () {
                 return;
             }
             if (!(value.startsWith("FIND") || value.startsWith("COUNT") || value.startsWith("SELECT"))) {
-                queryField.value = "FIND ENTITY WHICH HAS A PROPERTY LIKE '*" + queryField.value + "*'";
+                // split words in query field at space and create query fragments
+                var words = queryField.value.split(" ").map(word => `A PROPERTY LIKE '*${word}*'`);
+                var query_string = "FIND ENTITY WHICH HAS ";
+                // send a query that combines all fragments with an AND 
+                queryField.value = query_string + words.join(" AND ");
             }
             setter(queryField.value);
 
diff --git a/test/core/js/modules/webcaosdb.js.js b/test/core/js/modules/webcaosdb.js.js
index 5f45c32a..5717f864 100644
--- a/test/core/js/modules/webcaosdb.js.js
+++ b/test/core/js/modules/webcaosdb.js.js
@@ -1160,7 +1160,7 @@ QUnit.test("restoreLastQuery", function (assert) {
 
 QUnit.test("bindOnClick", function (assert) {
     assert.ok(queryForm.bindOnClick, "available");
-    var done = assert.async(2);
+    var done = assert.async(3);
     queryForm.redirect = function (a, b) {
         done();
     };
@@ -1191,19 +1191,29 @@ QUnit.test("bindOnClick", function (assert) {
     assert.equal(storage(), undefined, "after1: storage still empty.");
 
 
-    // test the click handler of the button
-    form.query.value = "free text";
+    // test the click handler of the button, first without spaces ...
+    form.query.value = "freetext";
     assert.equal(storage(), undefined, "before2: storage empty.");
     form.getElementsByClassName("caosdb-search-btn")[0].onclick();
 
-    assert.equal(storage(), "FIND ENTITY WHICH HAS A PROPERTY LIKE '*free text*'", "after2: storage not empty.");
+    assert.equal(storage(), "FIND ENTITY WHICH HAS A PROPERTY LIKE '*freetext*'", "after2: storage not empty.");
 
     // test the form submit handler analogously
-    form.query.value = "free text 2";
+    form.query.value = "freetext2";
     $("body").append(form);
     $(form).append(submitButton);
     submitButton.click();
-    assert.equal(storage(), "FIND ENTITY WHICH HAS A PROPERTY LIKE '*free text 2*'", "after3: storage not empty.");
+    assert.equal(storage(), "FIND ENTITY WHICH HAS A PROPERTY LIKE '*freetext2*'", "after3: storage not empty.");
+
+    $(form).remove();
+    
+    // ... then with spaces
+    form.query.value = "free text 3";
+    $("body").append(form);
+    $(form).append(submitButton);
+    submitButton.click();
+    assert.equal(storage(), "FIND ENTITY WHICH HAS A PROPERTY LIKE '*free*' AND A PROPERTY LIKE '*text*' AND A PROPERTY LIKE '*3*'", "after4: storage not empty.");
+
     $(form).remove();
 })
 
-- 
GitLab