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
djangocms_blog
tests

View file

@ -116,8 +116,7 @@ class GenericDateQuerySet(AppHookConfigTranslatableQueryset):
queryset = self
if self.end_date_field:
qfilter = (
models.Q(**{'%s__lte' % self.end_date_field: now()}) |
models.Q(**{'%s__isnull' % self.end_date_field: False})
models.Q(**{'%s__lte' % self.end_date_field: now()})
)
queryset = queryset.filter(qfilter)
return queryset.filter(**{self.publish_field: True})
@ -143,29 +142,30 @@ class GenericDateTaggedManager(TaggedFilterItem, AppHookConfigTranslatableManage
def get_queryset(self, *args, **kwargs):
return super(GenericDateTaggedManager, self).get_queryset(*args, **kwargs)
def published(self):
return self.get_queryset().published()
def published(self, current_site=True):
return self.get_queryset().published(current_site)
def available(self):
return self.get_queryset().available()
def available(self, current_site=True):
return self.get_queryset().available(current_site)
def archived(self):
return self.get_queryset().archived()
def archived(self, current_site=True):
return self.get_queryset().archived(current_site)
def published_future(self):
return self.get_queryset().published_future()
def published_future(self, current_site=True):
return self.get_queryset().published_future(current_site)
def filter_by_language(self, language):
return self.get_queryset().filter_by_language(language)
def filter_by_language(self, language, current_site=True):
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).
Results are ordered by date.
"""
if queryset is None:
queryset = self.get_queryset()
queryset = queryset.on_site()
if current_site:
queryset = queryset.on_site()
dates_qs = queryset.values_list(queryset.start_date_field, queryset.fallback_date_field)
dates = []
for blog_dates in dates_qs:

View file

@ -655,6 +655,24 @@ class ModelsTest(BaseTest):
)
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)
# 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_future()), 2)
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
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.published()), 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
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
parler.appsettings.PARLER_LANGUAGES['default']['hide_untranslated'] = True