diff --git a/tests/frameworks/common.py b/tests/frameworks/common.py new file mode 100644 index 00000000..72a61517 --- /dev/null +++ b/tests/frameworks/common.py @@ -0,0 +1,24 @@ +"""Common functions for framework tests""" +from collections.abc import Mapping + + +def name_sorted(indexes): + """Sort indexes by name""" + return sorted(indexes, key=lambda x: x['name']) + + +def strip_indexes(indexes): + """Strip fields from indexes for comparison + + Remove fields that may change between MongoDB versions and configurations + """ + # Indexes may be a list or a dict depending on DB driver + if isinstance(indexes, Mapping): + return { + k: {sk: sv for sk, sv in v.items() if sk not in ('ns', 'v')} + for k, v in indexes.items() + } + return [ + {sk: sv for sk, sv in v.items() if sk not in ('ns', 'v')} + for v in indexes + ] diff --git a/tests/frameworks/test_motor_asyncio.py b/tests/frameworks/test_motor_asyncio.py index 317a7d69..85c1d407 100644 --- a/tests/frameworks/test_motor_asyncio.py +++ b/tests/frameworks/test_motor_asyncio.py @@ -11,6 +11,7 @@ Document, EmbeddedDocument, MixinDocument, fields, exceptions, Reference ) +from .common import strip_indexes, name_sorted from ..common import BaseDBTest, TEST_DB @@ -29,22 +30,6 @@ from umongo.frameworks import motor_asyncio as framework # noqa -def _stripped(indexes): - # With pymongo==2.8 a `ns` field is returned with Mongodb>=3 but - # not with MongoDB<2, thus we have to clean this before doing comparing - # Version may differ between database versions and configurations so it - # shall not be checked - return { - k: {sk: sv for sk, sv in v.items() if sk not in ('ns', 'v')} - for k, v in indexes.items() - } - - -# Helper to sort indexes by name in order to have deterministic comparison -def name_sorted(indexes): - return sorted(indexes, key=lambda x: x['name']) - - def make_db(): return AsyncIOMotorClient()[TEST_DB] @@ -489,7 +474,7 @@ class SimpleIndexDoc(Document): class Meta: indexes = ['indexed'] - await SimpleIndexDoc.collection.drop_indexes() + await SimpleIndexDoc.collection.drop() # Now ask for indexes building await SimpleIndexDoc.ensure_indexes() @@ -502,12 +487,12 @@ class Meta: 'key': [('indexed', 1)], } } - assert _stripped(indexes) == expected_indexes + assert strip_indexes(indexes) == expected_indexes # Redoing indexes building should do nothing await SimpleIndexDoc.ensure_indexes() indexes = await SimpleIndexDoc.collection.index_information() - assert _stripped(indexes) == expected_indexes + assert strip_indexes(indexes) == expected_indexes loop.run_until_complete(do_test()) @@ -523,7 +508,7 @@ class SimpleIndexDoc(Document): class Meta: indexes = ['indexed'] - await SimpleIndexDoc.collection.drop_indexes() + await SimpleIndexDoc.collection.drop() # Now ask for indexes building await SimpleIndexDoc.ensure_indexes() @@ -536,12 +521,12 @@ class Meta: 'key': [('indexed', 1)], } } - assert _stripped(indexes) == expected_indexes + assert strip_indexes(indexes) == expected_indexes # Redoing indexes building should do nothing await SimpleIndexDoc.ensure_indexes() indexes = await SimpleIndexDoc.collection.index_information() - assert _stripped(indexes) == expected_indexes + assert strip_indexes(indexes) == expected_indexes loop.run_until_complete(do_test()) @@ -556,7 +541,6 @@ class UniqueIndexDoc(Document): required_unique = fields.IntField(unique=True, required=True) await UniqueIndexDoc.collection.drop() - await UniqueIndexDoc.collection.drop_indexes() # Now ask for indexes building await UniqueIndexDoc.ensure_indexes() @@ -575,12 +559,12 @@ class UniqueIndexDoc(Document): 'sparse': True } } - assert _stripped(indexes) == expected_indexes + assert strip_indexes(indexes) == expected_indexes # Redoing indexes building should do nothing await UniqueIndexDoc.ensure_indexes() indexes = await UniqueIndexDoc.collection.index_information() - assert _stripped(indexes) == expected_indexes + assert strip_indexes(indexes) == expected_indexes await UniqueIndexDoc(not_unique='a', required_unique=1).commit() await UniqueIndexDoc(not_unique='a', sparse_unique=1, required_unique=2).commit() @@ -608,7 +592,6 @@ class Meta: indexes = [{'key': ('compound1', 'compound2'), 'unique': True}] await UniqueIndexCompoundDoc.collection.drop() - await UniqueIndexCompoundDoc.collection.drop_indexes() # Now ask for indexes building await UniqueIndexCompoundDoc.ensure_indexes() @@ -625,7 +608,7 @@ class Meta: 'unique': True } } - assert _stripped(indexes) == expected_indexes + assert strip_indexes(indexes) == expected_indexes # Redoing indexes building should do nothing await UniqueIndexCompoundDoc.ensure_indexes() @@ -633,7 +616,7 @@ class Meta: # Must sort compound indexes to avoid random inconsistence indexes['compound1_1_compound2_1']['key'] = sorted( indexes['compound1_1_compound2_1']['key']) - assert _stripped(indexes) == expected_indexes + assert strip_indexes(indexes) == expected_indexes # Index is on the tuple (compound1, compound2) await UniqueIndexCompoundDoc(not_unique='a', compound1=1, compound2=1).commit() @@ -674,7 +657,7 @@ class UniqueIndexChildDoc(UniqueIndexParentDoc): class Meta: indexes = ['manual_index'] - await UniqueIndexChildDoc.collection.drop_indexes() + await UniqueIndexChildDoc.collection.drop() # Now ask for indexes building await UniqueIndexChildDoc.ensure_indexes() @@ -683,30 +666,25 @@ class Meta: { 'key': {'_id': 1}, 'name': '_id_', - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB, }, { 'key': {'unique': 1}, 'name': 'unique_1', 'unique': True, - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB }, { 'key': {'manual_index': 1, '_cls': 1}, 'name': 'manual_index_1__cls_1', - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB }, { 'key': {'_cls': 1}, 'name': '_cls_1', 'unique': True, - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB }, { 'key': {'child_unique': 1, '_cls': 1}, 'name': 'child_unique_1__cls_1', 'unique': True, - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB } ] assert name_sorted(indexes) == name_sorted(expected_indexes) diff --git a/tests/frameworks/test_pymongo.py b/tests/frameworks/test_pymongo.py index 18a65ff4..32ffe322 100644 --- a/tests/frameworks/test_pymongo.py +++ b/tests/frameworks/test_pymongo.py @@ -12,6 +12,7 @@ ) from umongo.frameworks import pymongo as framework_pymongo # noqa +from .common import strip_indexes, name_sorted from ..common import BaseDBTest, TEST_DB @@ -19,18 +20,6 @@ dep_error = None -def _stripped(indexes): - # Version may differ between database versions and configurations so it shall not be checked - for idx in indexes: - idx.pop('v') - return indexes - - -# Helper to sort indexes by name in order to have deterministic comparison -def name_sorted(indexes): - return sorted(indexes, key=lambda x: x['name']) - - def make_db(): return MongoClient()[TEST_DB] @@ -333,7 +322,7 @@ class Meta: collection_name = 'simple_index_doc' indexes = ['indexed'] - SimpleIndexDoc.collection.drop_indexes() + SimpleIndexDoc.collection.drop() # Now ask for indexes building SimpleIndexDoc.ensure_indexes() @@ -342,20 +331,18 @@ class Meta: { 'key': {'_id': 1}, 'name': '_id_', - 'ns': '%s.simple_index_doc' % TEST_DB, }, { 'key': {'indexed': 1}, 'name': 'indexed_1', - 'ns': '%s.simple_index_doc' % TEST_DB } ] - assert _stripped(indexes) == expected_indexes + assert strip_indexes(indexes) == expected_indexes # Redoing indexes building should do nothing SimpleIndexDoc.ensure_indexes() indexes = list(SimpleIndexDoc.collection.list_indexes()) - assert _stripped(indexes) == expected_indexes + assert strip_indexes(indexes) == expected_indexes def test_indexes_inheritance(self, instance): @@ -367,7 +354,7 @@ class SimpleIndexDoc(Document): class Meta: indexes = ['indexed'] - SimpleIndexDoc.collection.drop_indexes() + SimpleIndexDoc.collection.drop() # Now ask for indexes building SimpleIndexDoc.ensure_indexes() @@ -376,20 +363,18 @@ class Meta: { 'key': {'_id': 1}, 'name': '_id_', - 'ns': '%s.simple_index_doc' % TEST_DB, }, { 'key': {'indexed': 1}, 'name': 'indexed_1', - 'ns': '%s.simple_index_doc' % TEST_DB } ] - assert _stripped(indexes) == expected_indexes + assert strip_indexes(indexes) == expected_indexes # Redoing indexes building should do nothing SimpleIndexDoc.ensure_indexes() indexes = list(SimpleIndexDoc.collection.list_indexes()) - assert _stripped(indexes) == expected_indexes + assert strip_indexes(indexes) == expected_indexes def test_unique_index(self, instance): @@ -400,7 +385,6 @@ class UniqueIndexDoc(Document): required_unique = fields.IntField(unique=True, required=True) UniqueIndexDoc.collection.drop() - UniqueIndexDoc.collection.drop_indexes() # Now ask for indexes building UniqueIndexDoc.ensure_indexes() @@ -409,28 +393,26 @@ class UniqueIndexDoc(Document): { 'key': {'_id': 1}, 'name': '_id_', - 'ns': '%s.unique_index_doc' % TEST_DB, }, { 'key': {'required_unique': 1}, 'name': 'required_unique_1', 'unique': True, - 'ns': '%s.unique_index_doc' % TEST_DB }, { 'key': {'sparse_unique': 1}, 'name': 'sparse_unique_1', 'unique': True, 'sparse': True, - 'ns': '%s.unique_index_doc' % TEST_DB }, ] - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) # Redoing indexes building should do nothing UniqueIndexDoc.ensure_indexes() indexes = list(UniqueIndexDoc.collection.list_indexes()) - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) UniqueIndexDoc(not_unique='a', required_unique=1).commit() UniqueIndexDoc(not_unique='a', sparse_unique=1, required_unique=2).commit() @@ -454,7 +436,6 @@ class Meta: indexes = [{'key': ('compound1', 'compound2'), 'unique': True}] UniqueIndexCompoundDoc.collection.drop() - UniqueIndexCompoundDoc.collection.drop_indexes() # Now ask for indexes building UniqueIndexCompoundDoc.ensure_indexes() @@ -463,21 +444,19 @@ class Meta: { 'key': {'_id': 1}, 'name': '_id_', - 'ns': '%s.unique_index_compound_doc' % TEST_DB, }, { 'key': {'compound1': 1, 'compound2': 1}, 'name': 'compound1_1_compound2_1', 'unique': True, - 'ns': '%s.unique_index_compound_doc' % TEST_DB } ] - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) # Redoing indexes building should do nothing UniqueIndexCompoundDoc.ensure_indexes() indexes = list(UniqueIndexCompoundDoc.collection.list_indexes()) - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) # Index is on the tuple (compound1, compound2) UniqueIndexCompoundDoc(not_unique='a', compound1=1, compound2=1).commit() @@ -514,7 +493,7 @@ class UniqueIndexChildDoc(UniqueIndexParentDoc): class Meta: indexes = ['manual_index'] - UniqueIndexChildDoc.collection.drop_indexes() + UniqueIndexChildDoc.collection.drop() # Now ask for indexes building UniqueIndexChildDoc.ensure_indexes() @@ -523,38 +502,33 @@ class Meta: { 'key': {'_id': 1}, 'name': '_id_', - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB, }, { 'key': {'unique': 1}, 'name': 'unique_1', 'unique': True, - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB }, { 'key': {'manual_index': 1, '_cls': 1}, 'name': 'manual_index_1__cls_1', - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB }, { 'key': {'_cls': 1}, 'name': '_cls_1', 'unique': True, - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB }, { 'key': {'child_unique': 1, '_cls': 1}, 'name': 'child_unique_1__cls_1', 'unique': True, - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB } ] - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) # Redoing indexes building should do nothing UniqueIndexChildDoc.ensure_indexes() indexes = list(UniqueIndexChildDoc.collection.list_indexes()) - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) def test_inheritance_search(self, instance): diff --git a/tests/frameworks/test_txmongo.py b/tests/frameworks/test_txmongo.py index e6e3fe13..3ca9dd0e 100644 --- a/tests/frameworks/test_txmongo.py +++ b/tests/frameworks/test_txmongo.py @@ -12,6 +12,7 @@ Document, EmbeddedDocument, MixinDocument, fields, exceptions, Reference ) +from .common import strip_indexes, name_sorted from ..common import BaseDBTest, TEST_DB, con DEP_ERROR = 'Missing txmongo or pytest_twisted' @@ -44,18 +45,6 @@ def wrapper(self): from umongo.frameworks import txmongo as framework # noqa -# Helper to sort indexes by name in order to have deterministic comparison -def name_sorted(indexes): - return sorted(indexes, key=lambda x: x['name']) - - -def _stripped(indexes): - # Version may differ between database versions and configurations so it shall not be checked - for idx in indexes: - idx.pop('v') - return indexes - - def make_db(): return MongoConnection()[TEST_DB] @@ -415,7 +404,7 @@ class SimpleIndexDoc(Document): class Meta: indexes = ['indexed'] - yield SimpleIndexDoc.collection.drop_indexes() + yield SimpleIndexDoc.collection.drop() # Now ask for indexes building yield SimpleIndexDoc.ensure_indexes() @@ -425,20 +414,18 @@ class Meta: { 'key': {'_id': 1}, 'name': '_id_', - 'ns': '%s.simple_index_doc' % TEST_DB, }, { 'key': {'indexed': 1}, 'name': 'indexed_1', - 'ns': '%s.simple_index_doc' % TEST_DB } ] - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) # Redoing indexes building should do nothing yield SimpleIndexDoc.ensure_indexes() indexes = list(con[TEST_DB].simple_index_doc.list_indexes()) - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) @pytest_inlineCallbacks def test_indexes_inheritance(self, instance): @@ -451,7 +438,7 @@ class SimpleIndexDoc(Document): class Meta: indexes = ['indexed'] - yield SimpleIndexDoc.collection.drop_indexes() + yield SimpleIndexDoc.collection.drop() # Now ask for indexes building yield SimpleIndexDoc.ensure_indexes() @@ -461,20 +448,18 @@ class Meta: { 'key': {'_id': 1}, 'name': '_id_', - 'ns': '%s.simple_index_doc' % TEST_DB, }, { 'key': {'indexed': 1}, 'name': 'indexed_1', - 'ns': '%s.simple_index_doc' % TEST_DB } ] - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) # Redoing indexes building should do nothing yield SimpleIndexDoc.ensure_indexes() indexes = list(con[TEST_DB].simple_index_doc.list_indexes()) - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) @pytest_inlineCallbacks def test_unique_index(self, instance): @@ -486,7 +471,6 @@ class UniqueIndexDoc(Document): required_unique = fields.IntField(unique=True, required=True) yield UniqueIndexDoc.collection.drop() - yield UniqueIndexDoc.collection.drop_indexes() # Now ask for indexes building yield UniqueIndexDoc.ensure_indexes() @@ -495,28 +479,25 @@ class UniqueIndexDoc(Document): { 'key': {'_id': 1}, 'name': '_id_', - 'ns': '%s.unique_index_doc' % TEST_DB, }, { 'key': {'required_unique': 1}, 'name': 'required_unique_1', 'unique': True, - 'ns': '%s.unique_index_doc' % TEST_DB }, { 'key': {'sparse_unique': 1}, 'name': 'sparse_unique_1', 'unique': True, 'sparse': True, - 'ns': '%s.unique_index_doc' % TEST_DB }, ] - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) # Redoing indexes building should do nothing yield UniqueIndexDoc.ensure_indexes() indexes = list(con[TEST_DB].unique_index_doc.list_indexes()) - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) yield UniqueIndexDoc(not_unique='a', required_unique=1).commit() yield UniqueIndexDoc(not_unique='a', sparse_unique=1, required_unique=2).commit() @@ -541,7 +522,6 @@ class Meta: indexes = [{'key': ('compound1', 'compound2'), 'unique': True}] yield UniqueIndexCompoundDoc.collection.drop() - yield UniqueIndexCompoundDoc.collection.drop_indexes() # Now ask for indexes building yield UniqueIndexCompoundDoc.ensure_indexes() @@ -550,21 +530,19 @@ class Meta: { 'key': {'_id': 1}, 'name': '_id_', - 'ns': '%s.unique_index_compound_doc' % TEST_DB, }, { 'key': {'compound1': 1, 'compound2': 1}, 'name': 'compound1_1_compound2_1', 'unique': True, - 'ns': '%s.unique_index_compound_doc' % TEST_DB } ] - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) # Redoing indexes building should do nothing yield UniqueIndexCompoundDoc.ensure_indexes() indexes = list(con[TEST_DB].unique_index_compound_doc.list_indexes()) - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) # Index is on the tuple (compound1, compound2) yield UniqueIndexCompoundDoc(not_unique='a', compound1=1, compound2=1).commit() @@ -602,7 +580,7 @@ class UniqueIndexChildDoc(UniqueIndexParentDoc): class Meta: indexes = ['manual_index'] - yield UniqueIndexChildDoc.collection.drop_indexes() + yield UniqueIndexChildDoc.collection.drop() # Now ask for indexes building yield UniqueIndexChildDoc.ensure_indexes() @@ -611,7 +589,6 @@ class Meta: { 'key': {'_id': 1}, 'name': '_id_', - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB, 'v': 1 }, { @@ -619,35 +596,31 @@ class Meta: 'key': {'unique': 1}, 'name': 'unique_1', 'unique': True, - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB }, { 'v': 1, 'key': {'manual_index': 1, '_cls': 1}, 'name': 'manual_index_1__cls_1', - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB }, { 'v': 1, 'key': {'_cls': 1}, 'name': '_cls_1', 'unique': True, - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB }, { 'v': 1, 'key': {'child_unique': 1, '_cls': 1}, 'name': 'child_unique_1__cls_1', 'unique': True, - 'ns': '%s.unique_index_inheritance_doc' % TEST_DB } ] - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) # Redoing indexes building should do nothing yield UniqueIndexChildDoc.ensure_indexes() indexes = list(con[TEST_DB].unique_index_inheritance_doc.list_indexes()) - assert name_sorted(_stripped(indexes)) == name_sorted(expected_indexes) + assert name_sorted(strip_indexes(indexes)) == name_sorted(expected_indexes) @pytest_inlineCallbacks def test_inheritance_search(self, instance):