Commit 93464ba7 by benjaoming

add more tests of custom managers and add support for django 1.5 and 1.6's…

add more tests of custom managers and add support for django 1.5 and 1.6's patterns for empty querysets
parent 294839ea
......@@ -57,7 +57,7 @@ class ArticleForm(forms.ModelForm):
revisions = models.ArticleRevision.objects.filter(article=self.instance)
self.fields['current_revision'].queryset = revisions
else:
self.fields['current_revision'].queryset = models.ArticleRevision.objects.get_empty_query_set()
self.fields['current_revision'].queryset = models.ArticleRevision.objects.none()
self.fields['current_revision'].widget = forms.HiddenInput()
class ArticleAdmin(admin.ModelAdmin):
......
......@@ -138,7 +138,14 @@ class ArticleManager(models.Manager):
class ArticleFkManager(models.Manager):
def get_empty_query_set(self):
return ArticleFkEmptyQuerySet(model=self.model)
# Pre 1.6 django, we needed a custom inheritor of EmptyQuerySet
# to pass custom methods. However, 1.6 introduced that EmptyQuerySet
# cannot be instantiated but instead passes through the methods
# of the custom QuerySet.
# See: https://code.djangoproject.com/ticket/22817
if DJANGO_VERSION < (1, 6):
return ArticleFkEmptyQuerySet(model=self.model)
return self.get_query_set().none()
def get_query_set(self):
return ArticleFkQuerySet(self.model, using=self._db)
......@@ -171,7 +178,14 @@ class URLPathQuerySet(QuerySet, ArticleFkQuerySetMixin):
class URLPathManager(TreeManager):
def get_empty_query_set(self):
return URLPathEmptyQuerySet(model=self.model)
# Pre 1.6 django, we needed a custom inheritor of EmptyQuerySet
# to pass custom methods. However, 1.6 introduced that EmptyQuerySet
# cannot be instantiated but instead passes through the methods
# of the custom QuerySet.
# See: https://code.djangoproject.com/ticket/22817
if DJANGO_VERSION < (1, 6):
return URLPathEmptyQuerySet(model=self.model)
return self.get_query_set().none()
def get_query_set(self):
"""Return a QuerySet with the same ordering as the TreeManager."""
......
......@@ -279,7 +279,7 @@ class AttachmentSearchView(ArticleMixin, ListView):
def get_queryset(self):
self.query = self.request.GET.get('query', None)
if not self.query:
qs = models.Attachment.objects.get_empty_query_set()
qs = models.Attachment.objects.none()
else:
qs = models.Attachment.objects.active().can_read(self.request.user)
qs = qs.filter(Q(original_filename__contains=self.query) |
......
......@@ -16,7 +16,7 @@ class ImageForm(forms.ModelForm):
revisions = models.ImageRevision.objects.filter(plugin=self.instance)
self.fields['current_revision'].queryset = revisions
else:
self.fields['current_revision'].queryset = models.ImageRevision.objects.get_empty_query_set()
self.fields['current_revision'].queryset = models.ImageRevision.objects.none()
self.fields['current_revision'].widget = forms.HiddenInput()
......
......@@ -9,6 +9,7 @@ import pprint
from .base import ArticleTestBase, WebTestBase
from wiki import models
from wiki.plugins.attachments.models import Attachment
class ModelTests(ArticleTestBase):
......@@ -38,6 +39,23 @@ class ModelTests(ArticleTestBase):
self.assertEqual(models.Article.objects.none().can_write(self.superuser1).count(), 0)
self.assertEqual(models.Article.objects.none().active().count(), 0)
# Do the same for Attachment which uses ArtickeFkManager
# Test methods directly on manager
self.assertEqual(Attachment.objects.can_read(self.superuser1).count(), 0)
self.assertEqual(Attachment.objects.can_write(self.superuser1).count(), 0)
self.assertEqual(Attachment.objects.active().count(), 0)
# Test methods on querysets
self.assertEqual(Attachment.objects.all().can_read(self.superuser1).count(), 0)
self.assertEqual(Attachment.objects.all().can_write(self.superuser1).count(), 0)
self.assertEqual(Attachment.objects.all().active().count(), 0)
# Test empty query sets
# See: https://code.djangoproject.com/ticket/22817
self.assertEqual(Attachment.objects.none().can_read(self.superuser1).count(), 0)
self.assertEqual(Attachment.objects.none().can_write(self.superuser1).count(), 0)
self.assertEqual(Attachment.objects.none().active().count(), 0)
class RootArticleViewTests(WebTestBase):
......
......@@ -499,7 +499,7 @@ class SearchView(ListView):
def get_queryset(self):
if not self.query:
return models.Article.objects.get_empty_query_set()
return models.Article.objects.none()
articles = models.Article.objects.filter(Q(current_revision__title__icontains=self.query) |
Q(current_revision__content__icontains=self.query))
if not permissions.can_moderate(models.URLPath.root().article, self.request.user):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment