skip older mongodb decorator

This commit is contained in:
Stefan Wojcik 2017-02-26 02:14:34 -05:00
parent e6dcb39036
commit 4acd7a5b75
4 changed files with 50 additions and 54 deletions

View File

@ -9,7 +9,7 @@ import pymongo
from mongoengine import *
from mongoengine.connection import get_db
from tests.utils import get_mongodb_version, skip_in_old_mongodb
from tests.utils import get_mongodb_version, skip_older_mongodb
__all__ = ("IndexesTest", )
@ -865,9 +865,8 @@ class IndexesTest(unittest.TestCase):
info['provider_ids.foo_1_provider_ids.bar_1']['key'])
self.assertTrue(info['provider_ids.foo_1_provider_ids.bar_1']['sparse'])
@skip_older_mongodb
def test_text_indexes(self):
skip_in_old_mongodb('Text search is disabled by default in MongoDB < v2.6')
class Book(Document):
title = DictField()
meta = {

View File

@ -7,7 +7,7 @@ from pymongo.errors import OperationFailure
from mongoengine import *
from mongoengine.connection import get_connection
from tests.utils import MongoDBTestCase, skip_in_old_mongodb
from tests.utils import MongoDBTestCase, get_mongodb_version
__all__ = ("GeoQueriesTest",)
@ -314,7 +314,9 @@ class GeoQueriesTest(MongoDBTestCase):
self.assertEqual(events.count(), 0)
# $minDistance was only added in MongoDB v2.6, skip for older versions
skip_in_old_mongodb('Need MongoDB v2.6+')
mongodb_ver = get_mongodb_ver()
if mongodb_ver[0] == 2 and mongodb_ver[1] < 6:
raise SkipTest('Need MongoDB v2.6+')
# ensure min_distance and max_distance combine well
events = Event.objects(location__near=[-87.67892, 41.9120459],

View File

@ -19,7 +19,8 @@ from mongoengine.python_support import IS_PYMONGO_3
from mongoengine.queryset import (DoesNotExist, MultipleObjectsReturned,
QuerySet, QuerySetManager, queryset_manager)
from tests.utils import skip_in_old_mongodb
from tests.utils import skip_older_mongodb, skip_pymongo3
__all__ = ("QuerySetTest",)
@ -34,37 +35,6 @@ class db_ops_tracker(query_counter):
return list(self.db.system.profile.find(ignore_query))
def skip_older_mongodb(f):
def _inner(*args, **kwargs):
connection = get_connection()
info = connection.test.command('buildInfo')
mongodb_version = tuple([int(i) for i in info['version'].split('.')])
if mongodb_version < (2, 6):
raise SkipTest("Need MongoDB version 2.6+")
return f(*args, **kwargs)
_inner.__name__ = f.__name__
_inner.__doc__ = f.__doc__
return _inner
def skip_pymongo3(f):
def _inner(*args, **kwargs):
if IS_PYMONGO_3:
raise SkipTest("Useless with PyMongo 3+")
return f(*args, **kwargs)
_inner.__name__ = f.__name__
_inner.__doc__ = f.__doc__
return _inner
class QuerySetTest(unittest.TestCase):
def setUp(self):
@ -601,9 +571,8 @@ class QuerySetTest(unittest.TestCase):
self.assertEqual(post.comments[0].by, 'joe')
self.assertEqual(post.comments[0].votes.score, 4)
@skip_older_mongodb
def test_update_min_max(self):
skip_in_old_mongodb('$min is not supported in MongoDB < v2.6')
class Scores(Document):
high_score = IntField()
low_score = IntField()
@ -615,6 +584,11 @@ class QuerySetTest(unittest.TestCase):
Scores.objects(id=scores.id).update(min__low_score=250)
self.assertEqual(Scores.objects.get(id=scores.id).low_score, 150)
Scores.objects(id=scores.id).update(max__high_score=250)
self.assertEqual(Scores.objects.get(id=scores.id).low_score, 250)
Scores.objects(id=scores.id).update(max__high_score=100)
self.assertEqual(Scores.objects.get(id=scores.id).low_score, 250)
def test_updates_can_have_match_operators(self):
class Comment(EmbeddedDocument):
@ -4896,6 +4870,7 @@ class QuerySetTest(unittest.TestCase):
self.assertTrue(Person.objects._has_data(),
'Cursor has data and returned False')
@skip_older_mongodb
def test_queryset_aggregation_framework(self):
class Person(Document):
name = StringField()
@ -4930,17 +4905,13 @@ class QuerySetTest(unittest.TestCase):
{'_id': p1.pk, 'name': "ISABELLA LUANNA"}
])
data = Person.objects(
age__gte=17, age__lte=40).order_by('-age').aggregate(
{'$group': {
'_id': None,
'total': {'$sum': 1},
'avg': {'$avg': '$age'}
}
}
)
data = Person.objects(age__gte=17, age__lte=40).order_by('-age').aggregate({
'$group': {
'_id': None,
'total': {'$sum': 1},
'avg': {'$avg': '$age'}
}
})
self.assertEqual(list(data), [
{'_id': None, 'avg': 29, 'total': 2}
])

View File

@ -4,6 +4,7 @@ from nose.plugins.skip import SkipTest
from mongoengine import connect
from mongoengine.connection import get_db, get_connection
from mongoengine.python_support import IS_PYMONGO_3
MONGO_TEST_DB = 'mongoenginetest'
@ -32,10 +33,33 @@ def get_mongodb_version():
return get_connection().server_info()['versionArray']
def skip_in_old_mongodb(msg):
def skip_older_mongodb(f):
"""Raise a SkipTest exception with a given message if we're working
with MongoDB version lower than v2.6.
"""
mongodb_ver = get_mongodb_version()
if mongodb_ver[0] == 2 and mongodb_ver[1] < 6:
raise SkipTest(msg)
def _inner(*args, **kwargs):
mongodb_ver = get_mongodb_version()
if mongodb_ver[0] == 2 and mongodb_ver[1] < 6:
raise SkipTest('Need MongoDB v2.6+')
return f(*args, **kwargs)
_inner.__name__ = f.__name__
_inner.__doc__ = f.__doc__
return _inner
def skip_pymongo3(f):
"""Raise a SkipTest exception if we're running a test against
PyMongo v3.x.
"""
def _inner(*args, **kwargs):
if IS_PYMONGO_3:
raise SkipTest("Useless with PyMongo 3+")
return f(*args, **kwargs)
_inner.__name__ = f.__name__
_inner.__doc__ = f.__doc__
return _inner