Skip to content

Commit

Permalink
Refs #26521 -- Added the duplicated value to CreateModel validation m…
Browse files Browse the repository at this point in the history
…essages.

Thanks Tim for the suggestion.
  • Loading branch information
charettes committed Apr 27, 2016
1 parent fed7004 commit a877a2f
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 13 deletions.
8 changes: 4 additions & 4 deletions django/db/migrations/operations/models.py
Expand Up @@ -17,7 +17,7 @@ def _check_for_duplicates(arg_name, objs):
for val in objs:
if val in used_vals:
raise ValueError(
'Found duplicate %s in CreateModel operation.' % arg_name
"Found duplicate value %s in CreateModel %s argument." % (val, arg_name)
)
used_vals.add(val)

Expand Down Expand Up @@ -55,14 +55,14 @@ def __init__(self, name, fields, options=None, bases=None, managers=None):
super(CreateModel, self).__init__(name)
# Sanity-check that there are no duplicated field names, bases, or
# manager names
_check_for_duplicates("field", (name for name, _ in self.fields))
_check_for_duplicates('fields', (name for name, _ in self.fields))
_check_for_duplicates(
"base",
'bases',
(base._meta.label_lower if isinstance(base, models.base.ModelBase) else base.lower()
for base in self.bases
if base is not models.Model)
)
_check_for_duplicates("manager", (name for name, _ in self.managers))
_check_for_duplicates('managers', (name for name, _ in self.managers))

def deconstruct(self):
kwargs = {
Expand Down
20 changes: 11 additions & 9 deletions tests/migrations/test_operations.py
Expand Up @@ -201,7 +201,7 @@ def test_create_model(self):
self.assertNotIn('managers', definition[2])

def test_create_model_with_duplicate_field_name(self):
with self.assertRaisesMessage(ValueError, "Found duplicate field in CreateModel operation."):
with self.assertRaisesMessage(ValueError, 'Found duplicate value pink in CreateModel fields argument.'):
migrations.CreateModel(
"Pony",
[
Expand All @@ -212,39 +212,41 @@ def test_create_model_with_duplicate_field_name(self):
)

def test_create_model_with_duplicate_base(self):
with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."):
message = 'Found duplicate value test_crmo.pony in CreateModel bases argument.'
with self.assertRaisesMessage(ValueError, message):
migrations.CreateModel(
"Pony",
fields=[],
bases=("test_crmo.Pony", "test_crmo.Pony",),
)
with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."):
with self.assertRaisesMessage(ValueError, message):
migrations.CreateModel(
"Pony",
fields=[],
bases=(UnicodeModel, UnicodeModel,),
bases=("test_crmo.Pony", "test_crmo.pony",),
)
with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."):
message = 'Found duplicate value migrations.unicodemodel in CreateModel bases argument.'
with self.assertRaisesMessage(ValueError, message):
migrations.CreateModel(
"Pony",
fields=[],
bases=("test_crmo.Pony", "test_crmo.pony",),
bases=(UnicodeModel, UnicodeModel,),
)
with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."):
with self.assertRaisesMessage(ValueError, message):
migrations.CreateModel(
"Pony",
fields=[],
bases=(UnicodeModel, 'migrations.unicodemodel',),
)
with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."):
with self.assertRaisesMessage(ValueError, message):
migrations.CreateModel(
"Pony",
fields=[],
bases=(UnicodeModel, 'migrations.UnicodeModel',),
)

def test_create_model_with_duplicate_manager_name(self):
with self.assertRaisesMessage(ValueError, "Found duplicate manager in CreateModel operation."):
with self.assertRaisesMessage(ValueError, 'Found duplicate value objects in CreateModel managers argument.'):
migrations.CreateModel(
"Pony",
fields=[],
Expand Down

0 comments on commit a877a2f

Please sign in to comment.