diff --git a/djadmin2/forms.py b/djadmin2/forms.py index 77711cc..27d2610 100644 --- a/djadmin2/forms.py +++ b/djadmin2/forms.py @@ -109,17 +109,14 @@ _django_to_floppyforms_widget = { django.forms.widgets.DateInput: _create_widget( floppyforms.widgets.DateInput, - ('input_type',), init_arguments=('format',)), django.forms.widgets.DateTimeInput: _create_widget( floppyforms.widgets.DateTimeInput, - ('input_type',), init_arguments=('format',)), django.forms.widgets.TimeInput: _create_widget( floppyforms.widgets.TimeInput, - ('input_type',), init_arguments=('format',)), django.forms.widgets.CheckboxInput: _create_widget(floppyforms.widgets.CheckboxInput, ('check_test',)), diff --git a/example/blog/admin2.py b/example/blog/admin2.py index eb4ab9f..b232b7c 100644 --- a/example/blog/admin2.py +++ b/example/blog/admin2.py @@ -6,10 +6,15 @@ from django.contrib.auth.models import Group, User from rest_framework.relations import PrimaryKeyRelatedField import djadmin2 +from djadmin2.forms import floppify_form from djadmin2.models import ModelAdmin2, Admin2Inline from djadmin2.apiviews import Admin2APISerializer +UserCreationForm = floppify_form(UserCreationForm) +UserChangeForm = floppify_form(UserChangeForm) + + class GroupSerializer(Admin2APISerializer): permissions = PrimaryKeyRelatedField(many=True) diff --git a/example/blog/tests/__init__.py b/example/blog/tests/__init__.py index 4ea9a97..09b4aa2 100644 --- a/example/blog/tests/__init__.py +++ b/example/blog/tests/__init__.py @@ -1,3 +1,4 @@ +from test_auth_admin import * from test_apiviews import * from test_builtin_api_resources import * from test_views import * diff --git a/example/blog/tests/test_apiviews.py b/example/blog/tests/test_apiviews.py index 53b4728..b200194 100644 --- a/example/blog/tests/test_apiviews.py +++ b/example/blog/tests/test_apiviews.py @@ -19,7 +19,6 @@ class ViewTest(TestCase): class IndexAPIViewTest(ViewTest): - def test_response_ok(self): request = self.factory.get(reverse('admin2:api-index')) view = apiviews.IndexAPIView.as_view(**default.get_api_index_kwargs()) @@ -28,7 +27,6 @@ class IndexAPIViewTest(ViewTest): class ListCreateAPIViewTest(ViewTest): - def test_response_ok(self): request = self.factory.get(reverse('admin2:blog_post_api-list')) model_admin = self.get_model_admin(Post) diff --git a/example/blog/tests/test_auth_admin.py b/example/blog/tests/test_auth_admin.py new file mode 100644 index 0000000..0461200 --- /dev/null +++ b/example/blog/tests/test_auth_admin.py @@ -0,0 +1,59 @@ +import floppyforms +from django.contrib.auth.models import User +from django.core.urlresolvers import reverse +from django.test import TestCase +from django.test.client import RequestFactory +import djadmin2 +from blog.admin2 import UserAdmin2 + + +class UserAdminTest(TestCase): + def setUp(self): + self.factory = RequestFactory() + self.user = User( + username='admin', + is_staff=True, + is_superuser=True) + self.user.set_password('admin') + self.user.save() + + def test_create_form_uses_floppyform_widgets(self): + form = UserAdmin2.create_form_class() + self.assertTrue( + isinstance(form.fields['username'].widget, + floppyforms.TextInput)) + + request = self.factory.get(reverse('admin2:auth_user_create')) + request.user = self.user + model_admin = UserAdmin2(User, djadmin2.default) + view = model_admin.create_view.as_view( + **model_admin.get_create_kwargs()) + response = view(request) + form = response.context_data['form'] + self.assertTrue( + isinstance(form.fields['username'].widget, + floppyforms.TextInput)) + + def test_update_form_uses_floppyform_widgets(self): + form = UserAdmin2.update_form_class() + self.assertTrue( + isinstance(form.fields['username'].widget, + floppyforms.TextInput)) + self.assertTrue( + isinstance(form.fields['date_joined'].widget, + floppyforms.DateTimeInput)) + + request = self.factory.get( + reverse('admin2:auth_user_update', args=(self.user.pk,))) + request.user = self.user + model_admin = UserAdmin2(User, djadmin2.default) + view = model_admin.update_view.as_view( + **model_admin.get_update_kwargs()) + response = view(request, pk=self.user.pk) + form = response.context_data['form'] + self.assertTrue( + isinstance(form.fields['username'].widget, + floppyforms.TextInput)) + self.assertTrue( + isinstance(form.fields['date_joined'].widget, + floppyforms.DateTimeInput)) diff --git a/example/blog/tests/test_modelforms.py b/example/blog/tests/test_modelforms.py index 73e9e5d..ec0107d 100644 --- a/example/blog/tests/test_modelforms.py +++ b/example/blog/tests/test_modelforms.py @@ -15,7 +15,7 @@ class ModelFormFactoryTest(TestCase): class GetFloppyformWidgetTest(TestCase): def assertExpectWidget(self, instance, new_class_, - equal_attributes=None): + equal_attributes=None, new_attributes=None): new_instance = floppify_widget(instance) self.assertEqual(new_instance.__class__, new_class_) if equal_attributes: @@ -33,6 +33,16 @@ class GetFloppyformWidgetTest(TestCase): self.assertEqual(old_attr, new_attr, 'Original widget\'s attribute was not copied: %r != %r' % (old_attr, new_attr)) + if new_attributes: + for attribute, value in new_attributes.items(): + self.assertTrue( + hasattr(new_instance, attribute), + 'Cannot check new attribute %r, not available on ' + 'generated widget %r' % (attribute, new_instance)) + new_attr = getattr(new_instance, attribute) + self.assertEqual(new_attr, value, + 'Generated widget\'s attribute is not as expected: ' + '%r != %r' % (new_attr, value)) def test_created_widget_doesnt_leak_attributes_into_original_widget(self): widget = forms.TextInput() @@ -70,12 +80,16 @@ class GetFloppyformWidgetTest(TestCase): def test_textinput_widget(self): self.assertExpectWidget( forms.widgets.TextInput(), - floppyforms.widgets.TextInput) + floppyforms.widgets.TextInput, + ['input_type'], + {'input_type': 'text'}) def test_passwordinput_widget(self): self.assertExpectWidget( forms.widgets.PasswordInput(), - floppyforms.widgets.PasswordInput) + floppyforms.widgets.PasswordInput, + ['input_type'], + {'input_type': 'password'}) def test_hiddeninput_widget(self): self.assertExpectWidget( @@ -146,7 +160,8 @@ class GetFloppyformWidgetTest(TestCase): self.assertExpectWidget( widget, floppyforms.widgets.DateInput, - ['format']) + ['format'], + {'input_type': 'date'}) def test_datetimeinput_widget(self): self.assertExpectWidget( @@ -157,7 +172,8 @@ class GetFloppyformWidgetTest(TestCase): self.assertExpectWidget( widget, floppyforms.widgets.DateTimeInput, - ['format']) + ['format'], + {'input_type': 'datetime'}) def test_timeinput_widget(self): self.assertExpectWidget( @@ -168,7 +184,8 @@ class GetFloppyformWidgetTest(TestCase): self.assertExpectWidget( widget, floppyforms.widgets.TimeInput, - ['format']) + ['format'], + {'input_type': 'time'}) def test_checkboxinput_widget(self): self.assertExpectWidget(