More manager tests

This commit is contained in:
Iacopo Spalletti 2016-06-28 08:14:07 +02:00
parent 7cdfc0e7c7
commit 096e1d48f7
No known key found for this signature in database
GPG key ID: BDCBC2EB289F60C6
2 changed files with 56 additions and 15 deletions

View file

@ -116,8 +116,7 @@ class GenericDateQuerySet(AppHookConfigTranslatableQueryset):
queryset = self queryset = self
if self.end_date_field: if self.end_date_field:
qfilter = ( qfilter = (
models.Q(**{'%s__lte' % self.end_date_field: now()}) | models.Q(**{'%s__lte' % self.end_date_field: now()})
models.Q(**{'%s__isnull' % self.end_date_field: False})
) )
queryset = queryset.filter(qfilter) queryset = queryset.filter(qfilter)
return queryset.filter(**{self.publish_field: True}) return queryset.filter(**{self.publish_field: True})
@ -143,28 +142,29 @@ class GenericDateTaggedManager(TaggedFilterItem, AppHookConfigTranslatableManage
def get_queryset(self, *args, **kwargs): def get_queryset(self, *args, **kwargs):
return super(GenericDateTaggedManager, self).get_queryset(*args, **kwargs) return super(GenericDateTaggedManager, self).get_queryset(*args, **kwargs)
def published(self): def published(self, current_site=True):
return self.get_queryset().published() return self.get_queryset().published(current_site)
def available(self): def available(self, current_site=True):
return self.get_queryset().available() return self.get_queryset().available(current_site)
def archived(self): def archived(self, current_site=True):
return self.get_queryset().archived() return self.get_queryset().archived(current_site)
def published_future(self): def published_future(self, current_site=True):
return self.get_queryset().published_future() return self.get_queryset().published_future(current_site)
def filter_by_language(self, language): def filter_by_language(self, language, current_site=True):
return self.get_queryset().filter_by_language(language) return self.get_queryset().filter_by_language(language, current_site)
def get_months(self, queryset=None): def get_months(self, queryset=None, current_site=True):
""" """
Get months with aggregate count (how much posts is in the month). Get months with aggregate count (how much posts is in the month).
Results are ordered by date. Results are ordered by date.
""" """
if queryset is None: if queryset is None:
queryset = self.get_queryset() queryset = self.get_queryset()
if current_site:
queryset = queryset.on_site() queryset = queryset.on_site()
dates_qs = queryset.values_list(queryset.start_date_field, queryset.fallback_date_field) dates_qs = queryset.values_list(queryset.start_date_field, queryset.fallback_date_field)
dates = [] dates = []

View file

@ -655,6 +655,24 @@ class ModelsTest(BaseTest):
) )
self.assertEqual(data['count'], 1) self.assertEqual(data['count'], 1)
# Move post to different site to filter it out
post2.sites.add(self.site_2)
months = Post.objects.get_months()
for data in months:
self.assertEqual(
data['date'].date(),
now().replace(year=now().year, month=now().month, day=1).date()
)
self.assertEqual(data['count'], 1)
months = Post.objects.get_months(current_site=False)
for data in months:
self.assertEqual(
data['date'].date(),
now().replace(year=now().year, month=now().month, day=1).date()
)
self.assertEqual(data['count'], 2)
post2.sites.clear()
self.assertEqual(len(Post.objects.available()), 1) self.assertEqual(len(Post.objects.available()), 1)
# If post is published but publishing date is in the future # If post is published but publishing date is in the future
@ -665,6 +683,7 @@ class ModelsTest(BaseTest):
self.assertEqual(len(Post.objects.published()), 1) self.assertEqual(len(Post.objects.published()), 1)
self.assertEqual(len(Post.objects.published_future()), 2) self.assertEqual(len(Post.objects.published_future()), 2)
self.assertEqual(len(Post.objects.archived()), 0) self.assertEqual(len(Post.objects.archived()), 0)
self.assertEqual(len(Post.objects.archived(current_site=False)), 0)
# If post is published but end publishing date is in the past # If post is published but end publishing date is in the past
post2.date_published = now().replace(year=now().year - 2, month=now().month, day=1) post2.date_published = now().replace(year=now().year - 2, month=now().month, day=1)
@ -673,10 +692,32 @@ class ModelsTest(BaseTest):
self.assertEqual(len(Post.objects.available()), 2) self.assertEqual(len(Post.objects.available()), 2)
self.assertEqual(len(Post.objects.published()), 1) self.assertEqual(len(Post.objects.published()), 1)
self.assertEqual(len(Post.objects.archived()), 1) self.assertEqual(len(Post.objects.archived()), 1)
self.assertEqual(len(Post.objects.archived(current_site=False)), 1)
# Move post to different site to filter it out
post2.sites.add(self.site_2)
self.assertEqual(len(Post.objects.archived()), 0)
self.assertEqual(len(Post.objects.archived(current_site=False)), 1)
self.assertEqual(len(Post.objects.available()), 1)
self.assertEqual(len(Post.objects.available(current_site=False)), 2)
self.assertEqual(len(Post.objects.published()), 1)
# publish post
post2.date_published = now() - timedelta(days=1)
post2.date_published_end = now() + timedelta(days=10)
post2.save()
self.assertEqual(len(Post.objects.archived()), 0)
self.assertEqual(len(Post.objects.archived(current_site=False)), 0)
self.assertEqual(len(Post.objects.available()), 1)
self.assertEqual(len(Post.objects.available(current_site=False)), 2)
self.assertEqual(len(Post.objects.published()), 1)
self.assertEqual(len(Post.objects.published(current_site=False)), 2)
# counting with language fallback enabled # counting with language fallback enabled
self._get_post(self._post_data[0]['it'], post1, 'it') self._get_post(self._post_data[0]['it'], post1, 'it')
self.assertEqual(len(Post.objects.filter_by_language('it')), 2) self.assertEqual(len(Post.objects.filter_by_language('it')), 1)
self.assertEqual(len(Post.objects.filter_by_language('it', current_site=False)), 2)
post2.sites.clear()
# No fallback # No fallback
parler.appsettings.PARLER_LANGUAGES['default']['hide_untranslated'] = True parler.appsettings.PARLER_LANGUAGES['default']['hide_untranslated'] = True