mirror of
https://github.com/coleifer/peewee.git
synced 2026-05-06 07:56:41 -04:00
Standardize test skipping implementation.
This commit is contained in:
+12
-24
@@ -254,34 +254,22 @@ def requires_models(*models):
|
||||
return decorator
|
||||
|
||||
|
||||
def skip_if(expr):
|
||||
def skip_if(expr, reason='n/a'):
|
||||
def decorator(method):
|
||||
@wraps(method)
|
||||
def inner(self):
|
||||
should_skip = expr() if callable(expr) else expr
|
||||
if not should_skip:
|
||||
return method(self)
|
||||
elif VERBOSITY > 1:
|
||||
print('Skipping %s test.' % method.__name__)
|
||||
return inner
|
||||
return unittest.skipIf(expr, reason)(method)
|
||||
return decorator
|
||||
|
||||
|
||||
def skip_unless(expr):
|
||||
return skip_if((lambda: not expr()) if callable(expr) else not expr)
|
||||
|
||||
|
||||
def skip_case_if(expr):
|
||||
def decorator(klass):
|
||||
should_skip = expr() if callable(expr) else expr
|
||||
if not should_skip:
|
||||
return klass
|
||||
elif VERBOSITY > 1:
|
||||
print('Skipping %s test.' % klass.__name__)
|
||||
class Dummy(object): pass
|
||||
return Dummy
|
||||
def skip_unless(expr, reason='n/a'):
|
||||
def decorator(method):
|
||||
return unittest.skipUnless(expr, reason)(method)
|
||||
return decorator
|
||||
|
||||
def requires_sqlite(method):
|
||||
return skip_unless(IS_SQLITE, 'requires sqlite')(method)
|
||||
|
||||
def skip_case_unless(expr):
|
||||
return skip_case_if((lambda: not expr()) if callable(expr) else not expr)
|
||||
def requires_mysql(method):
|
||||
return skip_unless(IS_MYSQL, 'requires mysql')(method)
|
||||
|
||||
def requires_postgresql(method):
|
||||
return skip_unless(IS_POSTGRESQL, 'requires postgresql')(method)
|
||||
|
||||
+2
-2
@@ -19,7 +19,7 @@ from .base import db
|
||||
from .base import db_loader
|
||||
from .base import get_in_memory_db
|
||||
from .base import requires_models
|
||||
from .base import skip_case_unless
|
||||
from .base import requires_postgresql
|
||||
from .base_models import Category
|
||||
from .base_models import Tweet
|
||||
from .base_models import User
|
||||
@@ -287,7 +287,7 @@ class CatToy(TestModel):
|
||||
schema = 'huey'
|
||||
|
||||
|
||||
@skip_case_unless(isinstance(db, PostgresqlDatabase))
|
||||
@requires_postgresql
|
||||
class TestSchemaNamespace(ModelTestCase):
|
||||
requires = [CatToy]
|
||||
|
||||
|
||||
+2
-3
@@ -14,8 +14,7 @@ from .base import ModelTestCase
|
||||
from .base import TestModel
|
||||
from .base import db
|
||||
from .base import requires_models
|
||||
from .base import skip_if
|
||||
from .base import skip_unless
|
||||
from .base import requires_sqlite
|
||||
from .base_models import Tweet
|
||||
from .base_models import User
|
||||
|
||||
@@ -551,7 +550,7 @@ class TestFieldValueHandling(ModelTestCase):
|
||||
self.assertEqual(item.price, '10')
|
||||
self.assertEqual(item.multiplier, '1.1')
|
||||
|
||||
@skip_unless(IS_SQLITE)
|
||||
@requires_sqlite
|
||||
@requires_models(Bare)
|
||||
def test_bare_model_adapt(self):
|
||||
b1 = Bare.create(key='k1', value=1)
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ from .base import IS_SQLITE
|
||||
from .base import ModelTestCase
|
||||
from .base import TestModel
|
||||
from .base import db
|
||||
from .base import skip_unless
|
||||
from .base import requires_sqlite
|
||||
|
||||
|
||||
class Package(TestModel):
|
||||
@@ -423,7 +423,7 @@ class TestForeignKeyConstraints(ModelTestCase):
|
||||
with self.database.atomic():
|
||||
Note.create(user=max_id + 1, content='test')
|
||||
|
||||
@skip_unless(IS_SQLITE)
|
||||
@requires_sqlite
|
||||
def test_disable_constraint(self):
|
||||
self.set_foreign_key_pragma(False)
|
||||
Note.create(user=0, content='test')
|
||||
|
||||
+1
-1
@@ -60,7 +60,7 @@ class TestKeyValue(DatabaseTestCase):
|
||||
KV.clear()
|
||||
self.assertEqual(len(KV), 0)
|
||||
|
||||
@skip_if(IS_POSTGRESQL)
|
||||
@skip_if(IS_POSTGRESQL, 'requires replace support')
|
||||
def test_update(self):
|
||||
KV = self.create_kv()
|
||||
KV.update(k1='v1', k2='v2', k3='v3')
|
||||
|
||||
+7
-8
@@ -6,12 +6,11 @@ from peewee import *
|
||||
from playhouse.migrate import *
|
||||
from .base import BaseTestCase
|
||||
from .base import IS_MYSQL
|
||||
from .base import IS_SQLITE
|
||||
from .base import ModelTestCase
|
||||
from .base import TestModel
|
||||
from .base import db
|
||||
from .base import requires_models
|
||||
from .base import skip_unless
|
||||
from .base import requires_sqlite
|
||||
|
||||
try:
|
||||
from psycopg2cffi import compat
|
||||
@@ -498,7 +497,7 @@ class TestSchemaMigration(ModelTestCase):
|
||||
self.assertEqual(foreign_key.dest_column, 'id')
|
||||
self.assertEqual(foreign_key.dest_table, 'users')
|
||||
|
||||
@skip_unless(IS_SQLITE)
|
||||
@requires_sqlite
|
||||
def test_valid_column_required(self):
|
||||
self.assertRaises(
|
||||
ValueError,
|
||||
@@ -510,7 +509,7 @@ class TestSchemaMigration(ModelTestCase):
|
||||
migrate,
|
||||
self.migrator.rename_column('page', 'xx', 'yy'))
|
||||
|
||||
@skip_unless(IS_SQLITE)
|
||||
@requires_sqlite
|
||||
@requires_models(IndexModel)
|
||||
def test_table_case_insensitive(self):
|
||||
migrate(self.migrator.drop_column('PaGe', 'name'))
|
||||
@@ -527,7 +526,7 @@ class TestSchemaMigration(ModelTestCase):
|
||||
self.assertEqual(len(indexes), 1)
|
||||
self.assertEqual(indexes[0].name, 'indexmodel_data')
|
||||
|
||||
@skip_unless(IS_SQLITE)
|
||||
@requires_sqlite
|
||||
@requires_models(IndexModel)
|
||||
def test_add_column_indexed_table(self):
|
||||
# Ensure that columns can be added to tables that have indexes.
|
||||
@@ -545,7 +544,7 @@ class TestSchemaMigration(ModelTestCase):
|
||||
[('indexmodel_data', ['data']),
|
||||
('indexmodel_first_name_last_name', ['first_name', 'last_name'])])
|
||||
|
||||
@skip_unless(IS_SQLITE)
|
||||
@requires_sqlite
|
||||
def test_rename_column_to_table_name(self):
|
||||
db = self.migrator.database
|
||||
columns = lambda: sorted(col.name for col in db.get_columns('page'))
|
||||
@@ -570,7 +569,7 @@ class TestSchemaMigration(ModelTestCase):
|
||||
self.assertEqual(columns(), orig_columns)
|
||||
self.assertEqual(indexes(), orig_indexes)
|
||||
|
||||
@skip_unless(IS_SQLITE)
|
||||
@requires_sqlite
|
||||
@requires_models(Category)
|
||||
def test_add_fk_with_constraints(self):
|
||||
self.reset_sql_history()
|
||||
@@ -586,7 +585,7 @@ class TestSchemaMigration(ModelTestCase):
|
||||
'INTEGER REFERENCES "category" ("id") ON DELETE SET NULL', []),
|
||||
])
|
||||
|
||||
@skip_unless(IS_SQLITE)
|
||||
@requires_sqlite
|
||||
@requires_models(IndexModel)
|
||||
def test_index_preservation(self):
|
||||
self.reset_sql_history()
|
||||
|
||||
+23
-22
@@ -12,7 +12,8 @@ from .base import get_in_memory_db
|
||||
from .base import mock
|
||||
from .base import new_connection
|
||||
from .base import requires_models
|
||||
from .base import skip_case_unless
|
||||
from .base import requires_mysql
|
||||
from .base import requires_postgresql
|
||||
from .base import skip_if
|
||||
from .base import skip_unless
|
||||
from .base import BaseTestCase
|
||||
@@ -625,8 +626,8 @@ class TestModelAPIs(ModelTestCase):
|
||||
('purr', 'huey'),
|
||||
('hiss', 'huey')])
|
||||
|
||||
@requires_models(User, Tweet)
|
||||
@skip_if(IS_SQLITE_OLD or (IS_MYSQL and not IS_MYSQL_ADVANCED_FEATURES))
|
||||
@requires_models(User, Tweet)
|
||||
def test_join_subquery_cte(self):
|
||||
self._create_user_tweets()
|
||||
|
||||
@@ -661,8 +662,8 @@ class TestModelAPIs(ModelTestCase):
|
||||
self.assertEqual(tweet.user.id, huey.id)
|
||||
self.assertEqual(tweet.user.username, 'huey')
|
||||
|
||||
@skip_if(IS_SQLITE and not IS_SQLITE_9, 'requires sqlite >= 3.9')
|
||||
@requires_models(Register)
|
||||
@skip_if(IS_SQLITE and not IS_SQLITE_9)
|
||||
def test_compound_select(self):
|
||||
for i in range(10):
|
||||
Register.create(value=i)
|
||||
@@ -1302,7 +1303,7 @@ class TestJoinModelAlias(ModelTestCase):
|
||||
self.assertEqual(data, [('meow', 'huey'), ('purr', 'huey')])
|
||||
|
||||
|
||||
@skip_case_unless(IS_POSTGRESQL or IS_MYSQL_ADVANCED_FEATURES)
|
||||
@skip_unless(IS_POSTGRESQL or IS_MYSQL_ADVANCED_FEATURES, 'window queries')
|
||||
class TestWindowFunctionIntegration(ModelTestCase):
|
||||
requires = [Sample]
|
||||
|
||||
@@ -1463,7 +1464,7 @@ class TestWindowFunctionIntegration(ModelTestCase):
|
||||
(3, 100., 104.)])
|
||||
|
||||
|
||||
@skip_case_unless(IS_POSTGRESQL)
|
||||
@requires_postgresql
|
||||
class TestForUpdateIntegration(ModelTestCase):
|
||||
requires = [User]
|
||||
|
||||
@@ -1529,7 +1530,7 @@ class ServerDefault(TestModel):
|
||||
timestamp = DateTimeField(constraints=[SQL('default (now())')])
|
||||
|
||||
|
||||
@skip_case_unless(IS_POSTGRESQL)
|
||||
@requires_postgresql
|
||||
class TestReturningIntegration(ModelTestCase):
|
||||
requires = [User]
|
||||
|
||||
@@ -1703,8 +1704,8 @@ class TestCTEIntegration(ModelTestCase):
|
||||
c12 = CC(name='c12', parent=p1)
|
||||
c31 = CC(name='c31', parent=p3)
|
||||
|
||||
@requires_models(Member)
|
||||
@skip_if(IS_SQLITE_OLD or (IS_MYSQL and not IS_MYSQL_ADVANCED_FEATURES))
|
||||
@requires_models(Member)
|
||||
def test_docs_example(self):
|
||||
f = Member.create(name='founder')
|
||||
gen2_1 = Member.create(name='g2-1', recommendedby=f)
|
||||
@@ -1795,7 +1796,7 @@ class TestCTEIntegration(ModelTestCase):
|
||||
('p3', 'root'),
|
||||
])
|
||||
|
||||
@skip_if(IS_SQLITE_OLD or IS_MYSQL)
|
||||
@skip_if(IS_SQLITE_OLD or IS_MYSQL, 'requires recursive cte support')
|
||||
def test_recursive_cte(self):
|
||||
def get_parents(cname):
|
||||
C1 = Category.alias()
|
||||
@@ -1856,7 +1857,7 @@ class TestCTEIntegration(ModelTestCase):
|
||||
data = [(r.name, r.level, r.path) for r in query]
|
||||
self.assertEqual(data, [('root', 1, 'root')])
|
||||
|
||||
@skip_if(IS_SQLITE_OLD or IS_MYSQL)
|
||||
@skip_if(IS_SQLITE_OLD or IS_MYSQL, 'requires recursive cte support')
|
||||
def test_recursive_cte2(self):
|
||||
hierarchy = (Category
|
||||
.select(Category.name, Value(0).alias('level'))
|
||||
@@ -1882,7 +1883,7 @@ class TestCTEIntegration(ModelTestCase):
|
||||
('root', 0)])
|
||||
|
||||
|
||||
@skip_case_unless(IS_POSTGRESQL or IS_SQLITE_15)
|
||||
@skip_unless(IS_POSTGRESQL or IS_SQLITE_15, 'requires row-value support')
|
||||
class TestTupleComparison(ModelTestCase):
|
||||
requires = [User]
|
||||
|
||||
@@ -2096,7 +2097,7 @@ class TestFieldInheritance(BaseTestCase):
|
||||
self.assertTrue(Category.itemb_set.rel_model is ItemB)
|
||||
self.assertTrue(Category.itemb_set.model is Category)
|
||||
|
||||
@skip_if(IS_SQLITE)
|
||||
@skip_if(IS_SQLITE, 'sqlite is not supported')
|
||||
def test_deferred_fk_creation(self):
|
||||
class B(TestModel):
|
||||
a = DeferredForeignKey('A', null=True)
|
||||
@@ -2405,7 +2406,7 @@ class OnConflictTestCase(ModelTestCase):
|
||||
self.assertData(list(self.test_data))
|
||||
|
||||
|
||||
@skip_case_unless(IS_MYSQL)
|
||||
@requires_mysql
|
||||
class TestUpsertMySQL(OnConflictTestCase):
|
||||
def test_replace(self):
|
||||
# Unique constraint on first/last would fail - replace.
|
||||
@@ -2499,7 +2500,7 @@ class TestUpsertSqlite(OnConflictTestCase):
|
||||
('z', 'cat', '124'),
|
||||
('b', 'cat', '125')])
|
||||
|
||||
@skip_if(IS_SQLITE_24)
|
||||
@skip_if(IS_SQLITE_24, 'requires sqlite < 3.24')
|
||||
def test_no_preserve_update_where(self):
|
||||
# Ensure on SQLite < 3.24 we cannot update or preserve values.
|
||||
base = Emp.insert(first='foo', last='bar', empno='125')
|
||||
@@ -2513,7 +2514,7 @@ class TestUpsertSqlite(OnConflictTestCase):
|
||||
where = base.on_conflict(where=(Emp.id > 10))
|
||||
self.assertRaises(ValueError, where.execute)
|
||||
|
||||
@skip_unless(IS_SQLITE_24)
|
||||
@skip_unless(IS_SQLITE_24, 'requires sqlite >= 3.24')
|
||||
def test_update_meets_requirements(self):
|
||||
# Ensure that on >= 3.24 any updates meet the minimum criteria.
|
||||
base = Emp.insert(first='foo', last='bar', empno='125')
|
||||
@@ -2526,7 +2527,7 @@ class TestUpsertSqlite(OnConflictTestCase):
|
||||
no_conflict_target = base.on_conflict(update={Emp.empno: '125.1'})
|
||||
self.assertRaises(ValueError, no_conflict_target.execute)
|
||||
|
||||
@skip_unless(IS_SQLITE_24)
|
||||
@skip_unless(IS_SQLITE_24, 'requires sqlite >= 3.24')
|
||||
def test_update(self):
|
||||
# Conflict on empno - we'll preserve name and update the ID. This will
|
||||
# overwrite the previous row and set a new ID.
|
||||
@@ -2556,8 +2557,8 @@ class TestUpsertSqlite(OnConflictTestCase):
|
||||
('zaizee', 'cat', '124'),
|
||||
('foo', 'baze', '125.1')])
|
||||
|
||||
@skip_unless(IS_SQLITE_24, 'requires sqlite >= 3.24')
|
||||
@requires_models(OCTest)
|
||||
@skip_unless(IS_SQLITE_24)
|
||||
def test_update_atomic(self):
|
||||
# Add a new row with the given "a" value. If a conflict occurs,
|
||||
# re-insert with b=b+2.
|
||||
@@ -2581,8 +2582,8 @@ class TestUpsertSqlite(OnConflictTestCase):
|
||||
self.assertEqual(obj.a, 'foo')
|
||||
self.assertEqual(obj.b, 3)
|
||||
|
||||
@skip_unless(IS_SQLITE_24, 'requires sqlite >= 3.24')
|
||||
@requires_models(OCTest)
|
||||
@skip_unless(IS_SQLITE_24)
|
||||
def test_update_where_clause(self):
|
||||
# Add a new row with the given "a" value. If a conflict occurs,
|
||||
# re-insert with b=b+2 so long as the original b < 3.
|
||||
@@ -2616,7 +2617,7 @@ class TestUpsertSqlite(OnConflictTestCase):
|
||||
self.assertEqual(obj.a, 'foo')
|
||||
self.assertEqual(obj.b, 3)
|
||||
|
||||
@skip_unless(IS_SQLITE_24)
|
||||
@skip_unless(IS_SQLITE_24, 'requires sqlite >= 3.24')
|
||||
def test_do_nothing(self):
|
||||
query = (Emp
|
||||
.insert(first='foo', last='bar', empno='123')
|
||||
@@ -2629,7 +2630,7 @@ class TestUpsertSqlite(OnConflictTestCase):
|
||||
self.assertData(list(self.test_data))
|
||||
|
||||
|
||||
@skip_case_unless(IS_POSTGRESQL)
|
||||
@requires_postgresql
|
||||
class TestUpsertPostgresql(OnConflictTestCase):
|
||||
def test_update(self):
|
||||
# Conflict on empno - we'll preserve name and update the ID. This will
|
||||
@@ -2798,8 +2799,8 @@ class TestGithub1354(ModelTestCase):
|
||||
|
||||
|
||||
class TestCountUnionRegression(ModelTestCase):
|
||||
@requires_mysql
|
||||
@requires_models(User)
|
||||
@skip_if(IS_MYSQL)
|
||||
def test_count_union(self):
|
||||
with self.database.atomic():
|
||||
for i in range(5):
|
||||
@@ -2971,7 +2972,7 @@ class SequenceModel(TestModel):
|
||||
key = TextField()
|
||||
|
||||
|
||||
@skip_case_unless(IS_POSTGRESQL)
|
||||
@requires_postgresql
|
||||
class TestSequence(ModelTestCase):
|
||||
requires = [SequenceModel]
|
||||
|
||||
@@ -2994,7 +2995,7 @@ class TestSequence(ModelTestCase):
|
||||
self.assertEqual(s3.seq_id, 3)
|
||||
|
||||
|
||||
@skip_case_unless(IS_POSTGRESQL)
|
||||
@requires_postgresql
|
||||
class TestUpdateFrom(ModelTestCase):
|
||||
requires = [User]
|
||||
|
||||
|
||||
+2
-3
@@ -2,11 +2,10 @@ import datetime
|
||||
|
||||
from peewee import *
|
||||
|
||||
from .base import IS_MYSQL
|
||||
from .base import ModelTestCase
|
||||
from .base import TestModel
|
||||
from .base import db_loader
|
||||
from .base import skip_case_unless
|
||||
from .base import requires_mysql
|
||||
|
||||
|
||||
mysql_ext_db = db_loader('mysqlconnector')
|
||||
@@ -24,7 +23,7 @@ class Note(TestModel):
|
||||
timestamp = DateTimeField(default=datetime.datetime.now)
|
||||
|
||||
|
||||
@skip_case_unless(IS_MYSQL)
|
||||
@requires_mysql
|
||||
class TestMySQLConnector(ModelTestCase):
|
||||
requires = [Person, Note]
|
||||
|
||||
|
||||
+5
-9
@@ -9,7 +9,7 @@ from .base import BaseTestCase
|
||||
from .base import ModelTestCase
|
||||
from .base import TestModel
|
||||
from .base import db_loader
|
||||
from .base import skip_case_if
|
||||
from .base import skip_unless
|
||||
from .base_models import Register
|
||||
|
||||
|
||||
@@ -536,18 +536,14 @@ class BaseJsonFieldTestCase(object):
|
||||
self.assertItems((self.M.data['k2']['xxx'] == 'v1'))
|
||||
|
||||
|
||||
def json_ok():
|
||||
if JsonModel is None:
|
||||
return False
|
||||
return pg93()
|
||||
|
||||
|
||||
def pg93():
|
||||
with db:
|
||||
return db.connection().server_version >= 90300
|
||||
|
||||
JSON_SUPPORT = (JsonModel is not None) and pg93()
|
||||
|
||||
@skip_case_if(lambda: not json_ok())
|
||||
|
||||
@skip_unless(JSON_SUPPORT, 'json support unavailable')
|
||||
class TestJsonField(BaseJsonFieldTestCase, ModelTestCase):
|
||||
M = JsonModel
|
||||
database = db
|
||||
@@ -567,7 +563,7 @@ class TestJsonField(BaseJsonFieldTestCase, ModelTestCase):
|
||||
self.assertEqual(query.get(), tjn)
|
||||
|
||||
|
||||
@skip_case_if(lambda: not json_ok())
|
||||
@skip_unless(JSON_SUPPORT, 'json support unavailable')
|
||||
class TestBinaryJsonField(BaseJsonFieldTestCase, ModelTestCase):
|
||||
M = BJson
|
||||
database = db
|
||||
|
||||
@@ -14,7 +14,7 @@ from .base import ModelTestCase
|
||||
from .base import TestModel
|
||||
from .base import db_loader
|
||||
from .base import mock
|
||||
from .base import skip_case_if
|
||||
from .base import skip_if
|
||||
|
||||
|
||||
db = db_loader('sqlite')
|
||||
@@ -173,7 +173,6 @@ class TestPwiz(BasePwizTestCase):
|
||||
'# Peewee version: %s') % (cmdline, db.database, peewee_version))
|
||||
|
||||
|
||||
@skip_case_if(lambda: sys.version_info[:2] < (2, 7))
|
||||
class TestPwizOrdered(BasePwizTestCase):
|
||||
requires = [User, Note]
|
||||
|
||||
|
||||
+4
-7
@@ -4,13 +4,10 @@ import re
|
||||
from peewee import *
|
||||
from playhouse.reflection import *
|
||||
|
||||
from .base import IS_MYSQL
|
||||
from .base import IS_POSTGRESQL
|
||||
from .base import IS_SQLITE
|
||||
from .base import ModelTestCase
|
||||
from .base import TestModel
|
||||
from .base import db
|
||||
from .base import skip_unless
|
||||
from .base import requires_sqlite
|
||||
|
||||
|
||||
class ColTypes(TestModel):
|
||||
@@ -116,7 +113,7 @@ class TestReflection(BaseReflectionTestCase):
|
||||
self.assertEqual(relmodel.col_types_nullable.rel_model,
|
||||
models['coltypes'])
|
||||
|
||||
@skip_unless(IS_SQLITE)
|
||||
@requires_sqlite
|
||||
def test_generate_models_indexes(self):
|
||||
models = self.introspector.generate_models()
|
||||
|
||||
@@ -143,7 +140,7 @@ class TestReflection(BaseReflectionTestCase):
|
||||
'foobarbaz'])
|
||||
self.assertEqual(sorted(models.keys()), ['category', 'coltypes'])
|
||||
|
||||
@skip_unless(IS_SQLITE)
|
||||
@requires_sqlite
|
||||
def test_sqlite_fk_re(self):
|
||||
user_id_tests = [
|
||||
'FOREIGN KEY("user_id") REFERENCES "users"("id")',
|
||||
@@ -427,7 +424,7 @@ class EventLog(TestModel):
|
||||
class TestReflectDefaultValues(BaseReflectionTestCase):
|
||||
requires = [EventLog]
|
||||
|
||||
@skip_unless(IS_SQLITE)
|
||||
@requires_sqlite
|
||||
def test_default_values(self):
|
||||
models = self.introspector.generate_models()
|
||||
eventlog = models['eventlog']
|
||||
|
||||
+4
-6
@@ -4,12 +4,10 @@ from peewee import *
|
||||
from peewee import Expression
|
||||
|
||||
from .base import BaseTestCase
|
||||
from .base import IS_MYSQL
|
||||
from .base import IS_POSTGRESQL
|
||||
from .base import IS_SQLITE
|
||||
from .base import TestModel
|
||||
from .base import db
|
||||
from .base import skip_unless
|
||||
from .base import requires_mysql
|
||||
from .base import requires_sqlite
|
||||
|
||||
|
||||
User = Table('users')
|
||||
@@ -444,7 +442,7 @@ class TestInsertQuery(BaseTestCase):
|
||||
'INSERT INTO "users" ("admin", "superuser", "username") '
|
||||
'VALUES (?, ?, ?)'), [True, False, 'charlie'])
|
||||
|
||||
@skip_unless(IS_SQLITE)
|
||||
@requires_sqlite
|
||||
def test_replace_sqlite(self):
|
||||
query = User.replace({
|
||||
User.c.username: 'charlie',
|
||||
@@ -453,7 +451,7 @@ class TestInsertQuery(BaseTestCase):
|
||||
'INSERT OR REPLACE INTO "users" ("superuser", "username") '
|
||||
'VALUES (?, ?)'), [False, 'charlie'])
|
||||
|
||||
@skip_unless(IS_MYSQL)
|
||||
@requires_mysql
|
||||
def test_replace_mysql(self):
|
||||
query = User.replace({
|
||||
User.c.username: 'charlie',
|
||||
|
||||
+13
-11
@@ -11,8 +11,8 @@ from .base import IS_SQLITE_9
|
||||
from .base import ModelTestCase
|
||||
from .base import TestModel
|
||||
from .base import requires_models
|
||||
from .base import skip_case_unless
|
||||
from .base import skip_if
|
||||
from .base import skip_unless
|
||||
from .sqlite_helpers import json_installed
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ class Split(TableFunction):
|
||||
raise StopIteration
|
||||
|
||||
|
||||
@skip_case_unless(IS_SQLITE_9)
|
||||
@skip_unless(IS_SQLITE_9, 'requires sqlite >= 3.9')
|
||||
class TestTableFunction(BaseTestCase):
|
||||
def setUp(self):
|
||||
super(TestTableFunction, self).setUp()
|
||||
@@ -313,7 +313,7 @@ class TestTableFunction(BaseTestCase):
|
||||
])
|
||||
|
||||
|
||||
@skip_case_unless(json_installed)
|
||||
@skip_unless(json_installed(), 'requires sqlite json1')
|
||||
class TestJSONField(ModelTestCase):
|
||||
database = database
|
||||
requires = [APIData, Metadata]
|
||||
@@ -872,7 +872,7 @@ class TestFullTextSearch(ModelTestCase):
|
||||
(2, 0.85)])
|
||||
|
||||
|
||||
@skip_case_unless(CYTHON_EXTENSION)
|
||||
@skip_unless(CYTHON_EXTENSION, 'requires sqlite c extension')
|
||||
class TestFullTextSearchCython(TestFullTextSearch):
|
||||
database = SqliteExtDatabase(':memory:', c_extensions=CYTHON_EXTENSION)
|
||||
|
||||
@@ -930,7 +930,7 @@ class TestFullTextSearchCython(TestFullTextSearch):
|
||||
(0.049, 'Faith consists')], sort_cleaned=True)
|
||||
|
||||
|
||||
@skip_case_unless(CYTHON_EXTENSION)
|
||||
@skip_unless(CYTHON_EXTENSION, 'requires sqlite c extension')
|
||||
class TestMurmurHash(ModelTestCase):
|
||||
database = SqliteExtDatabase(':memory:', c_extensions=CYTHON_EXTENSION,
|
||||
hash_functions=True)
|
||||
@@ -948,7 +948,7 @@ class TestMurmurHash(ModelTestCase):
|
||||
self.assertHash('this is a test of a longer string', 2569735385)
|
||||
self.assertHash(None, None)
|
||||
|
||||
@skip_if(sys.version_info[0] == 3)
|
||||
@skip_if(sys.version_info[0] == 3, 'requres python 2')
|
||||
def test_checksums(self):
|
||||
self.assertHash('testkey', -225678656, 'crc32')
|
||||
self.assertHash('murmur', 1507884895, 'crc32')
|
||||
@@ -1125,7 +1125,7 @@ class BaseExtModel(TestModel):
|
||||
database = database
|
||||
|
||||
|
||||
@skip_case_unless(CLOSURE_EXTENSION)
|
||||
@skip_unless(CLOSURE_EXTENSION, 'requires closure table extension')
|
||||
class TestTransitiveClosureManyToMany(BaseTestCase):
|
||||
def setUp(self):
|
||||
super(TestTransitiveClosureManyToMany, self).setUp()
|
||||
@@ -1180,7 +1180,8 @@ class TestTransitiveClosureManyToMany(BaseTestCase):
|
||||
assertPeople(PC.siblings(z), [])
|
||||
|
||||
|
||||
@skip_case_unless(CLOSURE_EXTENSION and os.path.exists(CLOSURE_EXTENSION))
|
||||
@skip_unless(CLOSURE_EXTENSION and os.path.exists(CLOSURE_EXTENSION),
|
||||
'requires closure extension')
|
||||
class TestTransitiveClosureIntegration(BaseTestCase):
|
||||
tree = {
|
||||
'books': [
|
||||
@@ -1371,7 +1372,7 @@ class TestTransitiveClosureIntegration(BaseTestCase):
|
||||
database.drop_tables([Node, NodeClosure])
|
||||
|
||||
|
||||
@skip_case_unless(FTS5Model.fts5_installed)
|
||||
@skip_unless(FTS5Model.fts5_installed(), 'requires fts5')
|
||||
class TestFTS5(ModelTestCase):
|
||||
database = database
|
||||
requires = [FTS5Test]
|
||||
@@ -1460,7 +1461,8 @@ class KVI(LSMTable):
|
||||
filename = 'test_lsm.ldb'
|
||||
|
||||
|
||||
@skip_case_unless(LSM_EXTENSION and os.path.exists(LSM_EXTENSION))
|
||||
@skip_unless(LSM_EXTENSION and os.path.exists(LSM_EXTENSION),
|
||||
'requires lsm1 sqlite extension')
|
||||
class TestLSM1Extension(BaseTestCase):
|
||||
def setUp(self):
|
||||
super(TestLSM1Extension, self).setUp()
|
||||
@@ -1585,7 +1587,7 @@ class TestLSM1Extension(BaseTestCase):
|
||||
self.assertEqual(keys, [96, 97, 98, 99])
|
||||
|
||||
|
||||
@skip_case_unless(json_installed)
|
||||
@skip_unless(json_installed(), 'requires json1 sqlite extension')
|
||||
class TestJsonContains(ModelTestCase):
|
||||
database = SqliteExtDatabase(':memory:', json_contains=True)
|
||||
requires = [KeyData]
|
||||
|
||||
+8
-13
@@ -2,11 +2,6 @@ import datetime
|
||||
import json
|
||||
import random
|
||||
|
||||
try:
|
||||
import vtfunc
|
||||
except ImportError:
|
||||
vtfunc = None
|
||||
|
||||
from peewee import *
|
||||
from peewee import sqlite3
|
||||
from playhouse.sqlite_ext import SqliteExtDatabase
|
||||
@@ -16,8 +11,11 @@ from .base import IS_SQLITE_9
|
||||
from .base import ModelTestCase
|
||||
from .base import TestModel
|
||||
from .base import db_loader
|
||||
from .base import skip_case_unless
|
||||
from .base import skip_unless
|
||||
try:
|
||||
from playhouse import _sqlite_ext as cython_ext
|
||||
except ImportError:
|
||||
cython_ext = None
|
||||
try:
|
||||
from playhouse import _sqlite_udf as cython_udf
|
||||
except ImportError:
|
||||
@@ -25,11 +23,8 @@ except ImportError:
|
||||
|
||||
|
||||
def requires_cython(method):
|
||||
return skip_unless(lambda: cython_udf is not None)(method)
|
||||
|
||||
def requires_vtfunc(testcase):
|
||||
return skip_case_unless(lambda: vtfunc is not None)(testcase)
|
||||
|
||||
return skip_unless(cython_udf is not None,
|
||||
'requires sqlite udf c extension')(method)
|
||||
|
||||
database = db_loader('sqlite')
|
||||
register_all(database)
|
||||
@@ -320,7 +315,7 @@ class TestScalarFunctions(BaseTestUDF):
|
||||
('a.b.c.peewee', 1),
|
||||
('a.charlesleifer.com', 1)])
|
||||
|
||||
@skip_unless(IS_SQLITE_9)
|
||||
@skip_unless(IS_SQLITE_9, 'requires sqlite >= 3.9')
|
||||
def test_toggle(self):
|
||||
self.assertEqual(self.sql1('select toggle(?)', 'foo'), 1)
|
||||
self.assertEqual(self.sql1('select toggle(?)', 'bar'), 1)
|
||||
@@ -422,7 +417,7 @@ class TestScalarFunctions(BaseTestUDF):
|
||||
'hey foo')
|
||||
|
||||
|
||||
@requires_vtfunc
|
||||
@skip_unless(cython_ext is not None, 'requires sqlite c extension')
|
||||
class TestVirtualTableFunctions(ModelTestCase):
|
||||
database = database
|
||||
requires = MODELS
|
||||
|
||||
+2
-2
@@ -19,7 +19,7 @@ from playhouse.sqliteq import WriterPaused
|
||||
from .base import BaseTestCase
|
||||
from .base import TestModel
|
||||
from .base import db_loader
|
||||
from .base import skip_case_if
|
||||
from .base import skip_if
|
||||
|
||||
|
||||
get_db = partial(db_loader, 'sqlite', db_class=SqliteQueueDatabase)
|
||||
@@ -240,7 +240,7 @@ class TestThreadedDatabaseThreads(BaseTestQueueDatabase, BaseTestCase):
|
||||
self.database.stop()
|
||||
|
||||
|
||||
@skip_case_if(gevent is None)
|
||||
@skip_if(gevent is None, 'gevent not installed')
|
||||
class TestThreadedDatabaseGreenlets(BaseTestQueueDatabase, BaseTestCase):
|
||||
database_config = {'use_gevent': True}
|
||||
n_rows = 10
|
||||
|
||||
Reference in New Issue
Block a user