def test_fetch_all(self, setup): from valarpy.model import Refs, ValarLookupError dat = Refs.fetch_all(["ref_four"]) assert [ref.name for ref in dat] == ["ref_four"] with pytest.raises(ValarLookupError): Refs.fetch_all(["ref_four", "ref_three"])
def test_fetch_regex(self, setup): from valarpy.model import Refs assert Refs.fetch_or_none(".*") is None assert Refs.fetch_or_none(".*", like=True) is None ref = Refs.fetch_or_none(".*", regex=True) assert ref is not None and ref.id == 4
def test_fetch_like(self, setup): from valarpy.model import Refs assert Refs.fetch_or_none("four") is None ref = Refs.fetch_or_none("ref_four", like=True) assert ref is not None and ref.id == 4 ref = Refs.fetch_or_none("four", like=True) assert ref is not None and ref.id == 4
def test_list_where(self, setup): from valarpy.model import Refs refs = Refs.list_where(Refs.id > 0) assert [getattr(ref, "id", None) for ref in refs] == [4] # noinspection PyTypeChecker refs = Refs.list_where(name="ref_four") assert [getattr(ref, "id", None) for ref in refs] == [4]
def test_fetch(self, setup): from valarpy.model import Refs, Users, ValarLookupError, ValarTableTypeError ref = Refs.fetch("ref_four") assert ref is not None assert ref.name == "ref_four" with pytest.raises(ValarLookupError): Refs.fetch("ref_three") with pytest.raises(ValarTableTypeError): Refs.fetch(Users(id=1))
def test_cannot_truncate(self): with opened(CONFIG_DATA) as model: model.conn.backend.enable_write() from valarpy.model import Refs try: with pytest.raises(UnsupportedOperationError): Refs.truncate_table() with pytest.raises(UnsupportedOperationError): Refs.drop_table() finally: try: model.conn.backend.disable_write() except Exception: # nosec pass
def test_fetch_or_none(self, setup): from valarpy.model import Refs, Users, ValarTableTypeError assert Refs.fetch_or_none(Refs(id=1)).id == 1 with pytest.raises(ValarTableTypeError): Refs.fetch_or_none(Users(id=1)) with pytest.raises(TypeError): # noinspection PyTypeChecker Refs.fetch_or_none(lambda x: x) ref = Refs.fetch_or_none("ref_four") assert ref is not None assert ref.name == "ref_four" assert Refs.fetch_or_none("non") is None
def test_write_enable_disable(self): key = "test_write_enable_disable" with opened(CONFIG_DATA) as model: backend = model.conn.backend from valarpy.model import Refs try: # first, write is disabled ref = Refs(name=key) with pytest.raises(WriteNotEnabledError): ref.save() assert key not in {r.name for r in Refs.select()} # now enable write backend.enable_write() # saving should work ref.save() assert key in {r.name for r in Refs.select()} # now that we have a row, let's delete it # but first fail: disable write backend.disable_write() with pytest.raises(WriteNotEnabledError): ref.delete_instance() assert key in {r.name for r in Refs.select()} # we didn't delete the row because it errored # now re-enable write and delete the row backend.enable_write() ref.delete_instance() assert key not in {r.name for r in Refs.select()} finally: try: backend.enable_write() Refs.delete().where(Refs.name == key).execute() except Exception: # nosec pass finally: try: backend.disable_write() except Exception: # nosec pass
def test_fetch_all_or_none(self, setup): from valarpy.model import Refs, Users, ValarTableTypeError assert Refs.fetch_all_or_none([]) == [] assert Refs.fetch_all_or_none(["nope"]) == [None] dat = Refs.fetch_all_or_none([4, 20]) assert [getattr(ref, "name", None) for ref in dat] == ["ref_four", None] dat = Refs.fetch_all_or_none(["ref_four", "non"]) assert [getattr(ref, "id", None) for ref in dat] == [4, None] # combined, with duplicates dat = Refs.fetch_all_or_none(["ref_four", "non", 4, "nope"]) assert [getattr(ref, "id", None) for ref in dat] == [4, None, 4, None] # ID, string, and instance, with duplicates dat = Refs.fetch_all_or_none(["ref_four", "non", 4, Refs.fetch(4)]) assert [getattr(ref, "id", None) for ref in dat] == [4, None, 4, 4] with pytest.raises(ValarTableTypeError): Refs.fetch_all_or_none([Users(id=1)]) with pytest.raises(TypeError): # noinspection PyTypeChecker Refs.fetch_all_or_none([lambda x: x]) # with a join fn dat = Refs.fetch_all_or_none(["ref_four"], join_fn=lambda s: s) assert [getattr(ref, "id", None) for ref in dat] == [4] dat = Refs.fetch_all_or_none([Refs.fetch(4)], join_fn=lambda s: s) assert [getattr(ref, "id", None) for ref in dat] == [4]
def test_query(self, setup): from valarpy.model import Refs refs = list(Refs.select()) assert [ref.name for ref in refs] == ["ref_four"]
def test_get_data(self, setup): from valarpy.model import Refs assert Refs(id=1, name="hi").get_data() == dict(id=1, name="hi")
def test_fetch_to_query(self, setup): from valarpy.model import Refs query = Refs.select().where(Refs.fetch_to_query(4)[0]) assert [getattr(ref, "id", None) for ref in query] == [4] query = Refs.select().where(Refs.fetch_to_query([4, 4])[0]) assert [getattr(ref, "id", None) for ref in query] == [4] query = Refs.select().where(Refs.fetch_to_query(Refs.id > 0)[0]) assert [getattr(ref, "id", None) for ref in query] == [4] query = Refs.select().where(Refs.fetch_to_query([Refs.id > 0])[0]) assert [getattr(ref, "id", None) for ref in query] == [4] query = Refs.select().where(Refs.fetch_to_query([Refs.id > 0, Refs.id > 1])[0]) assert [getattr(ref, "id", None) for ref in query] == [4] query = Refs.select().where(Refs.fetch_to_query([Refs.id > 10])[0]) assert [getattr(ref, "id", None) for ref in query] == [] query = Refs.select().where(Refs.fetch_to_query(Refs.fetch(4))) assert [getattr(ref, "id", None) for ref in query] == [4] query = Refs.select().where(Refs.fetch_to_query(4)) assert [getattr(ref, "id", None) for ref in query] == [4] # test AND wheres = Refs.fetch_to_query([Refs.id > 0, Refs.id > 10]) query = Refs.select() for where in wheres: query = query.where(where) assert [getattr(ref, "id", None) for ref in query] == [] # test bad queries with pytest.raises(TypeError): # noinspection PyTypeChecker Refs.fetch_to_query([lambda x: x]) with pytest.raises(TypeError): # noinspection PyTypeChecker Refs.fetch_to_query(lambda x: x)