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.
This commit is contained in:
Stefan Wójcik 2019-06-18 15:43:46 +02:00 committed by GitHub
parent 7fac0ef961
commit bb0b1e88ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -333,41 +333,36 @@ class InstanceTest(MongoDBTestCase):
self.assertEqual(User._fields['username'].db_field, '_id') self.assertEqual(User._fields['username'].db_field, '_id')
self.assertEqual(User._meta['id_field'], 'username') self.assertEqual(User._meta['id_field'], 'username')
# test no primary key field User.objects.create(username='test', name='test user')
self.assertRaises(ValidationError, User(name='test').save) 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 def test_change_custom_id_field_in_subclass(self):
# parent """Subclasses cannot override which field is the primary key."""
with self.assertRaises(ValueError): class User(Document):
username = StringField(primary_key=True)
name = StringField()
meta = {'allow_inheritance': True}
with self.assertRaises(ValueError) as e:
class EmailUser(User): class EmailUser(User):
email = StringField(primary_key=True) email = StringField(primary_key=True)
exc = e.exception
self.assertEqual(str(exc), 'Cannot override primary key field')
class EmailUser(User): def test_custom_id_field_is_required(self):
email = StringField() """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') with self.assertRaises(ValidationError) as e:
user.save() User(name='test').save()
exc = e.exception
user_obj = User.objects.first() self.assertTrue("Field is required: ['username']" in str(exc))
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'])
def test_document_not_registered(self): def test_document_not_registered(self):
class Place(Document): class Place(Document):