Skip to content

Commit

Permalink
fixed code and tests for redirect properly
Browse files Browse the repository at this point in the history
  • Loading branch information
Øyvind Saltvik committed Sep 25, 2011
1 parent ec7e37a commit 3b2cf5e
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 26 deletions.
4 changes: 3 additions & 1 deletion cmsplugin_blog/test/run_tests.py
Expand Up @@ -68,6 +68,8 @@ def run_tests():
('nav_playground.html', 'default'),
),
ROOT_URLCONF='cmsplugin_blog.test.testapp.urls',
USE_I8N=True,
LANGUAGE_CODE='en',
LANGUAGES=(('en', 'English'),('de','German'),('nb','Norwegian'),('nn','Norwegian Nynorsk')),
JQUERY_UI_CSS='',
JQUERY_JS='',
Expand All @@ -84,4 +86,4 @@ def run_tests():
sys.exit(failures)

if __name__ == '__main__':
run_tests()
run_tests()
27 changes: 17 additions & 10 deletions cmsplugin_blog/tests/__init__.py
Expand Up @@ -4,7 +4,7 @@
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.http import Http404

from django.db import connection
from cms.models.placeholdermodel import Placeholder

from cmsplugin_blog.models import Entry, LatestEntriesPlugin
Expand Down Expand Up @@ -41,14 +41,14 @@ def __exit__(self, type, value, traceback):
class BlogTestCase(BaseBlogTestCase):

def test_01_apphook_added(self):
self.assertEquals(reverse('en:blog_archive_index'), '/en/test-page-1/')
self.assertEquals(reverse('en:blog_archive_index'), '/test-page-1/')
self.assertEquals(reverse('de:blog_archive_index'), '/de/test-page-1/')

def test_02_title_absolute_url(self):
published_at = datetime.datetime.now() - datetime.timedelta(hours=1)
title, entry = self.create_entry_with_title(published=True,
published_at=published_at)
self.assertEquals(title.get_absolute_url(), '/en/test-page-1/%s/entry-title/' % published_at.strftime('%Y/%m/%d'))
self.assertEquals(title.get_absolute_url(), '/test-page-1/%s/entry-title/' % published_at.strftime('%Y/%m/%d'))

def test_03_admin_add(self):

Expand Down Expand Up @@ -295,13 +295,20 @@ def test_01_redirect_existing_language(self):
title, entry = self.create_entry_with_title(published=True,
published_at=published_at, language='de')

with SettingsOverride(DEBUG=True):
response = self.client.get(u'/en/test-page-1/2011/08/31/entry-title/')
self.assertRedirects(response, u'/en/test-page-1/2011/08/31/entry-title/')
with SettingsOverride(DEBUG=True):
self.client.get(u'/en/')
response = self.client.get(u'/test-page-1/2011/08/31/entry-title/')
self.assertRedirects(response, u'/de/test-page-1/2011/08/31/entry-title/')
response = self.client.get(u'/de/test-page-1/2011/08/31/entry-title/')
self.assertEqual(response.status_code, 200)
self.create_entry_title(entry, language='nb')
self.client.get(u'/en/')
response = self.client.get(u'/test-page-1/2011/08/31/entry-title/')
self.assertEqual(response.status_code, 404)
entry.delete()
with SettingsOverride(LANGUAGE_CODE='en'):
response = self.client.get(u'/de/test-page-1/2011/08/31/entry-title/')
self.assertRaises(response, Http404)
response = self.client.get(u'/de/')
response = self.client.get(u'/test-page-1/2011/08/31/entry-title/')
self.assertEqual(response.status_code, 404)

class LatestEntriesTestCase(BaseBlogTestCase):

Expand Down Expand Up @@ -338,4 +345,4 @@ def test_01_sitemaps(self):
title, entry = self.create_entry_with_title(published=True,
published_at=published_at)
response = self.client.get('/sitemap.xml')
self.assertEquals(response.status_code, 200)
self.assertEquals(response.status_code, 200)
26 changes: 11 additions & 15 deletions cmsplugin_blog/views.py
@@ -1,9 +1,10 @@
import datetime
try:
from django.views.generic import DateDetailView, ArchiveIndexView, _date_lookup_for_field, _date_from_string
from django.views.generic.dates import BaseDateDetailView, ArchiveIndexView, _date_lookup_for_field, _date_from_string
from django.views.generic.detail import SingleObjectTemplateResponseMixin
except ImportError:
from cbv import DateDetailView, ArchiveIndexView
from cbv.views.dates import _date_lookup_for_field, _date_from_string
from cbv.views.detail import SingleObjectTemplateResponseMixin
from cbv.views.dates import BaseDateDetailView, ArchiveIndexView, _date_lookup_for_field, _date_from_string

from django.http import Http404
from django.shortcuts import redirect
Expand All @@ -19,10 +20,9 @@
class Redirect(Exception):
def __init__(self, *args, **kwargs):
self.args = args

self.kwargs = kwargs

class FixDateDetailView(DateDetailView):
class DateDetailView(SingleObjectTemplateResponseMixin, BaseDateDetailView):
# Override to fix django bug
def get_object(self, queryset=None):
"""
Expand Down Expand Up @@ -52,9 +52,9 @@ def get_object(self, queryset=None):
lookup = _date_lookup_for_field(field, date)
queryset = queryset.filter(**lookup)

return super(DateDetailView, self).get_object(queryset=queryset)
return super(BaseDateDetailView, self).get_object(queryset=queryset)

class EntryDateDetailView(FixDateDetailView):
class EntryDateDetailView(DateDetailView):
slug_field = get_translation_filter(Entry, slug=None).items()[0][0]
date_field = 'pub_date'
template_name_field = 'template'
Expand All @@ -71,21 +71,17 @@ def get_object(self):
if is_multilingual():
try:
queryset = self.get_unfiltered_queryset()
obj = self.get_object(queryset=queryset)
except Entry.MultipleObjectsReturned, Http404:
obj = super(EntryDateDetailView, self).get_object(queryset=queryset)
except Entry.MultipleObjectsReturned, s:
raise e
# We know there is only one title for this entry, so we can simply use get()
raise Redirect(obj.entrytitle_set.get().get_absolute_url())

set_language_changer(self.request, obj.language_changer)
return obj

def get_unfiltered_queryset(self, language):
queryset = super(EntryDateDetailView, self).get_queryset()
if self.request.user.is_staff or self.request.user.is_superuser:
return queryset
else:
return queryset.published()
def get_unfiltered_queryset(self):
return super(EntryDateDetailView, self).get_queryset().published()

def get_queryset(self):
queryset = super(EntryDateDetailView, self).get_queryset()
Expand Down

0 comments on commit 3b2cf5e

Please sign in to comment.