Ejemplo n.º 1
0
    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"])
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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]
Ejemplo n.º 5
0
    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))
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    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
Ejemplo n.º 9
0
    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]
Ejemplo n.º 10
0
    def test_query(self, setup):
        from valarpy.model import Refs

        refs = list(Refs.select())
        assert [ref.name for ref in refs] == ["ref_four"]
Ejemplo n.º 11
0
    def test_get_data(self, setup):
        from valarpy.model import Refs

        assert Refs(id=1, name="hi").get_data() == dict(id=1, name="hi")
Ejemplo n.º 12
0
    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)