Changed default collection naming

Also added upgrade text
This commit is contained in:
Ross Lawley
2011-06-20 14:00:06 +01:00
parent f41c5217c6
commit e3cd398f70
5 changed files with 139 additions and 14 deletions

View File

@@ -62,22 +62,72 @@ class DocumentTest(unittest.TestCase):
# Ensure Document isn't treated like an actual document
self.assertFalse(hasattr(Document, '_fields'))
def test_dynamic_collection_naming(self):
def test_collection_name(self):
"""Ensure that a collection with a specified name may be used.
"""
def create_collection_name(cls):
return "PERSON"
class DefaultNamingTest(Document):
pass
self.assertEquals('default_naming_test', DefaultNamingTest._get_collection_name())
class DynamicPerson(Document):
name = StringField()
age = IntField()
class CustomNamingTest(Document):
meta = {'collection': 'pimp_my_collection'}
meta = {'collection': create_collection_name}
self.assertEquals('pimp_my_collection', CustomNamingTest._get_collection_name())
collection = DynamicPerson._get_collection_name()
self.assertEquals(collection, 'PERSON')
class DynamicNamingTest(Document):
meta = {'collection': lambda c: "DYNAMO"}
self.assertEquals('DYNAMO', DynamicNamingTest._get_collection_name())
DynamicPerson(name='Test User', age=30).save()
self.assertTrue(collection in self.db.collection_names())
# Use Abstract class to handle backwards compatibility
class BaseDocument(Document):
meta = {
'abstract': True,
'collection': lambda c: c.__name__.lower()
}
class OldNamingConvention(BaseDocument):
pass
self.assertEquals('oldnamingconvention', OldNamingConvention._get_collection_name())
class InheritedAbstractNamingTest(BaseDocument):
meta = {'collection': 'wibble'}
self.assertEquals('wibble', InheritedAbstractNamingTest._get_collection_name())
with warnings.catch_warnings(record=True) as w:
# Cause all warnings to always be triggered.
warnings.simplefilter("always")
class NonAbstractBase(Document):
pass
class InheritedDocumentFailTest(NonAbstractBase):
meta = {'collection': 'fail'}
self.assertTrue(issubclass(w[0].category, SyntaxWarning))
self.assertEquals('non_abstract_base', InheritedDocumentFailTest._get_collection_name())
# Mixin tests
class BaseMixin(object):
meta = {
'collection': lambda c: c.__name__.lower()
}
class OldMixinNamingConvention(Document, BaseMixin):
pass
self.assertEquals('oldmixinnamingconvention', OldMixinNamingConvention._get_collection_name())
class BaseMixin(object):
meta = {
'collection': lambda c: c.__name__.lower()
}
class BaseDocument(Document, BaseMixin):
pass
class MyDocument(BaseDocument):
pass
self.assertEquals('mydocument', OldMixinNamingConvention._get_collection_name())
def test_get_superclasses(self):
"""Ensure that the correct list of superclasses is assembled.