Exemple #1
0
    def test_fetchall_ordered(self, conn):
        repo = Repository(conn, User)
        users = repo.fetch_all_ordered(User.email)
        assert type(users) is list
        assert len(users) == len(rows_users)
        expected_list = []
        for e in rows_users:
            expected_list.append(e['email'])
        expected_list.sort()

        i = 0
        for r in users:
            assert isinstance(r, User)
            assert r.id is not None and type(r.id) is int
            assert r.name is not None and type(r.name) is str and len(
                r.name) > 0
            assert r.email is not None and type(r.email) is str and len(
                r.email) > 0
            assert r.email == expected_list[i]
            i = i + 1
            assert r.active is not None
            if isinstance(conn, PgConnection):
                assert type(r.active) is bool
            elif isinstance(conn, Sqlite3Connection):
                assert type(r.active) is int
Exemple #2
0
 def test_valid_pk(self, conn):
     repo = Repository(conn, User)
     users = repo.fetch_all()
     assert type(users) is list
     assert len(users) == len(rows_users)
     for r in users:
         assert repo.valid_pk(r.id) is True
     assert repo.valid_pk(-1) is False
Exemple #3
0
 def test_insert_pk(self, conn):
     repo = Repository(conn, User)
     result = repo.insert_pk(User(name="Sarah",
                                  email="sarah.connor@skynet"))
     assert isinstance(result, int)
     assert result > 0
     record = repo.fetch_pk(result)
     assert record.name == "Sarah"
Exemple #4
0
    def test_fetch(self, conn):
        repo = Repository(conn, User)
        users = repo.fetch_all()
        assert len(users) == len(rows_users)
        ids = []
        names = []
        for u in users:
            ids.append(u.id)
            names.append(u.name)

        users = repo.fetch(repo.select().where(User.id, '>', -1))
        assert users is not None
        assert len(users) == len(ids)
        for u in users:
            assert u.id in ids

        # test empty result query
        users = repo.fetch(repo.select().where(User.id, '=', -1))
        assert type(users) is list
        assert len(users) == 0

        # test different record class
        users = repo.fetch(repo.select().where(User.id, '>', -1), cls=UserName)
        assert users is not None
        assert len(users) == len(ids)
        for u in users:
            assert isinstance(u, UserName)
            assert u.name in names
Exemple #5
0
    def test_fetch_pk(self, conn):
        repo = Repository(conn, User)
        users = repo.fetch_all()
        assert len(users) == len(rows_users)
        for u in users:
            record = repo.fetch_pk(u.id)
            assert record is not None
            assert record.asdict() == u.asdict()

        record = repo.fetch_pk(-1)
        assert record is None
Exemple #6
0
 def test_exists(self, conn):
     repo = Repository(conn, User)
     users = repo.fetch_all()
     first = None
     for r in users:
         # existing name with different id is False
         assert repo.exists(User.name, r.name, r.id) is False
         if first is None:
             first = r.name
         else:
             # existing name with another id is True
             assert repo.exists(User.name, first, r.id) is True
Exemple #7
0
    def test_update_where(self, conn):
        repo = Repository(conn, User)
        users = repo.fetch_all()
        u = users.pop()  # lets just use the last entry

        # test exception on empty where clauses
        with pytest.raises(RepositoryError):
            repo.update_where(User(name='Pocoyo'), [])
        with pytest.raises(RepositoryError):
            repo.update_where(User(name='Pocoyo'), [()])

        repo.update_where(User(name='Pocoyo'), [(User.login, '=', u.login)])
        record = repo.fetch_pk(u.id)
        assert record.name == 'Pocoyo'
        assert record.login == u.login
Exemple #8
0
 def test_fetchall(self, conn):
     repo = Repository(conn, User)
     users = repo.fetch_all()
     assert type(users) is list
     assert len(users) == len(rows_users)
     for r in users:
         assert isinstance(r, User)
         assert r.id is not None and type(r.id) is int
         assert r.name is not None and type(r.name) is str and len(
             r.name) > 0
         assert r.email is not None and type(r.email) is str and len(
             r.email) > 0
         assert r.active is not None
         if isinstance(conn, PgConnection):
             assert type(r.active) is bool
         elif isinstance(conn, Sqlite3Connection):
             assert type(r.active) is int
Exemple #9
0
    def test_delete_where(self, conn):
        repo = Repository(conn, User)
        result = repo.insert_pk(User(name="Sarah",
                                     email="sarah.connor@skynet"))
        assert isinstance(result, int)
        assert result > 0
        record = repo.fetch_pk(result)
        assert record.name == "Sarah"

        # failed delete, as where doesn't match
        repo.delete_where([(User.id, '=', result), (User.name, '=', 'John')])
        record = repo.fetch_pk(result)
        assert record is not None
        assert record.id == result

        # proper delete
        repo.delete_where([(User.id, '=', result), (User.name, '=', 'Sarah')])
        record = repo.fetch_pk(result)
        assert record is None
Exemple #10
0
    def test_count_where(self, conn):
        repo = Repository(conn, User)
        users = repo.fetch_all()
        assert len(users) == repo.count_where([(User.id, '>', 0)])

        assert repo.count_where([(User.name, 'bilbo')]) == 1
        assert repo.count_where([(User.name, 'John')]) == 0
Exemple #11
0
    def test_fetch_one(self, conn):
        repo = Repository(conn, User)
        users = repo.fetch_all()
        assert len(users) == len(rows_users)
        for u in users:
            record = repo.fetch_one(repo.select().where(User.id, '=', u.id))
            assert record is not None
            assert record.asdict() == u.asdict()

        # if not found, returns None
        record = repo.fetch_one(repo.select().where(User.id, '=', -1))
        assert record is None
Exemple #12
0
    def __init__(self,
                 repo: Repository,
                 search_fields: list = None,
                 search_type: int = None,
                 case_sensitive=False):
        """
        Constructor
        :param repo: Repository to use
        :param search_fields: list of valid field names that can be searched
        :param search_type: one of SEARCH_NONE, SEARCH_ANY, SEARCH_START, SEARCH_END
        :param case_sensitive: if True, search will use LIKE instead of ILIKE
        """
        if not search_fields:
            search_fields = []
        if search_type is None:
            search_type = self.SEARCH_ANY
        else:
            if search_type != self.SEARCH_NONE:
                if search_type not in self.search_map.keys():
                    raise ValueError("search type '%s' is not supported" %
                                     search_type)

        self._repo = repo
        record = repo._record()
        self._fields = record.dbfields()
        self._field_pk = getattr(record, '_pk', None)

        for field in search_fields:
            if field not in self._fields:
                raise ValueError(
                    "search field '%s' does not exist in the Record" % field)

        self._search_type = search_type
        self._search_fields = search_fields
        self._case_sensitive = case_sensitive is True
        self._ilike = repo.dialect().ilike
Exemple #13
0
    def test_list(self, conn):
        repo = Repository(conn, User)
        users = repo.fetch_all()

        qry = repo.select().order(User.id)
        total, rows = repo.list(qry, 1)
        assert total == len(users)
        assert len(rows) == 1
        assert rows[0].name == 'aragorn'

        total, rows = repo.list(qry, 1, 1)
        assert total == len(users)
        assert len(rows) == 1
        assert rows[0].name == 'bilbo'

        qry = repo.select().order(User.id)
        total, rows = repo.list(qry, 2, 2)
        assert total == len(users)
        assert len(rows) == 2
        assert rows[0].name == 'samwise'
        assert rows[1].name == 'gandalf'
Exemple #14
0
    def test_fetch_by_field(self, conn):
        repo = Repository(conn, User)
        users = repo.fetch_all()
        assert len(users) == len(rows_users)
        for u in users:
            # fetch all columns
            records = repo.fetch_by_field(User.id, u.id)
            assert len(records) == 1
            assert records.pop().asdict() == u.asdict()

            # fetch single column
            records = repo.fetch_by_field(User.id, u.id, cols=[User.name])
            assert len(records) == 1
            record = records.pop().asdict()
            assert len(record) == 1
            assert record['name'] == u.name

        # fetch non-existing record
        records = repo.fetch_by_field(User.id, -1)
        assert len(records) == 0
Exemple #15
0
    def test_insert(self, conn):
        repo = Repository(conn, User)
        result = repo.insert(User(name="John", email="john.connor@skynet"))
        assert result is None

        # try to read inserted record
        records = repo.fetch_by_field(User.name, 'John')
        assert len(records) == 1
        record = records.pop()
        assert record.name == 'John'
        assert record.email == 'john.connor@skynet'
        assert record.login is None

        # note: sqlite does not support returning multiple columns
        # it will always return a record with the inserted primary key
        result = repo.insert(User(name="Sarah", email="sarah.connor@skynet"),
                             cols=[User.id])
        assert isinstance(result, User)
        assert result.id > 0
        record = repo.fetch_pk(result.id)
        assert record.name == "Sarah"
Exemple #16
0
 def get_repository(self) -> Repository:
     if self._repo is None:
         self._repo = Repository(self._db, MigrationRecord)
     return self._repo
Exemple #17
0
 def test_fetch_raw(self, conn):
     repo = Repository(conn, User)
     users = repo.fetch_raw(repo.select().where(User.id, '>', 0))
     assert len(users) == len(rows_users)
     for u in users:
         assert len(u['name']) > 0
Exemple #18
0
 def test_create_repository(self, conn):
     repo = Repository(conn, User)
     assert repo._pk == 'id_user'
     assert repo._tablename == 'users'
Exemple #19
0
 def test_count(self, conn):
     repo = Repository(conn, User)
     users = repo.fetch_all()
     assert len(users) == repo.count()
Exemple #20
0
    def test_update(self, conn):
        repo = Repository(conn, User)

        record = User(name='John', email='john.connor@skynet')
        record = repo.insert(record, cols=[User.id])
        assert isinstance(record, User) is True
        id = record.id

        # read inserted record
        record = repo.fetch_pk(id)
        # simple update - pk is in the record
        record.name = 'Sarah'
        repo.update(record)
        record = repo.fetch_pk(id)
        assert record.name == 'Sarah'
        assert record.email == 'john.connor@skynet'

        # try to update without pk
        with pytest.raises(RepositoryError):
            repo.update(User(name='John'))
        # correct update procedure
        repo.update(User(name='John'), pk_value=id)
        record = repo.fetch_pk(id)
        assert record.name == 'John'
        assert record.email == 'john.connor@skynet'
Exemple #21
0
 def test_map_result_id(self, conn):
     repo = Repository(conn, User)
     users = repo.map_result_id(repo.fetch_all())
     assert len(users) == len(rows_users)
     for id, record in users.items():
         assert id == record.id
Exemple #22
0
    def test_fetch_where(self, conn):
        repo = Repository(conn, User)
        # fetch with one condition
        records = repo.fetch_where([(User.name, '=', 'gandalf')])
        assert len(records) == 1
        record = records.pop()
        assert record.name == 'gandalf'

        # fetch with 2 conditions
        records = repo.fetch_where([(User.name, '=', 'gandalf'),
                                    (User.id, 'is not null', None)])
        assert len(records) == 1
        record = records.pop()
        assert record.name == 'gandalf'

        # fetch only some columns
        records = repo.fetch_where([(User.name, '=', 'gandalf')],
                                   cols=[User.id, User.name])
        record = records.pop()
        assert record.name == 'gandalf'
        assert record.id > 0
        assert len(record.asdict()) == 2

        # fetch non-existing record
        records = repo.fetch_where([(User.name, 'like', '%john%')])
        assert len(records) == 0

        # incomplete
        with pytest.raises(RepositoryError):
            repo.fetch_where([(User.name, 'like')])

        # wrong type
        with pytest.raises(RepositoryError):
            repo.fetch_where([({}, 'like')])

        # empty where_list
        with pytest.raises(RepositoryError):
            repo.fetch_where([])