From d0e2e367d1d21c6df4247b0ad97c29762ddfd708 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com>
Date: Fri, 30 Aug 2024 09:09:20 +0200
Subject: [PATCH] MAINT: renaming and first int test

---
 integrationtests/basic_test.py                | 96 +++++++++++++++++++
 integrationtests/box_loan.py                  |  1 +
 integrationtests/conf.py                      |  1 +
 .../forms/loan-forms/borrow_checkout.html     |  0
 .../ext/html/forms/loan-forms/return_box.html |  0
 .../caosdb-webui/src/ext/js/box_loan.js       |  0
 .../loan_management/accept_loan_request.py    |  0
 .../loan_management/accept_return_request.py  |  0
 .../scripting/bin/loan_management/box_loan.py |  0
 .../scripting/bin/loan_management/conf.py     |  0
 .../bin/loan_management/confirm_loan.py       |  0
 .../bin/loan_management/manual_return.py      |  0
 .../loan_management/reject_return_request.py  |  0
 .../bin/loan_management/request_loan.py       |  0
 .../bin/loan_management/request_return.py     |  0
 .../bin/test/loan_management/box_loan.py      |  0
 .../bin/test/loan_management/conf.py          |  0
 .../bin/test/loan_management/manual_return.py |  0
 .../bin/test/loan_management/request_loan.py  |  0
 .../loan_management/request_loan_form.json    |  0
 .../test/loan_management/request_return.py    |  0
 .../bin/test/loan_management/test_box_loan.py |  0
 .../loan_management/test_manual_return.py     |  0
 .../test/loan_management/test_request_loan.py |  0
 .../loan_management/test_request_return.py    |  0
 notes                                         |  2 +
 26 files changed, 100 insertions(+)
 create mode 100644 integrationtests/basic_test.py
 create mode 120000 integrationtests/box_loan.py
 create mode 120000 integrationtests/conf.py
 rename {caosdb-server => loan-custom/caosdb-server}/caosdb-webui/src/ext/html/forms/loan-forms/borrow_checkout.html (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/caosdb-webui/src/ext/html/forms/loan-forms/return_box.html (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/caosdb-webui/src/ext/js/box_loan.js (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/loan_management/accept_loan_request.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/loan_management/accept_return_request.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/loan_management/box_loan.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/loan_management/conf.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/loan_management/confirm_loan.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/loan_management/manual_return.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/loan_management/reject_return_request.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/loan_management/request_loan.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/loan_management/request_return.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/test/loan_management/box_loan.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/test/loan_management/conf.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/test/loan_management/manual_return.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/test/loan_management/request_loan.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/test/loan_management/request_loan_form.json (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/test/loan_management/request_return.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/test/loan_management/test_box_loan.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/test/loan_management/test_manual_return.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/test/loan_management/test_request_loan.py (100%)
 rename {caosdb-server => loan-custom/caosdb-server}/scripting/bin/test/loan_management/test_request_return.py (100%)

diff --git a/integrationtests/basic_test.py b/integrationtests/basic_test.py
new file mode 100644
index 0000000..a4becb2
--- /dev/null
+++ b/integrationtests/basic_test.py
@@ -0,0 +1,96 @@
+#  This file is a part of the LinkAhead Project.
+#
+#  Copyright (C) 2024 Henrik tom Wörden (h.tomwoerden@indiscale.com)
+#  Copyright (C) 2024 IndiScale GmbH (info@indiscale.com)
+#
+#  This program is free software: you can redistribute it and/or modify
+#  it under the terms of the GNU Affero General Public License as
+#  published by the Free Software Foundation, either version 3 of the
+#  License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU Affero General Public License for more details.
+#
+#  You should have received a copy of the GNU Affero General Public License
+#  along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+"""
+basic integration test of the loan workflow
+"""
+
+from pytest import fixture
+import json
+import linkahead as db
+import re
+from tempfile import NamedTemporaryFile
+from linkahead.utils.server_side_scripting import run_server_side_script
+from box_loan import (BORROWER, BOX, COMMENT, DESTINATION, EXHAUST_CONTENTS,
+                      EXPECTED_RETURN, F_BOX, F_COMMENT, F_DESTINATION,PERSON,
+                      F_EMAIL, F_EXHAUST_CONTENTS, F_EXPECTED_RETURN_DATE, EMAIL,
+                      F_FIRST_NAME, F_LAST_NAME, FIRST_NAME, LAST_NAME, LOAN, LOCATION,
+                      LOAN_REQUESTED, assert_date_in_future,
+                      assert_key_in_data, get_box, insert_or_update_person, main,
+                      send_loan_request_mail)
+
+
+TESTLOANCOMMENT = 'This is a test'
+TESTBOXNUMBER = '0123 TEST'
+TESTDESTINATION = 'TEST DEST'
+TESTBORROWEREMAIL = 'test@example.com'
+TESTFN = "Alice"
+TESTLN = "Wunderland"
+
+def delete_stuff():
+    to_be_deleted = db.Container()
+    to_be_deleted.extend(db.execute_query(f"FIND loan with {COMMENT.name}='{TESTLOANCOMMENT}'"))
+    to_be_deleted.extend(db.execute_query(f"FIND '{TESTDESTINATION}'"))
+    to_be_deleted.extend(db.execute_query(f"FIND '{TESTBOXNUMBER}'"))
+    to_be_deleted.extend(db.execute_query(f"FIND person with {EMAIL.name}='{TESTBORROWEREMAIL}'"))
+    if len(to_be_deleted)>0:
+        to_be_deleted.delete()
+
+@fixture(autouse=True)
+def prepare():
+    delete_stuff()
+    db.Record(name=TESTBOXNUMBER).add_parent(BOX.name).insert()
+    db.Record(name=TESTDESTINATION).add_parent(LOCATION.name).insert()
+    (db.Record().add_parent(PERSON.name).add_property(EMAIL.name, TESTBORROWEREMAIL)
+                .add_property(FIRST_NAME.name, TESTFN)
+                .add_property(LAST_NAME.name, TESTLN).insert())
+    yield
+    delete_stuff()
+
+
+def test_request_loan():
+    data = {}
+    data[F_EXHAUST_CONTENTS] = False
+    data[F_EXPECTED_RETURN_DATE]= "2042-02-02"
+    data[F_BOX]=db.utils.get_entity.get_entity_by_name(TESTBOXNUMBER).id
+    data[F_COMMENT]=TESTLOANCOMMENT
+    data[F_DESTINATION]=db.utils.get_entity.get_entity_by_name(TESTDESTINATION).id
+    data[F_EMAIL]=TESTBORROWEREMAIL
+    data[F_LAST_NAME]=TESTLN
+    data[F_FIRST_NAME]=TESTFN
+
+    fi = NamedTemporaryFile(delete=False, suffix=".json")
+    fi.close()
+    with open(fi.name, "w") as f:
+        json.dump(data, f)
+
+    response = run_server_side_script("loan_management/request_loan.py",
+                                    #"pos0",
+                                    #option1="val1",
+                                    files={"-p0": fi.name},
+                                    **{"auth-token":db.get_connection()._authenticator.auth_token})
+    assert response.stderr is None
+    assert response.code == 0
+    loan = db.execute_query(f"FIND loan with {COMMENT.name}='{TESTLOANCOMMENT}'", unique=True)
+    assert loan.get_property(f"{BOX.name}").value == data[F_BOX]
+    assert loan.get_property(f"{LOAN_REQUESTED.name}").value.startswith("20")
+    assert loan.get_property(f"{BORROWER.name}").value == db.execute_query(
+        f"FIND {PERSON.name} with {EMAIL.name}='{TESTBORROWEREMAIL}'", unique=True).id
+    assert loan.get_property(f"{EXPECTED_RETURN.name}").value == data[F_EXPECTED_RETURN_DATE]
+    assert loan.get_property(f"{EXHAUST_CONTENTS.name}").value == data[F_EXHAUST_CONTENTS]
+    assert loan.get_property(f"{DESTINATION.name}").value == data[F_DESTINATION]
diff --git a/integrationtests/box_loan.py b/integrationtests/box_loan.py
new file mode 120000
index 0000000..59146e9
--- /dev/null
+++ b/integrationtests/box_loan.py
@@ -0,0 +1 @@
+../loan-custom/caosdb-server/scripting/bin/loan_management/box_loan.py
\ No newline at end of file
diff --git a/integrationtests/conf.py b/integrationtests/conf.py
new file mode 120000
index 0000000..ff726da
--- /dev/null
+++ b/integrationtests/conf.py
@@ -0,0 +1 @@
+../loan-custom/caosdb-server/scripting/bin/loan_management/conf.py
\ No newline at end of file
diff --git a/caosdb-server/caosdb-webui/src/ext/html/forms/loan-forms/borrow_checkout.html b/loan-custom/caosdb-server/caosdb-webui/src/ext/html/forms/loan-forms/borrow_checkout.html
similarity index 100%
rename from caosdb-server/caosdb-webui/src/ext/html/forms/loan-forms/borrow_checkout.html
rename to loan-custom/caosdb-server/caosdb-webui/src/ext/html/forms/loan-forms/borrow_checkout.html
diff --git a/caosdb-server/caosdb-webui/src/ext/html/forms/loan-forms/return_box.html b/loan-custom/caosdb-server/caosdb-webui/src/ext/html/forms/loan-forms/return_box.html
similarity index 100%
rename from caosdb-server/caosdb-webui/src/ext/html/forms/loan-forms/return_box.html
rename to loan-custom/caosdb-server/caosdb-webui/src/ext/html/forms/loan-forms/return_box.html
diff --git a/caosdb-server/caosdb-webui/src/ext/js/box_loan.js b/loan-custom/caosdb-server/caosdb-webui/src/ext/js/box_loan.js
similarity index 100%
rename from caosdb-server/caosdb-webui/src/ext/js/box_loan.js
rename to loan-custom/caosdb-server/caosdb-webui/src/ext/js/box_loan.js
diff --git a/caosdb-server/scripting/bin/loan_management/accept_loan_request.py b/loan-custom/caosdb-server/scripting/bin/loan_management/accept_loan_request.py
similarity index 100%
rename from caosdb-server/scripting/bin/loan_management/accept_loan_request.py
rename to loan-custom/caosdb-server/scripting/bin/loan_management/accept_loan_request.py
diff --git a/caosdb-server/scripting/bin/loan_management/accept_return_request.py b/loan-custom/caosdb-server/scripting/bin/loan_management/accept_return_request.py
similarity index 100%
rename from caosdb-server/scripting/bin/loan_management/accept_return_request.py
rename to loan-custom/caosdb-server/scripting/bin/loan_management/accept_return_request.py
diff --git a/caosdb-server/scripting/bin/loan_management/box_loan.py b/loan-custom/caosdb-server/scripting/bin/loan_management/box_loan.py
similarity index 100%
rename from caosdb-server/scripting/bin/loan_management/box_loan.py
rename to loan-custom/caosdb-server/scripting/bin/loan_management/box_loan.py
diff --git a/caosdb-server/scripting/bin/loan_management/conf.py b/loan-custom/caosdb-server/scripting/bin/loan_management/conf.py
similarity index 100%
rename from caosdb-server/scripting/bin/loan_management/conf.py
rename to loan-custom/caosdb-server/scripting/bin/loan_management/conf.py
diff --git a/caosdb-server/scripting/bin/loan_management/confirm_loan.py b/loan-custom/caosdb-server/scripting/bin/loan_management/confirm_loan.py
similarity index 100%
rename from caosdb-server/scripting/bin/loan_management/confirm_loan.py
rename to loan-custom/caosdb-server/scripting/bin/loan_management/confirm_loan.py
diff --git a/caosdb-server/scripting/bin/loan_management/manual_return.py b/loan-custom/caosdb-server/scripting/bin/loan_management/manual_return.py
similarity index 100%
rename from caosdb-server/scripting/bin/loan_management/manual_return.py
rename to loan-custom/caosdb-server/scripting/bin/loan_management/manual_return.py
diff --git a/caosdb-server/scripting/bin/loan_management/reject_return_request.py b/loan-custom/caosdb-server/scripting/bin/loan_management/reject_return_request.py
similarity index 100%
rename from caosdb-server/scripting/bin/loan_management/reject_return_request.py
rename to loan-custom/caosdb-server/scripting/bin/loan_management/reject_return_request.py
diff --git a/caosdb-server/scripting/bin/loan_management/request_loan.py b/loan-custom/caosdb-server/scripting/bin/loan_management/request_loan.py
similarity index 100%
rename from caosdb-server/scripting/bin/loan_management/request_loan.py
rename to loan-custom/caosdb-server/scripting/bin/loan_management/request_loan.py
diff --git a/caosdb-server/scripting/bin/loan_management/request_return.py b/loan-custom/caosdb-server/scripting/bin/loan_management/request_return.py
similarity index 100%
rename from caosdb-server/scripting/bin/loan_management/request_return.py
rename to loan-custom/caosdb-server/scripting/bin/loan_management/request_return.py
diff --git a/caosdb-server/scripting/bin/test/loan_management/box_loan.py b/loan-custom/caosdb-server/scripting/bin/test/loan_management/box_loan.py
similarity index 100%
rename from caosdb-server/scripting/bin/test/loan_management/box_loan.py
rename to loan-custom/caosdb-server/scripting/bin/test/loan_management/box_loan.py
diff --git a/caosdb-server/scripting/bin/test/loan_management/conf.py b/loan-custom/caosdb-server/scripting/bin/test/loan_management/conf.py
similarity index 100%
rename from caosdb-server/scripting/bin/test/loan_management/conf.py
rename to loan-custom/caosdb-server/scripting/bin/test/loan_management/conf.py
diff --git a/caosdb-server/scripting/bin/test/loan_management/manual_return.py b/loan-custom/caosdb-server/scripting/bin/test/loan_management/manual_return.py
similarity index 100%
rename from caosdb-server/scripting/bin/test/loan_management/manual_return.py
rename to loan-custom/caosdb-server/scripting/bin/test/loan_management/manual_return.py
diff --git a/caosdb-server/scripting/bin/test/loan_management/request_loan.py b/loan-custom/caosdb-server/scripting/bin/test/loan_management/request_loan.py
similarity index 100%
rename from caosdb-server/scripting/bin/test/loan_management/request_loan.py
rename to loan-custom/caosdb-server/scripting/bin/test/loan_management/request_loan.py
diff --git a/caosdb-server/scripting/bin/test/loan_management/request_loan_form.json b/loan-custom/caosdb-server/scripting/bin/test/loan_management/request_loan_form.json
similarity index 100%
rename from caosdb-server/scripting/bin/test/loan_management/request_loan_form.json
rename to loan-custom/caosdb-server/scripting/bin/test/loan_management/request_loan_form.json
diff --git a/caosdb-server/scripting/bin/test/loan_management/request_return.py b/loan-custom/caosdb-server/scripting/bin/test/loan_management/request_return.py
similarity index 100%
rename from caosdb-server/scripting/bin/test/loan_management/request_return.py
rename to loan-custom/caosdb-server/scripting/bin/test/loan_management/request_return.py
diff --git a/caosdb-server/scripting/bin/test/loan_management/test_box_loan.py b/loan-custom/caosdb-server/scripting/bin/test/loan_management/test_box_loan.py
similarity index 100%
rename from caosdb-server/scripting/bin/test/loan_management/test_box_loan.py
rename to loan-custom/caosdb-server/scripting/bin/test/loan_management/test_box_loan.py
diff --git a/caosdb-server/scripting/bin/test/loan_management/test_manual_return.py b/loan-custom/caosdb-server/scripting/bin/test/loan_management/test_manual_return.py
similarity index 100%
rename from caosdb-server/scripting/bin/test/loan_management/test_manual_return.py
rename to loan-custom/caosdb-server/scripting/bin/test/loan_management/test_manual_return.py
diff --git a/caosdb-server/scripting/bin/test/loan_management/test_request_loan.py b/loan-custom/caosdb-server/scripting/bin/test/loan_management/test_request_loan.py
similarity index 100%
rename from caosdb-server/scripting/bin/test/loan_management/test_request_loan.py
rename to loan-custom/caosdb-server/scripting/bin/test/loan_management/test_request_loan.py
diff --git a/caosdb-server/scripting/bin/test/loan_management/test_request_return.py b/loan-custom/caosdb-server/scripting/bin/test/loan_management/test_request_return.py
similarity index 100%
rename from caosdb-server/scripting/bin/test/loan_management/test_request_return.py
rename to loan-custom/caosdb-server/scripting/bin/test/loan_management/test_request_return.py
diff --git a/notes b/notes
index 548ba92..313cea3 100644
--- a/notes
+++ b/notes
@@ -11,3 +11,5 @@ Soll die Email Adress wirklich on the fly mit geändert werden? Alternative
 
 
 Introduce a single loan.py file with argparse (`loan.py accept a b c`, etc) 
+
+Person without first or lastname seem to be a problem.
-- 
GitLab