summaryrefslogtreecommitdiff
path: root/parts/django/tests/regressiontests/admin_widgets
diff options
context:
space:
mode:
Diffstat (limited to 'parts/django/tests/regressiontests/admin_widgets')
-rw-r--r--parts/django/tests/regressiontests/admin_widgets/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_widgets/fixtures/admin-widgets-users.xml43
-rw-r--r--parts/django/tests/regressiontests/admin_widgets/models.py68
-rw-r--r--parts/django/tests/regressiontests/admin_widgets/tests.py316
-rw-r--r--parts/django/tests/regressiontests/admin_widgets/urls.py7
-rw-r--r--parts/django/tests/regressiontests/admin_widgets/widgetadmin.py30
6 files changed, 0 insertions, 464 deletions
diff --git a/parts/django/tests/regressiontests/admin_widgets/__init__.py b/parts/django/tests/regressiontests/admin_widgets/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_widgets/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_widgets/fixtures/admin-widgets-users.xml b/parts/django/tests/regressiontests/admin_widgets/fixtures/admin-widgets-users.xml
deleted file mode 100644
index b851562..0000000
--- a/parts/django/tests/regressiontests/admin_widgets/fixtures/admin-widgets-users.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="101" model="auth.user">
- <field type="CharField" name="username">testser</field>
- <field type="CharField" name="first_name">Add</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">auser@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">False</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
-
- <object pk="1" model="admin_widgets.car">
- <field to="auth.user" name="owner" rel="ManyToOneRel">100</field>
- <field type="CharField" name="make">Volkswagon</field>
- <field type="CharField" name="model">Passat</field>
- </object>
- <object pk="2" model="admin_widgets.car">
- <field to="auth.user" name="owner" rel="ManyToOneRel">101</field>
- <field type="CharField" name="make">BMW</field>
- <field type="CharField" name="model">M3</field>
- </object>
-
-</django-objects> \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/admin_widgets/models.py b/parts/django/tests/regressiontests/admin_widgets/models.py
deleted file mode 100644
index 450c3e6..0000000
--- a/parts/django/tests/regressiontests/admin_widgets/models.py
+++ /dev/null
@@ -1,68 +0,0 @@
-from django.db import models
-from django.contrib.auth.models import User
-
-class MyFileField(models.FileField):
- pass
-
-class Member(models.Model):
- name = models.CharField(max_length=100)
- birthdate = models.DateTimeField(blank=True, null=True)
- gender = models.CharField(max_length=1, blank=True, choices=[('M','Male'), ('F', 'Female')])
-
- def __unicode__(self):
- return self.name
-
-class Band(models.Model):
- name = models.CharField(max_length=100)
- members = models.ManyToManyField(Member)
-
- def __unicode__(self):
- return self.name
-
-class Album(models.Model):
- band = models.ForeignKey(Band)
- name = models.CharField(max_length=100)
- cover_art = models.FileField(upload_to='albums')
- backside_art = MyFileField(upload_to='albums_back', null=True)
-
- def __unicode__(self):
- return self.name
-
-class HiddenInventoryManager(models.Manager):
- def get_query_set(self):
- return super(HiddenInventoryManager, self).get_query_set().filter(hidden=False)
-
-class Inventory(models.Model):
- barcode = models.PositiveIntegerField(unique=True)
- parent = models.ForeignKey('self', to_field='barcode', blank=True, null=True)
- name = models.CharField(blank=False, max_length=20)
- hidden = models.BooleanField(default=False)
-
- # see #9258
- default_manager = models.Manager()
- objects = HiddenInventoryManager()
-
- def __unicode__(self):
- return self.name
-
-class Event(models.Model):
- band = models.ForeignKey(Band, limit_choices_to=models.Q(pk__gt=0))
- start_date = models.DateField(blank=True, null=True)
- start_time = models.TimeField(blank=True, null=True)
- description = models.TextField(blank=True)
- link = models.URLField(blank=True)
- min_age = models.IntegerField(blank=True, null=True)
-
-class Car(models.Model):
- owner = models.ForeignKey(User)
- make = models.CharField(max_length=30)
- model = models.CharField(max_length=30)
-
- def __unicode__(self):
- return u"%s %s" % (self.make, self.model)
-
-class CarTire(models.Model):
- """
- A single car tire. This to test that a user can only select their own cars.
- """
- car = models.ForeignKey(Car)
diff --git a/parts/django/tests/regressiontests/admin_widgets/tests.py b/parts/django/tests/regressiontests/admin_widgets/tests.py
deleted file mode 100644
index 51d883f..0000000
--- a/parts/django/tests/regressiontests/admin_widgets/tests.py
+++ /dev/null
@@ -1,316 +0,0 @@
-# encoding: utf-8
-
-from datetime import datetime
-from unittest import TestCase
-
-from django import forms
-from django.conf import settings
-from django.contrib import admin
-from django.contrib.admin import widgets
-from django.contrib.admin.widgets import FilteredSelectMultiple, AdminSplitDateTime
-from django.contrib.admin.widgets import (AdminFileWidget, ForeignKeyRawIdWidget,
- ManyToManyRawIdWidget)
-from django.core.files.storage import default_storage
-from django.core.files.uploadedfile import SimpleUploadedFile
-from django.db.models import DateField
-from django.test import TestCase as DjangoTestCase
-from django.utils.html import conditional_escape
-from django.utils.translation import activate, deactivate
-
-import models
-
-
-class AdminFormfieldForDBFieldTests(TestCase):
- """
- Tests for correct behavior of ModelAdmin.formfield_for_dbfield
- """
-
- def assertFormfield(self, model, fieldname, widgetclass, **admin_overrides):
- """
- Helper to call formfield_for_dbfield for a given model and field name
- and verify that the returned formfield is appropriate.
- """
- # Override any settings on the model admin
- class MyModelAdmin(admin.ModelAdmin): pass
- for k in admin_overrides:
- setattr(MyModelAdmin, k, admin_overrides[k])
-
- # Construct the admin, and ask it for a formfield
- ma = MyModelAdmin(model, admin.site)
- ff = ma.formfield_for_dbfield(model._meta.get_field(fieldname), request=None)
-
- # "unwrap" the widget wrapper, if needed
- if isinstance(ff.widget, widgets.RelatedFieldWidgetWrapper):
- widget = ff.widget.widget
- else:
- widget = ff.widget
-
- # Check that we got a field of the right type
- self.assert_(
- isinstance(widget, widgetclass),
- "Wrong widget for %s.%s: expected %s, got %s" % \
- (model.__class__.__name__, fieldname, widgetclass, type(widget))
- )
-
- # Return the formfield so that other tests can continue
- return ff
-
- def testDateField(self):
- self.assertFormfield(models.Event, 'start_date', widgets.AdminDateWidget)
-
- def testDateTimeField(self):
- self.assertFormfield(models.Member, 'birthdate', widgets.AdminSplitDateTime)
-
- def testTimeField(self):
- self.assertFormfield(models.Event, 'start_time', widgets.AdminTimeWidget)
-
- def testTextField(self):
- self.assertFormfield(models.Event, 'description', widgets.AdminTextareaWidget)
-
- def testURLField(self):
- self.assertFormfield(models.Event, 'link', widgets.AdminURLFieldWidget)
-
- def testIntegerField(self):
- self.assertFormfield(models.Event, 'min_age', widgets.AdminIntegerFieldWidget)
-
- def testCharField(self):
- self.assertFormfield(models.Member, 'name', widgets.AdminTextInputWidget)
-
- def testFileField(self):
- self.assertFormfield(models.Album, 'cover_art', widgets.AdminFileWidget)
-
- def testForeignKey(self):
- self.assertFormfield(models.Event, 'band', forms.Select)
-
- def testRawIDForeignKey(self):
- self.assertFormfield(models.Event, 'band', widgets.ForeignKeyRawIdWidget,
- raw_id_fields=['band'])
-
- def testRadioFieldsForeignKey(self):
- ff = self.assertFormfield(models.Event, 'band', widgets.AdminRadioSelect,
- radio_fields={'band':admin.VERTICAL})
- self.assertEqual(ff.empty_label, None)
-
- def testManyToMany(self):
- self.assertFormfield(models.Band, 'members', forms.SelectMultiple)
-
- def testRawIDManyTOMany(self):
- self.assertFormfield(models.Band, 'members', widgets.ManyToManyRawIdWidget,
- raw_id_fields=['members'])
-
- def testFilteredManyToMany(self):
- self.assertFormfield(models.Band, 'members', widgets.FilteredSelectMultiple,
- filter_vertical=['members'])
-
- def testFormfieldOverrides(self):
- self.assertFormfield(models.Event, 'start_date', forms.TextInput,
- formfield_overrides={DateField: {'widget': forms.TextInput}})
-
- def testFieldWithChoices(self):
- self.assertFormfield(models.Member, 'gender', forms.Select)
-
- def testChoicesWithRadioFields(self):
- self.assertFormfield(models.Member, 'gender', widgets.AdminRadioSelect,
- radio_fields={'gender':admin.VERTICAL})
-
- def testInheritance(self):
- self.assertFormfield(models.Album, 'backside_art', widgets.AdminFileWidget)
-
-
-class AdminFormfieldForDBFieldWithRequestTests(DjangoTestCase):
- fixtures = ["admin-widgets-users.xml"]
-
- def testFilterChoicesByRequestUser(self):
- """
- Ensure the user can only see their own cars in the foreign key dropdown.
- """
- self.client.login(username="super", password="secret")
- response = self.client.get("/widget_admin/admin_widgets/cartire/add/")
- self.assert_("BMW M3" not in response.content)
- self.assert_("Volkswagon Passat" in response.content)
-
-
-class AdminForeignKeyWidgetChangeList(DjangoTestCase):
- fixtures = ["admin-widgets-users.xml"]
- admin_root = '/widget_admin'
-
- def setUp(self):
- self.client.login(username="super", password="secret")
-
- def tearDown(self):
- self.client.logout()
-
- def test_changelist_foreignkey(self):
- response = self.client.get('%s/admin_widgets/car/' % self.admin_root)
- self.assertTrue('%s/auth/user/add/' % self.admin_root in response.content)
-
-
-class AdminForeignKeyRawIdWidget(DjangoTestCase):
- fixtures = ["admin-widgets-users.xml"]
- admin_root = '/widget_admin'
-
- def setUp(self):
- self.client.login(username="super", password="secret")
-
- def tearDown(self):
- self.client.logout()
-
- def test_nonexistent_target_id(self):
- band = models.Band.objects.create(name='Bogey Blues')
- pk = band.pk
- band.delete()
- post_data = {
- "band": u'%s' % pk,
- }
- # Try posting with a non-existent pk in a raw id field: this
- # should result in an error message, not a server exception.
- response = self.client.post('%s/admin_widgets/event/add/' % self.admin_root,
- post_data)
- self.assertContains(response,
- 'Select a valid choice. That choice is not one of the available choices.')
-
- def test_invalid_target_id(self):
-
- for test_str in ('Iñtërnâtiônàlizætiøn', "1234'", -1234):
- # This should result in an error message, not a server exception.
- response = self.client.post('%s/admin_widgets/event/add/' % self.admin_root,
- {"band": test_str})
-
- self.assertContains(response,
- 'Select a valid choice. That choice is not one of the available choices.')
-
-
-class FilteredSelectMultipleWidgetTest(TestCase):
- def test_render(self):
- w = FilteredSelectMultiple('test', False)
- self.assertEqual(
- conditional_escape(w.render('test', 'test')),
- '<select multiple="multiple" name="test" class="selectfilter">\n</select><script type="text/javascript">addEvent(window, "load", function(e) {SelectFilter.init("id_test", "test", 0, "%(ADMIN_MEDIA_PREFIX)s"); });</script>\n' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX}
- )
-
- def test_stacked_render(self):
- w = FilteredSelectMultiple('test', True)
- self.assertEqual(
- conditional_escape(w.render('test', 'test')),
- '<select multiple="multiple" name="test" class="selectfilterstacked">\n</select><script type="text/javascript">addEvent(window, "load", function(e) {SelectFilter.init("id_test", "test", 1, "%(ADMIN_MEDIA_PREFIX)s"); });</script>\n' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX}
- )
-
-
-class AdminSplitDateTimeWidgetTest(TestCase):
- def test_render(self):
- w = AdminSplitDateTime()
- self.assertEqual(
- conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30))),
- '<p class="datetime">Date: <input value="2007-12-01" type="text" class="vDateField" name="test_0" size="10" /><br />Time: <input value="09:30:00" type="text" class="vTimeField" name="test_1" size="8" /></p>',
- )
-
- def test_localization(self):
- w = AdminSplitDateTime()
-
- activate('de-at')
- old_USE_L10N = settings.USE_L10N
- settings.USE_L10N = True
- w.is_localized = True
- self.assertEqual(
- conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30))),
- '<p class="datetime">Datum: <input value="01.12.2007" type="text" class="vDateField" name="test_0" size="10" /><br />Zeit: <input value="09:30:00" type="text" class="vTimeField" name="test_1" size="8" /></p>',
- )
- deactivate()
- settings.USE_L10N = old_USE_L10N
-
-
-class AdminFileWidgetTest(DjangoTestCase):
- def test_render(self):
- band = models.Band.objects.create(name='Linkin Park')
- album = band.album_set.create(
- name='Hybrid Theory', cover_art=r'albums\hybrid_theory.jpg'
- )
-
- w = AdminFileWidget()
- self.assertEqual(
- conditional_escape(w.render('test', album.cover_art)),
- 'Currently: <a target="_blank" href="%(STORAGE_URL)salbums/hybrid_theory.jpg">albums\hybrid_theory.jpg</a> <br />Change: <input type="file" name="test" />' % {'STORAGE_URL': default_storage.url('')},
- )
-
- self.assertEqual(
- conditional_escape(w.render('test', SimpleUploadedFile('test', 'content'))),
- '<input type="file" name="test" />',
- )
-
-
-class ForeignKeyRawIdWidgetTest(DjangoTestCase):
- def test_render(self):
- band = models.Band.objects.create(name='Linkin Park')
- band.album_set.create(
- name='Hybrid Theory', cover_art=r'albums\hybrid_theory.jpg'
- )
- rel = models.Album._meta.get_field('band').rel
-
- w = ForeignKeyRawIdWidget(rel)
- self.assertEqual(
- conditional_escape(w.render('test', band.pk, attrs={})),
- '<input type="text" name="test" value="%(bandpk)s" class="vForeignKeyRawIdAdminField" /><a href="../../../admin_widgets/band/?t=id" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Linkin Park</strong>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX, "bandpk": band.pk},
- )
-
- def test_relations_to_non_primary_key(self):
- # Check that ForeignKeyRawIdWidget works with fields which aren't
- # related to the model's primary key.
- apple = models.Inventory.objects.create(barcode=86, name='Apple')
- models.Inventory.objects.create(barcode=22, name='Pear')
- core = models.Inventory.objects.create(
- barcode=87, name='Core', parent=apple
- )
- rel = models.Inventory._meta.get_field('parent').rel
- w = ForeignKeyRawIdWidget(rel)
- self.assertEqual(
- w.render('test', core.parent_id, attrs={}),
- '<input type="text" name="test" value="86" class="vForeignKeyRawIdAdminField" /><a href="../../../admin_widgets/inventory/?t=barcode" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Apple</strong>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX},
- )
-
-
- def test_proper_manager_for_label_lookup(self):
- # see #9258
- rel = models.Inventory._meta.get_field('parent').rel
- w = ForeignKeyRawIdWidget(rel)
-
- hidden = models.Inventory.objects.create(
- barcode=93, name='Hidden', hidden=True
- )
- child_of_hidden = models.Inventory.objects.create(
- barcode=94, name='Child of hidden', parent=hidden
- )
- self.assertEqual(
- w.render('test', child_of_hidden.parent_id, attrs={}),
- '<input type="text" name="test" value="93" class="vForeignKeyRawIdAdminField" /><a href="../../../admin_widgets/inventory/?t=barcode" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Hidden</strong>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX},
- )
-
-
-class ManyToManyRawIdWidgetTest(DjangoTestCase):
- def test_render(self):
- band = models.Band.objects.create(name='Linkin Park')
- band.album_set.create(
- name='Hybrid Theory', cover_art=r'albums\hybrid_theory.jpg'
- )
-
- m1 = models.Member.objects.create(name='Chester')
- m2 = models.Member.objects.create(name='Mike')
- band.members.add(m1, m2)
- rel = models.Band._meta.get_field('members').rel
-
- w = ManyToManyRawIdWidget(rel)
- self.assertEqual(
- conditional_escape(w.render('test', [m1.pk, m2.pk], attrs={})),
- '<input type="text" name="test" value="%(m1pk)s,%(m2pk)s" class="vManyToManyRawIdAdminField" /><a href="../../../admin_widgets/member/" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX, "m1pk": m1.pk, "m2pk": m2.pk},
- )
-
- self.assertEqual(
- conditional_escape(w.render('test', [m1.pk])),
- '<input type="text" name="test" value="%(m1pk)s" class="vManyToManyRawIdAdminField" /><a href="../../../admin_widgets/member/" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX, "m1pk": m1.pk},
- )
-
- self.assertEqual(w._has_changed(None, None), False)
- self.assertEqual(w._has_changed([], None), False)
- self.assertEqual(w._has_changed(None, [u'1']), True)
- self.assertEqual(w._has_changed([1, 2], [u'1', u'2']), False)
- self.assertEqual(w._has_changed([1, 2], [u'1']), True)
- self.assertEqual(w._has_changed([1, 2], [u'1', u'3']), True)
diff --git a/parts/django/tests/regressiontests/admin_widgets/urls.py b/parts/django/tests/regressiontests/admin_widgets/urls.py
deleted file mode 100644
index af73d53..0000000
--- a/parts/django/tests/regressiontests/admin_widgets/urls.py
+++ /dev/null
@@ -1,7 +0,0 @@
-
-from django.conf.urls.defaults import *
-import widgetadmin
-
-urlpatterns = patterns('',
- (r'^', include(widgetadmin.site.urls)),
-)
diff --git a/parts/django/tests/regressiontests/admin_widgets/widgetadmin.py b/parts/django/tests/regressiontests/admin_widgets/widgetadmin.py
deleted file mode 100644
index 6f15d92..0000000
--- a/parts/django/tests/regressiontests/admin_widgets/widgetadmin.py
+++ /dev/null
@@ -1,30 +0,0 @@
-"""
-
-"""
-from django.contrib import admin
-
-import models
-
-class WidgetAdmin(admin.AdminSite):
- pass
-
-class CarAdmin(admin.ModelAdmin):
- list_display = ['make', 'model', 'owner']
- list_editable = ['owner']
-
-class CarTireAdmin(admin.ModelAdmin):
- def formfield_for_foreignkey(self, db_field, request, **kwargs):
- if db_field.name == "car":
- kwargs["queryset"] = models.Car.objects.filter(owner=request.user)
- return db_field.formfield(**kwargs)
- return super(CarTireAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
-
-class EventAdmin(admin.ModelAdmin):
- raw_id_fields = ['band']
-
-site = WidgetAdmin(name='widget-admin')
-
-site.register(models.User)
-site.register(models.Car, CarAdmin)
-site.register(models.CarTire, CarTireAdmin)
-site.register(models.Event, EventAdmin)