nicer ver decorators + only test $minDistance in v3.0
This commit is contained in:
parent
6a9e02635d
commit
7d0b533920
@ -9,7 +9,7 @@ import pymongo
|
|||||||
from mongoengine import *
|
from mongoengine import *
|
||||||
from mongoengine.connection import get_db
|
from mongoengine.connection import get_db
|
||||||
|
|
||||||
from tests.utils import get_mongodb_version, skip_older_mongodb
|
from tests.utils import get_mongodb_version, needs_mongodb_v26
|
||||||
|
|
||||||
__all__ = ("IndexesTest", )
|
__all__ = ("IndexesTest", )
|
||||||
|
|
||||||
@ -865,7 +865,7 @@ class IndexesTest(unittest.TestCase):
|
|||||||
info['provider_ids.foo_1_provider_ids.bar_1']['key'])
|
info['provider_ids.foo_1_provider_ids.bar_1']['key'])
|
||||||
self.assertTrue(info['provider_ids.foo_1_provider_ids.bar_1']['sparse'])
|
self.assertTrue(info['provider_ids.foo_1_provider_ids.bar_1']['sparse'])
|
||||||
|
|
||||||
@skip_older_mongodb
|
@needs_mongodb_v26
|
||||||
def test_text_indexes(self):
|
def test_text_indexes(self):
|
||||||
class Book(Document):
|
class Book(Document):
|
||||||
title = DictField()
|
title = DictField()
|
||||||
|
@ -3,7 +3,7 @@ import unittest
|
|||||||
|
|
||||||
from mongoengine import *
|
from mongoengine import *
|
||||||
|
|
||||||
from tests.utils import MongoDBTestCase, skip_older_mongodb
|
from tests.utils import MongoDBTestCase, needs_mongodb_v3
|
||||||
|
|
||||||
|
|
||||||
__all__ = ("GeoQueriesTest",)
|
__all__ = ("GeoQueriesTest",)
|
||||||
@ -70,8 +70,9 @@ class GeoQueriesTest(MongoDBTestCase):
|
|||||||
self.assertEqual(events.count(), 1)
|
self.assertEqual(events.count(), 1)
|
||||||
self.assertEqual(events[0], event2)
|
self.assertEqual(events[0], event2)
|
||||||
|
|
||||||
# $minDistance was only added in MongoDB v2.6, skip for older versions
|
# $minDistance was added in MongoDB v2.6, but continued being buggy
|
||||||
@skip_older_mongodb
|
# until v3.0; skip for older versions
|
||||||
|
@needs_mongodb_v3
|
||||||
def test_near_and_min_distance(self):
|
def test_near_and_min_distance(self):
|
||||||
"""Ensure the "min_distance" operator works alongside the "near"
|
"""Ensure the "min_distance" operator works alongside the "near"
|
||||||
operator.
|
operator.
|
||||||
@ -242,8 +243,9 @@ class GeoQueriesTest(MongoDBTestCase):
|
|||||||
events = self.Event.objects(location__geo_within_polygon=polygon2)
|
events = self.Event.objects(location__geo_within_polygon=polygon2)
|
||||||
self.assertEqual(events.count(), 0)
|
self.assertEqual(events.count(), 0)
|
||||||
|
|
||||||
# $minDistance was only added in MongoDB v2.6, skip for older versions
|
# $minDistance was added in MongoDB v2.6, but continued being buggy
|
||||||
@skip_older_mongodb
|
# until v3.0; skip for older versions
|
||||||
|
@needs_mongodb_v3
|
||||||
def test_2dsphere_near_and_min_max_distance(self):
|
def test_2dsphere_near_and_min_max_distance(self):
|
||||||
"""Ensure "min_distace" and "max_distance" operators work well
|
"""Ensure "min_distace" and "max_distance" operators work well
|
||||||
together with the "near" operator in a 2dsphere index.
|
together with the "near" operator in a 2dsphere index.
|
||||||
@ -327,7 +329,7 @@ class GeoQueriesTest(MongoDBTestCase):
|
|||||||
self._test_embedded(point_field_class=PointField)
|
self._test_embedded(point_field_class=PointField)
|
||||||
|
|
||||||
# Needs MongoDB > 2.6.4 https://jira.mongodb.org/browse/SERVER-14039
|
# Needs MongoDB > 2.6.4 https://jira.mongodb.org/browse/SERVER-14039
|
||||||
@skip_older_mongodb
|
@needs_mongodb_v3
|
||||||
def test_spherical_geospatial_operators(self):
|
def test_spherical_geospatial_operators(self):
|
||||||
"""Ensure that spherical geospatial queries are working."""
|
"""Ensure that spherical geospatial queries are working."""
|
||||||
class Point(Document):
|
class Point(Document):
|
||||||
|
@ -19,7 +19,7 @@ from mongoengine.python_support import IS_PYMONGO_3
|
|||||||
from mongoengine.queryset import (DoesNotExist, MultipleObjectsReturned,
|
from mongoengine.queryset import (DoesNotExist, MultipleObjectsReturned,
|
||||||
QuerySet, QuerySetManager, queryset_manager)
|
QuerySet, QuerySetManager, queryset_manager)
|
||||||
|
|
||||||
from tests.utils import skip_older_mongodb, skip_pymongo3
|
from tests.utils import needs_mongodb_v26, skip_pymongo3
|
||||||
|
|
||||||
|
|
||||||
__all__ = ("QuerySetTest",)
|
__all__ = ("QuerySetTest",)
|
||||||
@ -571,7 +571,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
self.assertEqual(post.comments[0].by, 'joe')
|
self.assertEqual(post.comments[0].by, 'joe')
|
||||||
self.assertEqual(post.comments[0].votes.score, 4)
|
self.assertEqual(post.comments[0].votes.score, 4)
|
||||||
|
|
||||||
@skip_older_mongodb
|
@needs_mongodb_v26
|
||||||
def test_update_min_max(self):
|
def test_update_min_max(self):
|
||||||
class Scores(Document):
|
class Scores(Document):
|
||||||
high_score = IntField()
|
high_score = IntField()
|
||||||
@ -991,7 +991,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
self.assertEqual(person.name, "User A")
|
self.assertEqual(person.name, "User A")
|
||||||
self.assertEqual(person.age, 20)
|
self.assertEqual(person.age, 20)
|
||||||
|
|
||||||
@skip_older_mongodb
|
@needs_mongodb_v26
|
||||||
@skip_pymongo3
|
@skip_pymongo3
|
||||||
def test_cursor_args(self):
|
def test_cursor_args(self):
|
||||||
"""Ensures the cursor args can be set as expected
|
"""Ensures the cursor args can be set as expected
|
||||||
@ -3108,7 +3108,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertEqual(Foo.objects.distinct("bar"), [bar])
|
self.assertEqual(Foo.objects.distinct("bar"), [bar])
|
||||||
|
|
||||||
@skip_older_mongodb
|
@needs_mongodb_v26
|
||||||
def test_text_indexes(self):
|
def test_text_indexes(self):
|
||||||
class News(Document):
|
class News(Document):
|
||||||
title = StringField()
|
title = StringField()
|
||||||
@ -3195,7 +3195,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
'brasil').order_by('$text_score').first()
|
'brasil').order_by('$text_score').first()
|
||||||
self.assertEqual(item.get_text_score(), max_text_score)
|
self.assertEqual(item.get_text_score(), max_text_score)
|
||||||
|
|
||||||
@skip_older_mongodb
|
@needs_mongodb_v26
|
||||||
def test_distinct_handles_references_to_alias(self):
|
def test_distinct_handles_references_to_alias(self):
|
||||||
register_connection('testdb', 'mongoenginetest2')
|
register_connection('testdb', 'mongoenginetest2')
|
||||||
|
|
||||||
@ -4870,7 +4870,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
self.assertTrue(Person.objects._has_data(),
|
self.assertTrue(Person.objects._has_data(),
|
||||||
'Cursor has data and returned False')
|
'Cursor has data and returned False')
|
||||||
|
|
||||||
@skip_older_mongodb
|
@needs_mongodb_v26
|
||||||
def test_queryset_aggregation_framework(self):
|
def test_queryset_aggregation_framework(self):
|
||||||
class Person(Document):
|
class Person(Document):
|
||||||
name = StringField()
|
name = StringField()
|
||||||
|
@ -32,22 +32,35 @@ def get_mongodb_version():
|
|||||||
"""
|
"""
|
||||||
return get_connection().server_info()['versionArray']
|
return get_connection().server_info()['versionArray']
|
||||||
|
|
||||||
|
def _decorated_with_ver_requirement(func, ver_tuple):
|
||||||
def skip_older_mongodb(f):
|
"""Return a given function decorated with the version requirement
|
||||||
"""Raise a SkipTest exception with a given message if we're working
|
for a particular MongoDB version tuple.
|
||||||
with MongoDB version lower than v2.6.
|
|
||||||
"""
|
"""
|
||||||
def _inner(*args, **kwargs):
|
def _inner(*args, **kwargs):
|
||||||
mongodb_ver = get_mongodb_version()
|
mongodb_ver = get_mongodb_version()
|
||||||
if mongodb_ver[0] == 2 and mongodb_ver[1] < 6:
|
if mongodb_ver >= ver_tuple:
|
||||||
raise SkipTest('Need MongoDB v2.6+')
|
return func(*args, **kwargs)
|
||||||
return f(*args, **kwargs)
|
|
||||||
|
|
||||||
_inner.__name__ = f.__name__
|
raise SkipTest('Needs MongoDB v{}+'.format(
|
||||||
_inner.__doc__ = f.__doc__
|
'.'.join([str(v) for v in ver_tuple])
|
||||||
|
))
|
||||||
|
|
||||||
|
_inner.__name__ = func.__name__
|
||||||
|
_inner.__doc__ = func.__doc__
|
||||||
|
|
||||||
return _inner
|
return _inner
|
||||||
|
|
||||||
|
def needs_mongodb_v26(func):
|
||||||
|
"""Raise a SkipTest exception if we're working with MongoDB version
|
||||||
|
lower than v2.6.
|
||||||
|
"""
|
||||||
|
return _decorated_with_ver_requirement(func, (2, 6))
|
||||||
|
|
||||||
|
def needs_mongodb_v3(func):
|
||||||
|
"""Raise a SkipTest exception if we're working with MongoDB version
|
||||||
|
lower than v3.0.
|
||||||
|
"""
|
||||||
|
return _decorated_with_ver_requirement(func, (3, 0))
|
||||||
|
|
||||||
def skip_pymongo3(f):
|
def skip_pymongo3(f):
|
||||||
"""Raise a SkipTest exception if we're running a test against
|
"""Raise a SkipTest exception if we're running a test against
|
||||||
|
Loading…
x
Reference in New Issue
Block a user