diff --git a/tests/test_empty_text_value.py b/tests/test_empty_text_value.py index 9df0651e82206864b6a1077cae3dda75d2fefc67..baa69cdcd3935c2040428edc375391f4941027c3 100644 --- a/tests/test_empty_text_value.py +++ b/tests/test_empty_text_value.py @@ -23,7 +23,6 @@ import pytest import caosdb as db - def setup(): teardown() rt = db.RecordType("TestRT") @@ -31,78 +30,119 @@ def setup(): p = db.Property("TestProp", datatype=db.TEXT) p.insert() - def teardown(): try: db.execute_query("FIND Test*").delete() except Exception as e: print(e) - def test_empty_string(): - r = db.Record() - r.add_parent("TestRT") - r.add_property("TestProp", value="leer") - r.insert() - assert db.execute_query("FIND TestRT with TestProp='leer'", unique=True).id == r.id - r.delete() - r = db.Record() - r.add_parent("TestRT") - r.add_property("TestProp", value="") - r.insert() - assert db.execute_query("FIND Record TestRT", unique=True).value == "" - # assert db.execute_query("FIND TestRT with TestProp=''", unique=True).id == r.id - r.delete() + r1 = db.Record() + r1.add_parent("TestRT") + r1.add_property("TestProp", value="") + r1.insert() + + # value was stored correctly + assert db.execute_query("FIND Record TestRT", unique=True).get_property("TestProp").value == "" + # query language works for empty string + assert db.execute_query("FIND TestRT with TestProp=''", unique=True).id == r1.id + assert db.execute_query('FIND TestRT with TestProp=""', unique=True).get_property("TestProp").value == "" + + r2 = db.Record() + r2.add_parent("TestRT") + r2.add_property("TestProp", value="not empty") + r2.insert() + + assert db.execute_query("FIND TestRT with TestProp='not empty'", unique=True).id == r2.id + # query language work while other records with non empty values are present + assert db.execute_query("FIND TestRT with TestProp=''", unique=True).id == r1.id + assert len(db.execute_query("FIND Record TestRT")) == 2 def test_null_value(): - r = db.Record() - r.add_parent("TestRT") - r.add_property("TestProp", value="null") - r.insert() - assert db.execute_query("FIND TestRT with TestProp='null'", unique=True).id == r.id - r.delete() - r = db.Record() - r.add_parent("TestRT") - r.add_property("TestProp", value=None) - r.insert() - assert db.execute_query("FIND Record TestRT", unique=True).value == None - # assert db.execute_query("FIND TestRT WHERE TestProp IS NULL", unique=True).id == r.id - r.delete() + r1 = db.Record() + r1.add_parent("TestRT") + r1.add_property("TestProp", value=None) + r1.insert() + + # value was stored correctly + assert db.execute_query("FIND Record TestRT", + unique=True).get_property("TestProp").value == None + # query language works with null value + assert db.execute_query("FIND TestRT WHERE TestProp IS NULL", unique=True).id == r1.id + # add a bit of noise + r2 = db.Record() + r2.add_parent("TestRT") + r2.add_property("TestProp", value="null") + r2.insert() + + assert db.execute_query("FIND TestRT with TestProp='null'", unique=True).id == r2.id + # query language works while other record with non-null values are present + assert db.execute_query("FIND TestRT WHERE TestProp IS NULL", unique=True).id == r1.id + assert len(db.execute_query("FIND Record TestRT")) == 2 def test_list_with_empty_string(): + r1 = db.Record() + r1.add_parent("TestRT") + r1.add_property("TestProp", datatype=db.LIST(db.TEXT), value=[""]) + r1.insert() + + # value was stored correctly + assert db.execute_query("FIND Record TestRT", + unique=True).get_property("TestProp").value == [""] + # query language works + assert db.execute_query("FIND TestRT with TestProp=''", unique=True).id == r1.id + + r2 = db.Record() + r2.add_parent("TestRT") + r2.add_property("TestProp", datatype=db.LIST(db.TEXT), value=["leer"]) + r2.insert() + assert db.execute_query("FIND Record TestRT with TestProp='leer'", + unique=True).get_property("TestProp").value == ["leer"] + assert db.execute_query("FIND TestRT with TestProp='leer'", unique=True).id == r2.id + assert db.execute_query("FIND TestRT with TestProp=''", unique=True).id == r1.id + +def test_null_list(): + r1 = db.Record() + r1.add_parent("TestRT") + r1.add_property("TestProp", datatype=db.LIST(db.TEXT), value=None) + r1.insert() + + # null list was stored correctly + assert db.execute_query("FIND Record TestRT", + unique=True).get_property("TestProp").value == None + assert db.execute_query("FIND TestRT WHERE TestProp IS NULL", unique=True).id == r1.id + + +@pytest.mark.skip(reason="""this is the confirmation for + https://gitlab.com/caosdb/caosdb-server/issues/new. Empty + lists cannot be distinguished from None.""") +def test_empty_list(): r = db.Record() r.add_parent("TestRT") - r.add_property("TestProp", datatype=db.LIST(db.TEXT), value=["leer"]) - r.insert() - assert len(db.execute_query("FIND Record TestRT", unique=True).value) == 1 - assert db.execute_query("FIND Record TestRT", unique=True).value[0] == "leer" - # assert db.execute_query("FIND TestRT with TestProp='leer'", unique=True).id == r.id - r.delete() - r = db.Record() - r.add_parent("TestRT") - r.add_property("TestProp", datatype=db.LIST(db.TEXT), value=[""]) + r.add_property("TestProp", datatype=db.LIST(db.TEXT), value=[]) r.insert() - assert len(db.execute_query("FIND Record TestRT", unique=True).value) == 1 - assert db.execute_query("FIND Record TestRT", unique=True).value[0] == "" - # assert db.execute_query("FIND TestRT with TestProp=''", unique=True).id == r.id - r.delete() + assert db.execute_query("FIND Record TestRT", + unique=True).get_property("TestProp").value == [] + +@pytest.mark.skip(reason="""this is the confirmation for + https://gitlab.com/caosdb/caosdb-server/issues/new. `None` + cannot be distinguished from [None] lists.""") def test_list_with_null_value(): r = db.Record() r.add_parent("TestRT") r.add_property("TestProp", datatype=db.LIST(db.TEXT), value=["null"]) r.insert() - assert len(db.execute_query("FIND Record TestRT", unique=True).value) == 1 - assert db.execute_query("FIND Record TestRT", unique=True).value[0] == "null" - assert db.execute_query("FIND TestRT with TestProp='null'", unique=True).id == r.id + assert db.execute_query("FIND Record TestRT", + unique=True).get_property("TestProp").value == ["null"] r.delete() r = db.Record() r.add_parent("TestRT") r.add_property("TestProp", datatype=db.LIST(db.TEXT), value=[None]) r.insert() - assert len(db.execute_query("FIND Record TestRT", unique=True).value) == 1 - assert db.execute_query("FIND Record TestRT", unique=True).value[0] == None + assert db.execute_query("FIND Record TestRT", + unique=True).get_property("TestProp").value == [None] # assert db.execute_query("FIND TestRT WHERE TestProp IS NULL", unique=True).id == r.id r.delete()