diff --git a/tests/test_query_version.py b/tests/test_query_version.py index 74c1d6f4a7dc3db1c4a305ab7c3517d1c562a4bb..0f9d8b3e44c4424592fa6ee7920c7e957e919ec0 100644 --- a/tests/test_query_version.py +++ b/tests/test_query_version.py @@ -30,12 +30,14 @@ 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_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( @@ -53,6 +55,13 @@ TEST_REC_1 = db.Record( TEST_REF_RT, TEST_REF_1) +TEST_PROP_TEXT_2 = db.Property("TestPropertyText2", datatype=db.TEXT) +TEST_BACKREF_RT = db.RecordType("TestBackRefRecordType") +TEST_BACKREF_0 = db.Record("TestBackRef0", description="bref0").add_parent(TEST_BACKREF_RT).add_property(TEST_RT_1, "TestRecord1").add_property(TEST_PROP_TEXT_2, "val0") +TEST_BACKREF_1 = db.Record("TestBackRef1", description="bref1").add_parent(TEST_BACKREF_RT).add_property(TEST_PROP_TEXT_2, "val1") +TEST_BACKREF_2 = db.Record("TestBackRef2", description="bref2").add_parent(TEST_BACKREF_RT).add_property(TEST_PROP_TEXT_2, "val2") +TEST_BACKREF_3 = db.Record("TestBackRef3", description="bref3").add_parent(TEST_BACKREF_RT).add_property(TEST_PROP_TEXT_2, "val3") + def teardown_module(): CONTAINER.delete() @@ -61,7 +70,11 @@ def teardown_module(): 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() + TEST_REF_RT, TEST_REF_1, TEST_REF_2, TEST_REF_3, + TEST_BACKREF_RT, TEST_BACKREF_0, TEST_PROP_TEXT_2, + ]).insert() + CONTAINER.append(TEST_BACKREF_1) + TEST_BACKREF_1.add_property(TEST_RT_1, str(TEST_REC_1.id)+"@HEAD").insert() # update test_rec_1 two times TEST_REC_1.description = "v2" @@ -73,6 +86,9 @@ def setup_module(): TEST_REC_1.get_property(TEST_REF_RT).value = TEST_REF_2 TEST_REC_1.update() + CONTAINER.append(TEST_BACKREF_2) + TEST_BACKREF_2.add_property(TEST_RT_1, str(TEST_REC_1.id)+"@HEAD").insert() + 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 @@ -82,6 +98,9 @@ def setup_module(): TEST_REC_1.get_property(TEST_REF_RT).value = TEST_REF_3 TEST_REC_1.update() + CONTAINER.append(TEST_BACKREF_3) + TEST_BACKREF_3.add_property(TEST_RT_1, str(TEST_REC_1.id)+"@HEAD").insert() + def test_normal_find_record(): result = query("FIND RECORD TestRecord1") @@ -172,14 +191,32 @@ def test_normal_find_record(): assert len(result) == 0 result = query("FIND RECORD WITH NOT TestPropertyText") - assert len(result) == 3 - assert set(["ref1", "ref2", "ref3"]) == set([r.description for r in result]) + assert len(result) == 7 + assert set(["ref1", "ref2", "ref3", "bref0", "bref1", "bref2", "bref3",]) == set([r.description for r in result]) + + result = query("FIND RECORD WHICH IS REFERENCED BY TestBackRefRecordType") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND RECORD WHICH IS REFERENCED BY TestBackRef0") + assert len(result) == 1 + assert result[0].description == "v3" + + result = query("FIND RECORD WHICH IS REFERENCED BY TestBackRefRecordType WITH TestPropertyText2=val0") + assert len(result) == 1 + assert result[0].description == "v3" + +def test_todo(): + # current version is not referenced + result = query("FIND RECORD WHICH IS REFERENCED BY TestBackRef1") + 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"] + assert len(result) == 10 + assert set(["v3", "v2", "v1", "ref1", "ref2", "ref3", "bref0", "bref1", + "bref2", "bref3"] ) == set([r.description for r in result]) @@ -432,19 +469,64 @@ def test_find_any_version_of_record_with_disjunction_filter(): def test_find_any_version_of_record_with_negation_filter(): result = query("FIND ANY VERSION OF RECORD WHICH DOES NOT HAVE A TestPropertyText") - assert len(result) == 3 - assert set(["ref1", "ref2", "ref3"]) == set([r.description for r in result]) + assert len(result) == 7 + assert set(["ref1", "ref2", "ref3", "bref0", "bref1", "bref2", "bref3",]) == set([r.description for r in result]) result = query("FIND ANY VERSION OF RECORD WHICH DOES NOT HAVE A TestPropertyText=val2") - assert len(result) == 5 - assert set(["ref1", "ref2", "ref3", "v1", "v3"]) == set([r.description for r in result]) + assert len(result) == 9 + assert set(["ref1", "ref2", "ref3", "bref0", "bref1", "bref2", "bref3", + "v1", "v3"]) == set([r.description for r in result]) result = query("FIND ANY VERSION OF RECORD TestRecord1 WHICH DOES NOT HAVE A TestPropertyText=val2") assert len(result) == 2 assert set(["v1", "v3"]) == set([r.description for r in result]) + def test_find_any_version_of_record_with_complex_filter(): result = query("FIND ANY VERSION OF RECORD WITH TestPropertyText=val2 OR (TestPropertyInteger=200 AND NOT TestPropertyInteger=400 AND TestRefRecordType = TestRef2)") assert len(result) == 1 assert result[0].description == "v2" + +def test_find_any_version_of_record_with_backref_filter(): + result = query("FIND ANY VERSION OF RECORD WHICH IS REFERENCED BY TestBackRefRecordType") + assert len(result) == 3 + assert set(["v1", "v2", "v3"]) == set([r.description for r in result]) + + result = query("FIND ANY VERSION OF RECORD TestRecord1 WHICH IS REFERENCED BY TestBackRefRecordType") + assert len(result) == 3 + assert set(["v1", "v2", "v3"]) == set([r.description for r in result]) + + result = query("FIND ANY VERSION OF TestRecord1 WHICH IS REFERENCED BY TestBackRefRecordType") + assert len(result) == 3 + assert set(["v1", "v2", "v3"]) == set([r.description for r in result]) + + result = query("FIND ANY VERSION OF TestRecord1 WHICH IS REFERENCED BY TestBackRef0") + assert len(result) == 3 + assert set(["v1", "v2", "v3"]) == set([r.description for r in result]) + + result = query("FIND ANY VERSION OF TestRecord1 WHICH IS REFERENCED BY TestBackRef0") + assert len(result) == 3 + assert set(["v1", "v2", "v3"]) == set([r.description for r in result]) + + result = query("FIND ANY VERSION OF TestRecord1 WHICH IS REFERENCED BY TestBackRef1") + assert len(result) == 1 + assert set(["v1"]) == set([r.description for r in result]) + + result = query("FIND ANY VERSION OF TestRecord1 WHICH IS REFERENCED BY TestBackRef2") + assert len(result) == 1 + assert set(["v2"]) == set([r.description for r in result]) + + result = query("FIND ANY VERSION OF TestRecord1 WHICH IS REFERENCED BY TestBackRef3") + assert len(result) == 1 + assert set(["v3"]) == set([r.description for r in result]) + +def test_find_any_version_of_record_with_backref_and_subquery(): + assert query("FIND ANY VERSION OF RECORD WHICH IS REFERENCED BY TestBackRefRecordType WITH name = TestBackRef0") + assert len(result) == 1 + assert set(["v3"]) == set([r.description for r in result]) + +def test_find_any_version_of_record_with_ref_and_subquery(): + assert query("FIND ANY VERSION OF RECORD WHICH REFERENCES TestRefRecordType WITH name = TestRef2") + assert len(result) == 1 + assert set(["v3"]) == set([r.description for r in result])