Skip to content

Instantly share code, notes, and snippets.

Created December 21, 2012 17:20
Show Gist options
  • Save anonymous/4354211 to your computer and use it in GitHub Desktop.
Save anonymous/4354211 to your computer and use it in GitHub Desktop.
Unit test to reproduce a problem with mongoengine inheritance. I need to save instances of child class in different collection, and have no idea how to do it.
from django.test import TestCase
import mongoengine as me
class TestCollectionNameInheritance(TestCase):
def test_simple_case(self):
class BasicUser(me.Document):
username=me.StringField(required=True, unique=True)
meta = {
'allow_inheritance': True,
# 'indexes': [
# {'fields': ['username'], 'unique': True}
# ]
}
class CorporateUser(BasicUser):
title = me.StringField(required=False)
# meta = {
# 'collection': 'corporate_user'
# }
CorporateUser._meta['collection'] = 'corporate_user'
BasicUser.drop_collection()
CorporateUser.drop_collection()
customer_username = 'customer'
basic = BasicUser(username=customer_username)
basic.save()
username='ceo_user'
u = CorporateUser(username=username, title='CEO')
u.save()
self.assertEqual(BasicUser.objects._collection.name, 'basic_user')
self.assertEqual(CorporateUser._meta['collection'], 'corporate_user')
self.assertEqual(CorporateUser.objects._collection.name, 'corporate_user')
self.assertEqual(CorporateUser.objects(username=username).count(), 1)
self.assertEqual(BasicUser.objects(username=username).count(), 0)
db = BasicUser._get_db()
self.assertEqual(db['basic_user'].find({'username': username}).count(), 0)
self.assertEqual(db['corporate_user'].find({'username': username}).count(), 1)
self.assertEqual(db['basic_user'].find({'username': customer_username}).count(), 1)
self.assertEqual(db['corporate_user'].find({'username': customer_username}).count(), 0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment