def test_autumn_coverage(): # Cover unimportant lines to simplify coverage report. # SQL execution exceptions handling try: Query.execute(db=database, query="syntax error oh yeah") except: pass # L181 # Stop iteration of Cursor object at None to avoid AttributeError, maybe pointless # No idea q = Query(model=UserMock) # Query's __repr__() method repr(q) # Count Query results using cache q.count() # Early return condition check of Model's get() classmethod Model.get() # Early return condition check of Model's _update() instancemethod User()._update()
def test_model_delete(): User.get(1).delete() User.get(2).delete() assert User.get(1) is None assert User.get(2) is None assert list(Query(model=UserMock).where(id=1)) == [] assert list(Query(model=UserMock).where(id=2)) == []
def test_model_pickle(): import cPickle x = cPickle.loads(cPickle.dumps(User.get(1))) x.delete() assert (x.id, x._pk, x.name, x.age) == (1, 1, "John", 25), (x.id, x._pk, x.name, x.age) assert list(Query(model=UserMock).where(id=1)) == []
def test_query_where(): result = data[1:2] assert list(Query(model=UserMock).where(name="John", age=30)) == result assert list( Query(model=UserMock).where(name="John").where(age=30)) == result assert list(Query(model=UserMock).where("name=%s and age=%s", "John", 30)) == result result = data[1:] assert list(Query(model=UserMock).where("age > 29")) == result # Cover condition params being None case result = [(4, None, 15)] cursor = database.cursor() cursor.execute("INSERT INTO `user` (`age`) VALUES (15)") database.commit() assert list(Query(model=UserMock).where(name=None)) == result
def test_model_default_values(): class User(Model): database = database name = "John Doe" u = User().save() assert (u.name, u.age) == ("John Doe", None) assert list(Query(model=UserMock).where(id=4)) == [(4, "John Doe", None)]
def test_query_fetch_result_slice(): assert Query(model=UserMock)[:] == data assert Query(model=UserMock)[:2] == data[:2] assert Query(model=UserMock)[1:2] == data[1:2] assert Query(model=UserMock)[0] == data[0] assert Query(model=UserMock)[2] == data[2] assert Query(model=UserMock)[-1] == data[-1] assert Query(model=UserMock)[-2] == data[-2] # Cover slice start > stop case assert Query(model=UserMock)[2:1] == [], Query(model=UserMock)[2:1] # Cover getting items from cache case q = Query(model=UserMock) assert q[2:1] == [] assert q[:] == []
def test_model_create(): result = (4, "Tom", 50) u = User(*result).save() assert (u.id, u.name, u.age) == result assert list(Query(model=UserMock).where(id=4, name="Tom")) == [result] result = (5, "May", 22) u = User(name="May", id=5, age=22).save() assert (u.id, u.name, u.age) == result assert list(Query(model=UserMock).where(id=5, name="May")) == [result] result = (6, "Paul", 65) u = User(age=65, name="Paul").save() assert (u.id, u.name, u.age) == result assert list(Query(model=UserMock).where(id=6, name="Paul")) == [result] # "utf8mb4" character set required to properly store emoji. # Article below provides backgrounds and detailed migration instruction, # better take a look. # https://mathiasbynens.be/notes/mysql-utf8mb4 result = (7, "😜", 27) u = User(age=27, name="😜").save() assert (u.id, u.name, u.age) == result assert list(Query(model=UserMock).where(id=7, name="😜")) == [result]
def test_query_order_by(): result = list(reversed(data[:2])) assert list( Query(model=UserMock).where(name="John").order_by("id desc")) == result assert list(Query(model=UserMock).where( name="John").order_by("age desc")) == result
def test_query_init(): q = Query(model=UserMock) assert q._model == UserMock assert q._db == database
def test_query_delete(): assert Query(model=UserMock).where(name="Bob").count() == 1 assert Query(model=UserMock).where(name="Bob").delete() == 1 assert Query(model=UserMock).where(name="Bob").count() == 0
def test_query_count(): assert Query(model=UserMock).where(name="John").count() == 2 assert Query(model=UserMock).where( name="John").count("distinct(`name`)") == 1
def test_query_fetch_result_iterator(): for row, result in zip(list(Query(model=UserMock)), data): assert row == result