From bb0b1e88ef86954b90fad7f9e891b16fe6643477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20W=C3=B3jcik?= Date: Tue, 18 Jun 2019 15:43:46 +0200 Subject: [PATCH] Split up custom PK field tests (#2095) This more closely aligns with the rule that a single tests should test one thing and one thing only. Previous code tested like 4 different things in a single test and was hard to follow. --- tests/document/instance.py | 55 +++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/tests/document/instance.py b/tests/document/instance.py index d1fa7ecb..936ea262 100644 --- a/tests/document/instance.py +++ b/tests/document/instance.py @@ -333,41 +333,36 @@ class InstanceTest(MongoDBTestCase): self.assertEqual(User._fields['username'].db_field, '_id') self.assertEqual(User._meta['id_field'], 'username') - # test no primary key field - self.assertRaises(ValidationError, User(name='test').save) + User.objects.create(username='test', name='test user') + user = User.objects.first() + self.assertEqual(user.id, 'test') + self.assertEqual(user.pk, 'test') + user_dict = User.objects._collection.find_one() + self.assertEqual(user_dict['_id'], 'test') - # define a subclass with a different primary key field than the - # parent - with self.assertRaises(ValueError): + def test_change_custom_id_field_in_subclass(self): + """Subclasses cannot override which field is the primary key.""" + class User(Document): + username = StringField(primary_key=True) + name = StringField() + meta = {'allow_inheritance': True} + + with self.assertRaises(ValueError) as e: class EmailUser(User): email = StringField(primary_key=True) + exc = e.exception + self.assertEqual(str(exc), 'Cannot override primary key field') - class EmailUser(User): - email = StringField() + def test_custom_id_field_is_required(self): + """Ensure the custom primary key field is required.""" + class User(Document): + username = StringField(primary_key=True) + name = StringField() - user = User(username='test', name='test user') - user.save() - - user_obj = User.objects.first() - self.assertEqual(user_obj.id, 'test') - self.assertEqual(user_obj.pk, 'test') - - user_son = User.objects._collection.find_one() - self.assertEqual(user_son['_id'], 'test') - self.assertNotIn('username', user_son['_id']) - - User.drop_collection() - - user = User(pk='mongo', name='mongo user') - user.save() - - user_obj = User.objects.first() - self.assertEqual(user_obj.id, 'mongo') - self.assertEqual(user_obj.pk, 'mongo') - - user_son = User.objects._collection.find_one() - self.assertEqual(user_son['_id'], 'mongo') - self.assertNotIn('username', user_son['_id']) + with self.assertRaises(ValidationError) as e: + User(name='test').save() + exc = e.exception + self.assertTrue("Field is required: ['username']" in str(exc)) def test_document_not_registered(self): class Place(Document):