debian-django-admin-rangefi.../rangefilter/tests.py

296 lines
11 KiB
Python
Raw Normal View History

2016-06-24 12:17:49 +02:00
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import datetime
2018-01-23 15:50:04 +01:00
try:
import pytz
except ImportError:
pytz = None
from unittest import skipIf
2016-06-24 12:17:49 +02:00
from django.utils import timezone
from django.test import RequestFactory, TestCase
from django.test.utils import override_settings
from django.db import models
from django.contrib.admin import ModelAdmin, site
from django.contrib.admin.views.main import ChangeList
2018-10-12 13:32:59 +02:00
from django.contrib.auth.models import User
2019-12-04 09:55:54 +01:00
from django.utils.encoding import force_str
2019-01-30 12:50:03 +01:00
from django.contrib.staticfiles.storage import staticfiles_storage
2016-06-24 12:17:49 +02:00
2017-04-12 22:04:24 +02:00
from .filter import DateRangeFilter, DateTimeRangeFilter
2019-01-30 12:50:03 +01:00
from .templatetags.rangefilter_compat import static
2016-06-24 12:17:49 +02:00
class MyModel(models.Model):
created_at = models.DateTimeField()
class Meta:
ordering = ('created_at',)
2016-07-29 13:32:15 +02:00
class MyModelDate(models.Model):
created_at = models.DateField()
class Meta:
ordering = ('created_at',)
2016-06-24 12:17:49 +02:00
class MyModelAdmin(ModelAdmin):
list_filter = (('created_at', DateRangeFilter),)
ordering = ('-id',)
2016-07-29 13:32:15 +02:00
class MyModelDateAdmin(ModelAdmin):
list_filter = (('created_at', DateRangeFilter),)
ordering = ('-id',)
2016-12-27 08:29:05 +01:00
class MyModelTimeAdmin(ModelAdmin):
list_filter = (('created_at', DateTimeRangeFilter),)
ordering = ('-id',)
class MyModelDateTimeAdmin(ModelAdmin):
list_filter = (('created_at', DateTimeRangeFilter),)
ordering = ('-id',)
2016-06-24 12:17:49 +02:00
def select_by(dictlist):
return [x for x in dictlist][0]
class DateFuncTestCase(TestCase):
def test_make_dt_aware_without_pytz(self):
with override_settings(USE_TZ=False):
now = datetime.datetime.now()
2017-04-12 22:04:24 +02:00
date = DateRangeFilter.make_dt_aware(now, None)
2016-06-24 12:17:49 +02:00
self.assertEqual(date.tzinfo, None)
self.assertTrue(timezone.is_naive(date))
2019-05-19 15:23:58 +02:00
@skipIf(pytz is None, 'install pytz')
2016-06-24 12:17:49 +02:00
def test_make_dt_aware_with_pytz(self):
local_tz = timezone.get_current_timezone()
now = datetime.datetime.now()
2017-04-12 22:04:24 +02:00
date = DateRangeFilter.make_dt_aware(now, local_tz)
2016-06-24 12:17:49 +02:00
self.assertEqual(date.tzinfo.zone, local_tz.zone)
self.assertTrue(timezone.is_aware(date))
now = timezone.now()
2017-04-12 22:04:24 +02:00
date = DateRangeFilter.make_dt_aware(now, local_tz)
2016-06-24 12:17:49 +02:00
self.assertEqual(date.tzinfo.zone, local_tz.zone)
self.assertTrue(timezone.is_aware(date))
class DateRangeFilterTestCase(TestCase):
def setUp(self):
self.today = datetime.date.today()
self.tomorrow = self.today + datetime.timedelta(days=1)
self.one_week_ago = self.today - datetime.timedelta(days=7)
2016-12-27 08:29:05 +01:00
self.django_book = MyModel.objects.create(created_at=timezone.now())
self.djangonaut_book = MyModel.objects.create(
created_at=timezone.now() - datetime.timedelta(days=7))
2016-06-24 12:17:49 +02:00
2016-12-27 08:29:05 +01:00
self.django_book_date = MyModelDate.objects.create(created_at=timezone.now())
self.djangonaut_book_date = MyModelDate.objects.create(
created_at=timezone.now() - datetime.timedelta(days=7))
2016-07-29 13:32:15 +02:00
2018-10-12 13:32:59 +02:00
self.user = User.objects.create_user(username='test', password='top_secret')
2016-06-24 12:17:49 +02:00
def get_changelist(self, request, model, modeladmin):
2018-10-12 13:32:59 +02:00
if getattr(modeladmin, 'get_changelist_instance', None):
return modeladmin.get_changelist_instance(request)
2016-06-24 12:17:49 +02:00
return ChangeList(
request, model, modeladmin.list_display,
modeladmin.list_display_links, modeladmin.list_filter,
modeladmin.date_hierarchy, modeladmin.search_fields,
modeladmin.list_select_related, modeladmin.list_per_page,
modeladmin.list_max_show_all, modeladmin.list_editable, modeladmin,
)
def test_datefilter(self):
self.request_factory = RequestFactory()
modeladmin = MyModelAdmin(MyModel, site)
request = self.request_factory.get('/')
2018-10-12 13:32:59 +02:00
request.user = self.user
2016-06-24 12:17:49 +02:00
changelist = self.get_changelist(request, MyModel, modeladmin)
queryset = changelist.get_queryset(request)
self.assertEqual(list(queryset), [self.djangonaut_book, self.django_book])
filterspec = changelist.get_filters(request)[0][0]
2019-12-04 09:55:54 +01:00
self.assertEqual(force_str(filterspec.title), 'created at')
2016-06-24 12:17:49 +02:00
def test_datefilter_filtered(self):
self.request_factory = RequestFactory()
modeladmin = MyModelAdmin(MyModel, site)
2019-05-19 15:23:58 +02:00
request = self.request_factory.get('/', {'created_at__range__gte': self.today,
'created_at__range__lte': self.tomorrow})
2018-10-12 13:32:59 +02:00
request.user = self.user
2016-06-24 12:17:49 +02:00
changelist = self.get_changelist(request, MyModel, modeladmin)
queryset = changelist.get_queryset(request)
self.assertEqual(list(queryset), [self.django_book])
filterspec = changelist.get_filters(request)[0][0]
2019-12-04 09:55:54 +01:00
self.assertEqual(force_str(filterspec.title), 'created at')
2016-06-24 12:17:49 +02:00
choice = select_by(filterspec.choices(changelist))
self.assertEqual(choice['query_string'], '?')
self.assertEqual(choice['system_name'], 'created-at')
2016-07-28 08:50:28 +02:00
def test_datefilter_filtered_with_one_params(self):
self.request_factory = RequestFactory()
modeladmin = MyModelAdmin(MyModel, site)
2019-05-19 15:23:58 +02:00
request = self.request_factory.get('/', {'created_at__range__gte': self.today})
2018-10-12 13:32:59 +02:00
request.user = self.user
2016-07-28 08:50:28 +02:00
changelist = self.get_changelist(request, MyModel, modeladmin)
queryset = changelist.get_queryset(request)
self.assertEqual(list(queryset), [self.django_book])
filterspec = changelist.get_filters(request)[0][0]
2019-12-04 09:55:54 +01:00
self.assertEqual(force_str(filterspec.title), 'created at')
2016-07-28 08:50:28 +02:00
choice = select_by(filterspec.choices(changelist))
self.assertEqual(choice['query_string'], '?')
self.assertEqual(choice['system_name'], 'created-at')
2016-07-29 13:32:15 +02:00
def test_datefilter_filtered_datefield(self):
self.request_factory = RequestFactory()
modeladmin = MyModelDateAdmin(MyModelDate, site)
2019-05-19 15:23:58 +02:00
request = self.request_factory.get('/', {'created_at__range__gte': self.today,
'created_at__range__lte': self.tomorrow})
2018-10-12 13:32:59 +02:00
request.user = self.user
2016-07-29 13:32:15 +02:00
changelist = self.get_changelist(request, MyModelDate, modeladmin)
queryset = changelist.get_queryset(request)
self.assertEqual(list(queryset), [self.django_book_date])
filterspec = changelist.get_filters(request)[0][0]
2019-12-04 09:55:54 +01:00
self.assertEqual(force_str(filterspec.title), 'created at')
2016-07-29 13:32:15 +02:00
choice = select_by(filterspec.choices(changelist))
self.assertEqual(choice['query_string'], '?')
self.assertEqual(choice['system_name'], 'created-at')
2016-12-27 08:29:05 +01:00
class DateTimeRangeFilterTestCase(TestCase):
def setUp(self):
self.today = datetime.date.today()
self.max_time = datetime.datetime.combine(timezone.now(), datetime.time.max).time()
self.min_time = datetime.datetime.combine(timezone.now(), datetime.time.min).time()
self.tomorrow = self.today + datetime.timedelta(days=1)
self.one_week_ago = self.today - datetime.timedelta(days=7)
self.django_book = MyModel.objects.create(created_at=timezone.now())
self.djangonaut_book = MyModel.objects.create(
created_at=timezone.now() - datetime.timedelta(days=7))
self.django_book_date = MyModelDate.objects.create(created_at=timezone.now())
self.djangonaut_book_date = MyModelDate.objects.create(
created_at=timezone.now() - datetime.timedelta(days=7))
2018-10-12 13:32:59 +02:00
self.user = User.objects.create_user(username='test', password='top_secret')
2016-12-27 08:29:05 +01:00
def get_changelist(self, request, model, modeladmin):
2018-10-12 13:32:59 +02:00
if getattr(modeladmin, 'get_changelist_instance', None):
return modeladmin.get_changelist_instance(request)
2016-12-27 08:29:05 +01:00
return ChangeList(
request, model, modeladmin.list_display,
modeladmin.list_display_links, modeladmin.list_filter,
modeladmin.date_hierarchy, modeladmin.search_fields,
modeladmin.list_select_related, modeladmin.list_per_page,
modeladmin.list_max_show_all, modeladmin.list_editable, modeladmin,
)
def test_datetimfilter(self):
self.request_factory = RequestFactory()
modeladmin = MyModelTimeAdmin(MyModel, site)
request = self.request_factory.get('/')
2018-10-12 13:32:59 +02:00
request.user = self.user
2016-12-27 08:29:05 +01:00
changelist = self.get_changelist(request, MyModel, modeladmin)
queryset = changelist.get_queryset(request)
self.assertEqual(list(queryset), [self.djangonaut_book, self.django_book])
filterspec = changelist.get_filters(request)[0][0]
2019-12-04 09:55:54 +01:00
self.assertEqual(force_str(filterspec.title), 'created at')
2016-12-27 08:29:05 +01:00
def test_datetimfilter_filtered(self):
self.request_factory = RequestFactory()
modeladmin = MyModelTimeAdmin(MyModel, site)
2019-05-19 15:23:58 +02:00
request = self.request_factory.get('/', {'created_at__range__gte_0': self.today,
'created_at__range__gte_1': self.min_time,
'created_at__range__lte_0': self.tomorrow,
'created_at__range__lte_1': self.max_time})
2018-10-12 13:32:59 +02:00
request.user = self.user
2016-12-27 08:29:05 +01:00
changelist = self.get_changelist(request, MyModel, modeladmin)
queryset = changelist.get_queryset(request)
self.assertEqual(list(queryset), [self.django_book])
filterspec = changelist.get_filters(request)[0][0]
2019-12-04 09:55:54 +01:00
self.assertEqual(force_str(filterspec.title), 'created at')
2016-12-27 08:29:05 +01:00
choice = select_by(filterspec.choices(changelist))
self.assertEqual(choice['query_string'], '?')
self.assertEqual(choice['system_name'], 'created-at')
def test_datefilter_filtered_with_one_params(self):
self.request_factory = RequestFactory()
modeladmin = MyModelTimeAdmin(MyModel, site)
2019-05-19 15:23:58 +02:00
request = self.request_factory.get('/', {'created_at__range__gte_0': self.today,
'created_at__range__gte_1': self.min_time})
2018-10-12 13:32:59 +02:00
request.user = self.user
2016-12-27 08:29:05 +01:00
changelist = self.get_changelist(request, MyModel, modeladmin)
queryset = changelist.get_queryset(request)
self.assertEqual(list(queryset), [self.django_book])
filterspec = changelist.get_filters(request)[0][0]
2019-12-04 09:55:54 +01:00
self.assertEqual(force_str(filterspec.title), 'created at')
2016-12-27 08:29:05 +01:00
choice = select_by(filterspec.choices(changelist))
self.assertEqual(choice['query_string'], '?')
self.assertEqual(choice['system_name'], 'created-at')
2019-01-30 12:56:28 +01:00
class TemplateTagsTestCase(TestCase):
2019-01-30 12:50:03 +01:00
@override_settings(STATIC_URL='/test/')
def test_returns_static_path_to_asset_when_staticfiles_app_is_not_installed(self):
2019-01-30 12:50:03 +01:00
self.assertEqual(static('path'), '/test/path')
def test_returns_static_path_to_asset_when_staticfiles_app_is_installed(self):
with self.modify_settings(INSTALLED_APPS={
'append': 'django.contrib.staticfiles',
}):
old_url = staticfiles_storage.base_url
staticfiles_storage.base_url = '/test/'
try:
2019-01-30 12:50:03 +01:00
self.assertEqual(static('path'), '/test/path')
finally:
staticfiles_storage.base_url = old_url