From d36a813e156b821af864be10648c38ddf79b4a7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Delobelle?= Date: Wed, 25 Oct 2017 14:28:24 +0200 Subject: [PATCH 1/2] Fix tests, force reevaluate field queryset --- utils/tests/test_forms.py | 44 ++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/utils/tests/test_forms.py b/utils/tests/test_forms.py index 07fc951e..5cfa8d61 100644 --- a/utils/tests/test_forms.py +++ b/utils/tests/test_forms.py @@ -11,42 +11,49 @@ User = get_user_model() class KeepUnselectableModelFormMixinTests(TestCase): - class ExampleForm(KeepUnselectableModelFormMixin, forms.ModelForm): - user_permissions = forms.ModelMultipleChoiceField( - queryset=Permission.objects.filter( - codename__startswith='selec'), - ) + def _get_form_cls(self): + """ + We recreate a new form class for each test, because `queryset` may not + be reevaluate and miss the permissions created by `setUp`. + """ + class ExampleForm(KeepUnselectableModelFormMixin, forms.ModelForm): + user_permissions = forms.ModelMultipleChoiceField( + queryset=Permission.objects.filter( + codename__startswith='selec'), + ) - keep_unselectable_fields = ['user_permissions'] + keep_unselectable_fields = ['user_permissions'] - class Meta: - model = User - fields = ('username', 'user_permissions') + class Meta: + model = User + fields = ('username', 'user_permissions') + return ExampleForm def setUp(self): ct = ContentType.objects.get_for_model(Permission) self.unselec_perm1 = Permission.objects.create( - content_type=ct, codename='unselec_perm1') + content_type=ct, codename='unselec_perm1', name='Unselectable 1') self.unselec_perm2 = Permission.objects.create( - content_type=ct, codename='unselec_perm2') + content_type=ct, codename='unselec_perm2', name='Unselectable 2') # These two perms are the only selectable permissions from # 'permissions' field of ExampleForm. self.selec_perm1 = Permission.objects.create( - content_type=ct, codename='selec_perm1') + content_type=ct, codename='selec_perm1', name='Selectable 1') self.selec_perm2 = Permission.objects.create( - content_type=ct, codename='selec_perm2') + content_type=ct, codename='selec_perm2', name='Selectable 2') def test_creation(self): """ The mixin functions properly when instance is being created. """ + ExampleForm = self._get_form_cls() data = { 'username': 'user', 'user_permissions': [self.selec_perm1.pk], } - form = self.ExampleForm(data) + form = ExampleForm(data) instance = form.save() @@ -62,11 +69,12 @@ class KeepUnselectableModelFormMixinTests(TestCase): https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#the-save-method """ + ExampleForm = self._get_form_cls() data = { 'username': 'user', 'user_permissions': [self.selec_perm1.pk], } - form = self.ExampleForm(data) + form = ExampleForm(data) instance = form.save(commit=False) @@ -89,11 +97,12 @@ class KeepUnselectableModelFormMixinTests(TestCase): # Link instance with an unselectable and a selectable permissions. instance.user_permissions.add(self.unselec_perm1, self.selec_perm2) + ExampleForm = self._get_form_cls() data = { 'username': 'user', 'user_permissions': [self.selec_perm1.pk], } - form = self.ExampleForm(data, instance=instance) + form = ExampleForm(data, instance=instance) instance = form.save() @@ -111,11 +120,12 @@ class KeepUnselectableModelFormMixinTests(TestCase): # Link instance with an unselectable and a selectable permissions. instance.user_permissions.add(self.unselec_perm1, self.selec_perm2) + ExampleForm = self._get_form_cls() data = { 'username': 'changed', 'user_permissions': [self.selec_perm1.pk], } - form = self.ExampleForm(data, instance=instance) + form = ExampleForm(data, instance=instance) instance = form.save(commit=False) From 2b62c3a785ced80d21a52cb3fd673462c6ef31fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Wed, 25 Oct 2017 15:43:35 +0200 Subject: [PATCH 2/2] typos --- utils/tests/test_forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/tests/test_forms.py b/utils/tests/test_forms.py index 5cfa8d61..034abdc1 100644 --- a/utils/tests/test_forms.py +++ b/utils/tests/test_forms.py @@ -14,7 +14,7 @@ class KeepUnselectableModelFormMixinTests(TestCase): def _get_form_cls(self): """ We recreate a new form class for each test, because `queryset` may not - be reevaluate and miss the permissions created by `setUp`. + be reevaluated and may lack the permissions created by `setUp`. """ class ExampleForm(KeepUnselectableModelFormMixin, forms.ModelForm): user_permissions = forms.ModelMultipleChoiceField(