Update the test matrix to reflect what's supported in 2019 (#2066)
Previously, we were running the test suite for several combinations of MongoDB, Python, and PyMongo: - PyPy, MongoDB v2.6, PyMongo v3.x (which really means v3.6.1 at the moment) - Python v2.7, MongoDB v2.6, PyMongo v3.x - Python v3.5, MongoDB v2.6, PyMongo v3.x - Python v3.6, MongoDB v2.6, PyMongo v3.x - Python v2.7, MongoDB v3.0, PyMongo v3.5.0 - Python v3.6, MongoDB v3.0, PyMongo v3.5.0 - Python v3.5, MongoDB v3.2, PyMongo v3.x - Python v3.6, MongoDB v3.2, PyMongo v3.x - Python v3.6, MongoDB v3.4, PyMongo v3.x - Python v3.6, MongoDB v3.6, PyMongo v3.x There were a couple issues with this setup: 1. MongoDB v2.6 – v3.2 have reached their End of Life already (v2.6 almost 3 years ago!). See the "MongoDB Server" section on https://www.mongodb.com/support-policy. 2. We were only testing two recent-ish PyMongo versions (v3.5.0 & v3.6.1). We were not testing the oldest actively supported MongoDB/PyMongo/Python setup. This PR updates the test matrix so that these problems are solved. For the sake of simplicity, it does not yet attempt to cover MongoDB v4.0: - PyPy, MongoDB v3.4, PyMongo v3.x (aka v3.6.1 at the moment) - Python v2.7, MongoDB v3.4, PyMongo v3.x - Python v3.5, MongoDB v3.4, PyMongo v3.x - Python v3.6, MongoDB v3.4, PyMongo v3.x - Python v2.7, MongoDB v3.4, PyMongo v3.4 - Python v3.6, MongoDB v3.6, PyMongo v3.x
This commit is contained in:
@@ -3,7 +3,7 @@ import unittest
|
||||
|
||||
from mongoengine import *
|
||||
|
||||
from tests.utils import MongoDBTestCase, requires_mongodb_gte_3
|
||||
from tests.utils import MongoDBTestCase
|
||||
|
||||
|
||||
__all__ = ("GeoQueriesTest",)
|
||||
@@ -70,9 +70,6 @@ class GeoQueriesTest(MongoDBTestCase):
|
||||
self.assertEqual(events.count(), 1)
|
||||
self.assertEqual(events[0], event2)
|
||||
|
||||
# $minDistance was added in MongoDB v2.6, but continued being buggy
|
||||
# until v3.0; skip for older versions
|
||||
@requires_mongodb_gte_3
|
||||
def test_near_and_min_distance(self):
|
||||
"""Ensure the "min_distance" operator works alongside the "near"
|
||||
operator.
|
||||
@@ -243,9 +240,6 @@ class GeoQueriesTest(MongoDBTestCase):
|
||||
events = self.Event.objects(location__geo_within_polygon=polygon2)
|
||||
self.assertEqual(events.count(), 0)
|
||||
|
||||
# $minDistance was added in MongoDB v2.6, but continued being buggy
|
||||
# until v3.0; skip for older versions
|
||||
@requires_mongodb_gte_3
|
||||
def test_2dsphere_near_and_min_max_distance(self):
|
||||
"""Ensure "min_distace" and "max_distance" operators work well
|
||||
together with the "near" operator in a 2dsphere index.
|
||||
@@ -328,8 +322,6 @@ class GeoQueriesTest(MongoDBTestCase):
|
||||
"""Make sure PointField works properly in an embedded document."""
|
||||
self._test_embedded(point_field_class=PointField)
|
||||
|
||||
# Needs MongoDB > 2.6.4 https://jira.mongodb.org/browse/SERVER-14039
|
||||
@requires_mongodb_gte_3
|
||||
def test_spherical_geospatial_operators(self):
|
||||
"""Ensure that spherical geospatial queries are working."""
|
||||
class Point(Document):
|
||||
|
||||
@@ -2,8 +2,6 @@ import unittest
|
||||
|
||||
from mongoengine import connect, Document, IntField, StringField, ListField
|
||||
|
||||
from tests.utils import requires_mongodb_gte_26
|
||||
|
||||
__all__ = ("FindAndModifyTest",)
|
||||
|
||||
|
||||
@@ -96,7 +94,6 @@ class FindAndModifyTest(unittest.TestCase):
|
||||
self.assertEqual(old_doc.to_mongo(), {"_id": 1})
|
||||
self.assertDbEqual([{"_id": 0, "value": 0}, {"_id": 1, "value": -1}])
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_modify_with_push(self):
|
||||
class BlogPost(Document):
|
||||
tags = ListField(StringField())
|
||||
|
||||
@@ -17,10 +17,9 @@ from mongoengine import *
|
||||
from mongoengine.connection import get_connection, get_db
|
||||
from mongoengine.context_managers import query_counter, switch_db
|
||||
from mongoengine.errors import InvalidQueryError
|
||||
from mongoengine.mongodb_support import get_mongodb_version, MONGODB_32, MONGODB_36
|
||||
from mongoengine.mongodb_support import get_mongodb_version, MONGODB_36
|
||||
from mongoengine.queryset import (DoesNotExist, MultipleObjectsReturned,
|
||||
QuerySet, QuerySetManager, queryset_manager)
|
||||
from tests.utils import requires_mongodb_gte_26
|
||||
|
||||
|
||||
class db_ops_tracker(query_counter):
|
||||
@@ -32,7 +31,7 @@ class db_ops_tracker(query_counter):
|
||||
|
||||
|
||||
def get_key_compat(mongo_ver):
|
||||
ORDER_BY_KEY = 'sort' if mongo_ver >= MONGODB_32 else '$orderby'
|
||||
ORDER_BY_KEY = 'sort'
|
||||
CMD_QUERY_KEY = 'command' if mongo_ver >= MONGODB_36 else 'query'
|
||||
return ORDER_BY_KEY, CMD_QUERY_KEY
|
||||
|
||||
@@ -598,7 +597,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
self.assertEqual(post.comments[0].by, 'joe')
|
||||
self.assertEqual(post.comments[0].votes.score, 4)
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_update_min_max(self):
|
||||
class Scores(Document):
|
||||
high_score = IntField()
|
||||
@@ -616,7 +614,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
Scores.objects(id=scores.id).update(max__high_score=500)
|
||||
self.assertEqual(Scores.objects.get(id=scores.id).high_score, 1000)
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_update_multiple(self):
|
||||
class Product(Document):
|
||||
item = StringField()
|
||||
@@ -868,11 +865,7 @@ class QuerySetTest(unittest.TestCase):
|
||||
with query_counter() as q:
|
||||
self.assertEqual(q, 0)
|
||||
Blog.objects.insert(blogs, load_bulk=False)
|
||||
|
||||
if MONGO_VER >= MONGODB_32:
|
||||
self.assertEqual(q, 1) # 1 entry containing the list of inserts
|
||||
else:
|
||||
self.assertEqual(q, len(blogs)) # 1 entry per doc inserted
|
||||
self.assertEqual(q, 1) # 1 entry containing the list of inserts
|
||||
|
||||
self.assertEqual(Blog.objects.count(), len(blogs))
|
||||
|
||||
@@ -885,11 +878,7 @@ class QuerySetTest(unittest.TestCase):
|
||||
with query_counter() as q:
|
||||
self.assertEqual(q, 0)
|
||||
Blog.objects.insert(blogs)
|
||||
|
||||
if MONGO_VER >= MONGODB_32:
|
||||
self.assertEqual(q, 2) # 1 for insert 1 for fetch
|
||||
else:
|
||||
self.assertEqual(q, len(blogs)+1) # + 1 to fetch all docs
|
||||
self.assertEqual(q, 2) # 1 for insert 1 for fetch
|
||||
|
||||
Blog.drop_collection()
|
||||
|
||||
@@ -2030,7 +2019,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
pymongo_doc = BlogPost.objects.as_pymongo().first()
|
||||
self.assertNotIn('title', pymongo_doc)
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_update_push_with_position(self):
|
||||
"""Ensure that the 'push' update with position works properly.
|
||||
"""
|
||||
@@ -2555,8 +2543,8 @@ class QuerySetTest(unittest.TestCase):
|
||||
"""Make sure adding a comment to the query gets added to the query"""
|
||||
MONGO_VER = self.mongodb_version
|
||||
_, CMD_QUERY_KEY = get_key_compat(MONGO_VER)
|
||||
QUERY_KEY = 'filter' if MONGO_VER >= MONGODB_32 else '$query'
|
||||
COMMENT_KEY = 'comment' if MONGO_VER >= MONGODB_32 else '$comment'
|
||||
QUERY_KEY = 'filter'
|
||||
COMMENT_KEY = 'comment'
|
||||
|
||||
class User(Document):
|
||||
age = IntField()
|
||||
@@ -3370,7 +3358,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
|
||||
self.assertEqual(Foo.objects.distinct("bar"), [bar])
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_text_indexes(self):
|
||||
class News(Document):
|
||||
title = StringField()
|
||||
@@ -3454,7 +3441,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
'brasil').order_by('$text_score').first()
|
||||
self.assertEqual(item.get_text_score(), max_text_score)
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_distinct_handles_references_to_alias(self):
|
||||
register_connection('testdb', 'mongoenginetest2')
|
||||
|
||||
@@ -4586,7 +4572,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
self.assertEqual(bars._cursor._Cursor__read_preference,
|
||||
ReadPreference.SECONDARY_PREFERRED)
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_read_preference_aggregation_framework(self):
|
||||
class Bar(Document):
|
||||
txt = StringField()
|
||||
@@ -5354,7 +5339,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
self.assertTrue(Person.objects._has_data(),
|
||||
'Cursor has data and returned False')
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_queryset_aggregation_framework(self):
|
||||
class Person(Document):
|
||||
name = StringField()
|
||||
@@ -5396,7 +5380,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
{'_id': None, 'avg': 29, 'total': 2}
|
||||
])
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_queryset_aggregation_with_skip(self):
|
||||
class Person(Document):
|
||||
name = StringField()
|
||||
@@ -5418,7 +5401,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
{'_id': p3.pk, 'name': "SANDRA MARA"}
|
||||
])
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_queryset_aggregation_with_limit(self):
|
||||
class Person(Document):
|
||||
name = StringField()
|
||||
@@ -5439,7 +5421,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
{'_id': p1.pk, 'name': "ISABELLA LUANNA"}
|
||||
])
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_queryset_aggregation_with_sort(self):
|
||||
class Person(Document):
|
||||
name = StringField()
|
||||
@@ -5462,7 +5443,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
{'_id': p2.pk, 'name': "WILSON JUNIOR"}
|
||||
])
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_queryset_aggregation_with_skip_with_limit(self):
|
||||
class Person(Document):
|
||||
name = StringField()
|
||||
@@ -5492,7 +5472,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
|
||||
self.assertEqual(data, list(data2))
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_queryset_aggregation_with_sort_with_limit(self):
|
||||
class Person(Document):
|
||||
name = StringField()
|
||||
@@ -5534,7 +5513,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
{'_id': p3.pk, 'name': "SANDRA MARA"},
|
||||
])
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_queryset_aggregation_with_sort_with_skip(self):
|
||||
class Person(Document):
|
||||
name = StringField()
|
||||
@@ -5555,7 +5533,6 @@ class QuerySetTest(unittest.TestCase):
|
||||
{'_id': p2.pk, 'name': "WILSON JUNIOR"}
|
||||
])
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_queryset_aggregation_with_sort_with_skip_with_limit(self):
|
||||
class Person(Document):
|
||||
name = StringField()
|
||||
|
||||
Reference in New Issue
Block a user