From 3aaeae7bd933b772508a2e2670ca370ebe4515ea Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Sat, 7 Nov 2020 01:53:59 +0100 Subject: [PATCH] WIP: tests for versioned queries --- tests/query_version.py | 360 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 360 insertions(+) create mode 100644 tests/query_version.py diff --git a/tests/query_version.py b/tests/query_version.py new file mode 100644 index 0000000..74101db --- /dev/null +++ b/tests/query_version.py @@ -0,0 +1,360 @@ +# encoding: utf-8 +# +# ** header v3.0 +# This file is a part of the CaosDB Project. +# +# Copyright (C) 2018 Research Group Biomedical Physics, +# Max-Planck-Institute for Dynamics and Self-Organization Göttingen +# +# 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/>. +# +# ** end header +# +import caosdb as db +from caosdb import execute_query as query + +CONTAINER = db.Container() +TEST_PROP_TEXT = db.Property("TestPropertyText", datatype=db.TEXT) +TEST_PROP_DOUBLE = db.Property("TestPropertyDouble", datatype=db.DOUBLE) +TEST_PROP_INTEGER = db.Property("TestPropertyInteger", datatype=db.INTEGER) +TEST_PROP_DATETIME = db.Property("TestPropertyDatetime", datatype=db.DATETIME) +TEST_PROP_DATE = db.Property("TestPropertyDate", datatype=db.DATETIME) +TEST_REF_RT = db.RecordType("TestRefRecordType") + +TEST_REF_1 = db.Record("TestRef1", description="ref1").add_parent(TEST_REF_RT) +TEST_REF_2 = db.Record("TestRef2", description="ref2").add_parent(TEST_REF_RT) +TEST_REF_3 = db.Record("TestRef3", description="ref3").add_parent(TEST_REF_RT) +TEST_RT_1 = db.RecordType("TestRecordType1") +TEST_REC_1 = db.Record( + "TestRecord1", + description="v1").add_parent( + TEST_RT_1).add_property( + TEST_PROP_TEXT, + "val1").add_property( + TEST_PROP_DOUBLE, + 1.14).add_property( + TEST_PROP_INTEGER, + 100).add_property( + TEST_PROP_DATETIME, + "2021-12-24T20:15:00").add_property( + TEST_PROP_DATE, + "2021-12").add_property( + TEST_REF_RT, + TEST_REF_1) + + +def teardown_module(): + CONTAINER.delete() + + +def setup_module(): + CONTAINER.extend([TEST_RT_1, TEST_REC_1, TEST_PROP_TEXT, TEST_PROP_DOUBLE, + TEST_PROP_INTEGER, TEST_PROP_DATETIME, TEST_PROP_DATE, + TEST_REF_RT, TEST_REF_1, TEST_REF_2, TEST_REF_3]).insert() + + # update test_rec_1 two times + TEST_REC_1.description = "v2" + TEST_REC_1.get_property(TEST_PROP_TEXT).value = "val2" + TEST_REC_1.get_property(TEST_PROP_DOUBLE).value = 2.14 + TEST_REC_1.get_property(TEST_PROP_INTEGER).value = 200 + TEST_REC_1.get_property(TEST_PROP_DATETIME).value = "2022-12-24T20:15:00" + TEST_REC_1.get_property(TEST_PROP_DATE).value = "2022-12" + TEST_REC_1.get_property(TEST_REF_RT).value = TEST_REF_2 + TEST_REC_1.update() + + TEST_REC_1.description = "v3" + TEST_REC_1.get_property(TEST_PROP_TEXT).value = "val3" + TEST_REC_1.get_property(TEST_PROP_DOUBLE).value = 3.14 + TEST_REC_1.get_property(TEST_PROP_INTEGER).value = 300 + TEST_REC_1.get_property(TEST_PROP_DATETIME).value = "2023-12-24T20:15:00" + TEST_REC_1.get_property(TEST_PROP_DATE).value = "2023-12" + TEST_REC_1.get_property(TEST_REF_RT).value = TEST_REF_3 + TEST_REC_1.update() + + +def test_normal_find_record(): + result = query("FIND RECORD TestRecord1") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND RECORD TestRecordType1") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND RECORD TestRecord1 WITH TestPropertyText = val3") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND RECORD TestRecord1 WITH TestPropertyText = val1") + assert len(result) == 0 + + result = query("FIND RECORD TestRecord1 WITH TestPropertyDouble = 3.14") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND RECORD TestRecord1 WITH TestPropertyDouble = 1.14") + assert len(result) == 0 + + result = query("FIND RECORD TestRecord1 WITH TestPropertyInteger = 300") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND RECORD TestRecord1 WITH TestPropertyInteger = 100") + assert len(result) == 0 + + result = query( + "FIND RECORD TestRecord1 WITH TestPropertyDatetime = 2023-12-24T20:15:00") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query( + "FIND RECORD TestRecord1 WITH TestPropertyDatetime IN 2023-12") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query( + "FIND RECORD TestRecord1 WITH TestPropertyDatetime = 2021-12-24T20:15:00") + assert len(result) == 0 + + result = query("FIND RECORD TestRecord1 WITH TestPropertyDatetime IN 2021") + assert len(result) == 0 + + result = query("FIND RECORD TestRecord1 WITH TestPropertyDate = 2023-12") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND RECORD TestRecord1 WITH TestPropertyDate = 2021-12") + assert len(result) == 0 + + result = query("FIND RECORD TestRecord1 WITH TestPropertyDate in 2023") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND RECORD TestRecord1 WITH TestPropertyDate in 2021") + assert len(result) == 0 + + result = query("FIND RECORD TestRecord1 WITH TestRefRecordType = TestRef3") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND RECORD TestRecord1 WITH TestRefRecordType = TestRef1") + assert len(result) == 0 + + result = query( + "FIND RECORD TestRecord1 WITH TestRefRecordType -> TestRef3") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query( + "FIND RECORD TestRecord1 WITH TestRefRecordType -> TestRef1") + assert len(result) == 0 + + +def test_find_any_version_of_record(): + result = query("FIND ANY VERSION OF RECORD") + assert len(result) == 6 + assert set(["v3", "v2", "v1", "ref1", "ref2", "ref3"] + ) == set([r.description for r in result]) + + +def test_find_any_version_of_record_by_name(): + result = query("FIND ANY VERSION OF RECORD TestRecord1") + assert len(result) == 3 + assert set(["v3", "v2", "v1"]) == set([r.description for r in result]) + + +def test_find_any_version_of_record_by_parent(): + result = query("FIND ANY VERSION OF RECORD TestRecordType1") + assert len(result) == 3 + assert set(["v3", "v2", "v1"]) == set([r.description for r in result]) + + +def test_find_any_version_of_named_entity_with_id_filter(): + result = query( + "FIND ANY VERSION OF TestRecord1 WITH id = " + str(TEST_REC_1.id)) + assert len(result) == 3 + assert set(["v3", "v2", "v1"]) == set([r.description for r in result]) + + +def test_find_any_version_of_entity_with_id_filter(): + result = query("FIND ANY VERSION OF ENTITY WITH id = " + + str(TEST_REC_1.id)) + assert len(result) == 3 + assert set(["v3", "v2", "v1"]) == set([r.description for r in result]) + + +def test_find_any_version_of_record_with_id_filter(): + result = query("FIND ANY VERSION OF RECORD WITH id = " + + str(TEST_REC_1.id)) + assert len(result) == 3 + assert set(["v3", "v2", "v1"]) == set([r.description for r in result]) + + +def test_find_any_version_of_record_with_simple_pov_text_filter(): + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyText") + assert len(result) == 3 + assert set(["v3", "v2", "v1"]) == set([r.description for r in result]) + + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyText = val3") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyText = val2") + assert len(result) == 1 + assert result[0].description == "v2" + + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyText = val1") + assert len(result) == 1 + assert result[0].description == "v1" + + +def test_find_any_version_of_record_with_simple_pov_double_filter(): + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyDouble") + assert len(result) == 3 + assert set(["v3", "v2", "v1"]) == set([r.description for r in result]) + + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyDouble = 3.14") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyDouble = 2.14") + assert len(result) == 1 + assert result[0].description == "v2" + + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyDouble = 1.14") + assert len(result) == 1 + assert result[0].description == "v1" + + +def test_find_any_version_of_record_with_simple_pov_integer_filter(): + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyInteger") + assert len(result) == 3 + assert set(["v3", "v2", "v1"]) == set([r.description for r in result]) + + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyInteger = 300") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyInteger = 200") + assert len(result) == 1 + assert result[0].description == "v2" + + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyInteger = 100") + assert len(result) == 1 + assert result[0].description == "v1" + + +def test_find_any_version_of_record_with_simple_pov_datetime_filter(): + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyDatetime") + assert len(result) == 3 + assert set(["v3", "v2", "v1"]) == set([r.description for r in result]) + + result = query( + "FIND ANY VERSION OF RECORD WITH TestPropertyDatetime = 2023-12-24T20:15:00") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query( + "FIND ANY VERSION OF RECORD WITH TestPropertyDatetime = 2022-12-24T20:15:00") + assert len(result) == 1 + assert result[0].description == "v2" + + result = query( + "FIND ANY VERSION OF RECORD WITH TestPropertyDatetime = 2021-12-24T20:15:00") + assert len(result) == 1 + assert result[0].description == "v1" + + result = query( + "FIND ANY VERSION OF RECORD WITH TestPropertyDatetime IN 2023") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query( + "FIND ANY VERSION OF RECORD WITH TestPropertyDatetime IN 2022") + assert len(result) == 1 + assert result[0].description == "v2" + + result = query( + "FIND ANY VERSION OF RECORD WITH TestPropertyDatetime IN 2021") + assert len(result) == 1 + assert result[0].description == "v1" + + +def test_find_any_version_of_record_with_simple_pov_date_filter(): + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyDate") + assert len(result) == 3 + assert set(["v3", "v2", "v1"]) == set([r.description for r in result]) + + result = query( + "FIND ANY VERSION OF RECORD WITH TestPropertyDate = 2023-12") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query( + "FIND ANY VERSION OF RECORD WITH TestPropertyDate = 2022-12") + assert len(result) == 1 + assert result[0].description == "v2" + + result = query( + "FIND ANY VERSION OF RECORD WITH TestPropertyDate = 2021-12") + assert len(result) == 1 + assert result[0].description == "v1" + + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyDate IN 2023") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyDate IN 2022") + assert len(result) == 1 + assert result[0].description == "v2" + + result = query("FIND ANY VERSION OF RECORD WITH TestPropertyDate IN 2021") + assert len(result) == 1 + assert result[0].description == "v1" + + +def test_find_any_version_of_record_with_simple_reference_filter(): + result = query("FIND ANY VERSION OF RECORD WITH TestRefRecordType") + assert len(result) == 3 + assert set(["v3", "v2", "v1"]) == set([r.description for r in result]) + + result = query( + "FIND ANY VERSION OF RECORD WITH TestRefRecordType = TestRef3") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query( + "FIND ANY VERSION OF RECORD WITH TestRefRecordType = TestRef2") + assert len(result) == 1 + assert result[0].description == "v2" + + result = query( + "FIND ANY VERSION OF RECORD WITH TestRefRecordType = TestRef1") + assert len(result) == 1 + assert result[0].description == "v1" + + result = query( + "FIND ANY VERSION OF RECORD WITH TestRefRecordType -> TestRef3") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query( + "FIND ANY VERSION OF RECORD WITH TestRefRecordType -> TestRef2") + assert len(result) == 1 + assert result[0].description == "v2" + + result = query( + "FIND ANY VERSION OF RECORD WITH TestRefRecordType -> TestRef1") + assert len(result) == 1 + assert result[0].description == "v1" -- GitLab