Browse Source

Added tinysh test project with extra usecase: forum under site and tests for erropages decorators.

Rafał Pitoń 11 years ago
parent
commit
114329d2c8

+ 1 - 1
.gitignore

@@ -46,7 +46,7 @@ coverage.xml
 *.pot
 *.pot
 
 
 # Misago test runner project
 # Misago test runner project
-testproject/
+/testproject/
 
 
 # Sphinx documentation
 # Sphinx documentation
 docs/_build/
 docs/_build/

+ 0 - 0
misago/core/testproject/__init__.py


+ 12 - 0
misago/core/testproject/urls.py

@@ -0,0 +1,12 @@
+from django.conf.urls import patterns, include, url
+
+urlpatterns = patterns('',
+    url(r'^forum/', include('misago.urls')),
+)
+
+urlpatterns += patterns('misago.core.testproject.views',
+    url(r'^forum/test-403/$', 'raise_misago_403', name='raise_misago_403'),
+    url(r'^forum/test-404/$', 'raise_misago_404', name='raise_misago_404'),
+    url(r'^test-403/$', 'raise_403', name='raise_403'),
+    url(r'^test-404/$', 'raise_404', name='raise_404'),
+)

+ 4 - 0
misago/core/testproject/urlswitherrorhandlers.py

@@ -0,0 +1,4 @@
+from misago.core.testproject.urls import *
+
+handler403 = 'misago.core.testproject.views.mock_custom_403_error_page'
+handler404 = 'misago.core.testproject.views.mock_custom_404_error_page'

+ 29 - 0
misago/core/testproject/views.py

@@ -0,0 +1,29 @@
+from django.core.exceptions import PermissionDenied
+from django.http import Http404, HttpResponse
+from misago.core import errorpages
+
+
+def raise_misago_403(request):
+    raise PermissionDenied('Misago 403')
+
+
+def raise_misago_404(request):
+    raise Http404('Misago 404')
+
+
+def raise_403(request):
+    raise PermissionDenied()
+
+
+def raise_404(request):
+    raise Http404()
+
+
+@errorpages.shared_403_exception_handler
+def mock_custom_403_error_page(request):
+    return HttpResponse("Custom 403", status=403)
+
+
+@errorpages.shared_404_exception_handler
+def mock_custom_404_error_page(request):
+    return HttpResponse("Custom 404", status=404)

+ 21 - 0
misago/core/tests/test_errorpages.py

@@ -1,5 +1,6 @@
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 from django.test import TestCase
 from django.test import TestCase
+from django.test.client import RequestFactory
 from misago.core import errorpages
 from misago.core import errorpages
 
 
 
 
@@ -17,3 +18,23 @@ class ErrorPageViewsTests(TestCase):
         """page_not_found error page has no show-stoppers"""
         """page_not_found error page has no show-stoppers"""
         response = errorpages.page_not_found(self.request)
         response = errorpages.page_not_found(self.request)
         self.assertEqual(response.status_code, 404)
         self.assertEqual(response.status_code, 404)
+
+
+class CustomErrorPagesTests(TestCase):
+    urls = 'misago.core.testproject.urlswitherrorhandlers'
+
+    def test_shared_403_decorator(self):
+        """shared_403_decorator calls correct error handler"""
+        response = self.client.get(reverse('raise_misago_403'))
+        self.assertEqual(response.status_code, 403)
+        response = self.client.get(reverse('raise_403'))
+        self.assertEqual(response.status_code, 403)
+        self.assertIn("Custom 403", response.content)
+
+    def test_shared_404_decorator(self):
+        """shared_404_decorator calls correct error handler"""
+        response = self.client.get(reverse('raise_misago_404'))
+        self.assertEqual(response.status_code, 404)
+        response = self.client.get(reverse('raise_404'))
+        self.assertEqual(response.status_code, 404)
+        self.assertIn("Custom 404", response.content)

+ 19 - 0
misago/project_template/project_name/urls.py

@@ -1,5 +1,24 @@
 from django.conf.urls import patterns, include, url
 from django.conf.urls import patterns, include, url
 
 
+from django.contrib import admin
+admin.autodiscover()
+
 urlpatterns = patterns('',
 urlpatterns = patterns('',
     url(r'^', include('misago.urls')),
     url(r'^', include('misago.urls')),
+    # Uncomment next line if you plan to use Django admin for 3rd party apps
+    #url(r'^django-admin/', include(admin.site.urls)),
 )
 )
+
+
+# Error Handlers
+# Misago needs those handlers to deal with errors raised by it's middlewares
+# If you replace those handlers with custom ones, make sure you decorate them
+# functions with shared_403_exception_handler or shared_404_exception_handler
+# decorators that are defined in misago.views.errorpages module!
+handler403 = 'misago.views.errorpages.permission_denied'
+handler404 = 'misago.views.errorpages.page_not_found'
+
+
+# Serve static files in development
+from django.contrib.staticfiles.urls import staticfiles_urlpatterns
+urlpatterns += staticfiles_urlpatterns()