Author: batiste.bieler
Date: Mon Jul  6 11:09:44 2009
New Revision: 595

Added:
    trunk/pages/tests/
    trunk/pages/tests/__init__.py
    trunk/pages/tests/auto_render.py
    trunk/pages/tests/pages_tests.py
Removed:
    trunk/pages/tests.py
Modified:
    trunk/example/test_runner.py
    trunk/pages/managers.py

Log:
Split tests

Modified: trunk/example/test_runner.py
==============================================================================
--- trunk/example/test_runner.py        (original)
+++ trunk/example/test_runner.py        Mon Jul  6 11:09:44 2009
@@ -19,33 +19,33 @@
      mod_list = []
      for root, dirs, files in os.walk(app_dirpath):
          root_path = app_path +  
root[len(app_dirpath):].split(os.path.sep)[1:]
-        for file in files:
-            if file not in exclude_files:
-                if file.lower().endswith('.py'):
-                    mod_name = file[:-3].lower()
-                    try:
-                        mod = __import__('.'.join(root_path + [mod_name]),
-                            {}, {}, mod_name)
-                    except ImportError:
-                        pass
-                    else:
-                        mod_list.append(mod)
+        if not '.svn' in root_path:
+            for file in files:
+                if file not in exclude_files:
+                    if file.lower().endswith('.py'):
+                        mod_name = file[:-3].lower()
+                        try:
+                            mod = __import__('.'.join(root_path +  
[mod_name]),
+                                {}, {}, mod_name)
+                        except ImportError:
+                            pass
+                        else:
+                            mod_list.append(mod)

      return mod_list


  def run_tests(test_labels, verbosity=1, interactive=True,
          extra_tests=[]):
-    cov = coverage()
+    """cov = coverage()
      cov.erase()
      cov.use_cache(0)
      cov.start()
-
-    app = get_app('pages')
-    modules = get_all_coverage_modules(app, exclude_files=['tests.py'])
+    app = get_app('pages')"""
+    #modules = get_all_coverage_modules(app,  
exclude_files=['auto_render.py'])
      results = django_test_runner(test_labels, verbosity, interactive,
          extra_tests)
-    cov.stop()
-    cov.html_report(modules, directory='coverage')
+    """cov.stop()
+    cov.html_report(modules, directory='coverage')"""

      return results

Modified: trunk/pages/managers.py
==============================================================================
--- trunk/pages/managers.py     (original)
+++ trunk/pages/managers.py     Mon Jul  6 11:09:44 2009
@@ -167,7 +167,7 @@
              return content

      def get_page_ids_by_slug(self, slug):
-        """Return all the page id according to a slug"""
+        """Return all the page id according to a slug."""
          sql = '''SELECT pages_content.page_id,
              MAX(pages_content.creation_date)
              FROM pages_content WHERE (pages_content.type = %s

Added: trunk/pages/tests/__init__.py
==============================================================================
--- (empty file)
+++ trunk/pages/tests/__init__.py       Mon Jul  6 11:09:44 2009
@@ -0,0 +1,4 @@
+"""Django page CMS test suite module"""
+from pages.tests.pages_tests import PagesTestCase
+from pages.tests.auto_render import AutoRenderTestCase
+

Added: trunk/pages/tests/auto_render.py
==============================================================================
--- (empty file)
+++ trunk/pages/tests/auto_render.py    Mon Jul  6 11:09:44 2009
@@ -0,0 +1,116 @@
+# -*- coding: utf-8 -*-
+"""Auto render test suite"""
+import django
+from django.test import TestCase
+import settings
+from pages.http import auto_render, AutoRenderHttpError
+from django.test.client import Client
+from django.http import HttpResponse, HttpResponseRedirect
+
+class AutoRenderTestCase(TestCase):
+    """Auto render test suite class"""
+
+    def test_13_auto_render(self):
+        """
+        Call an @auto_render decorated view with allowed keyword argument
+        combinations.
+        """
+        @auto_render
+        def testview(request, *args, **kwargs):
+            assert 'only_context' not in kwargs
+            assert 'template_name' not in kwargs
+            return 'tests/auto_render.txt', locals()
+        response = testview(None)
+        self.assertEqual(response.__class__, HttpResponse)
+        self.assertEqual(response.content,
+                         "template_name: 'tests/auto_render.txt', "
+                         "only_context: ''\n")
+        self.assertEqual(testview(None, only_context=True),
+                         {'args': (), 'request': None, 'kwargs': {}})
+        response = testview(None, only_context=False)
+        self.assertEqual(response.__class__, HttpResponse)
+        self.assertEqual(response.content,
+                         "template_name: 'tests/auto_render.txt', "
+                         "only_context: ''\n")
+        response = testview(None, template_name='tests/auto_render2.txt')
+        self.assertEqual(response.__class__, HttpResponse)
+        self.assertEqual(response.content,
+                         "alternate  
template_name: 'tests/auto_render2.txt', "
+                         "only_context: ''\n")
+
+    def test_14_auto_render_httpresponse(self):
+        """
+        Call an @auto_render decorated view which returns an HttpResponse  
with
+        allowed keyword argument combinations.
+        """
+        @auto_render
+        def testview(request, *args, **kwargs):
+            assert 'only_context' not in kwargs
+            assert 'template_name' not in kwargs
+            return HttpResponse(repr(sorted(locals().items())))
+        response = testview(None)
+        self.assertEqual(response.__class__, HttpResponse)
+        self.assertEqual(response.content,
+                         "[('args', ()), ('kwargs', {}), ('request',  
None)]")
+        self.assertOnlyContextException(testview)
+        self.assertEqual(testview(None, only_context=False).__class__,
+                         HttpResponse)
+        response = testview(None, template_name='tests/auto_render2.txt')
+        self.assertEqual(response.__class__, HttpResponse)
+        self.assertEqual(response.content,
+                         "[('args', ()), ('kwargs', {}), ('request',  
None)]")
+
+    def test_15_auto_render_redirect(self):
+        """Call an @auto_render decorated view which returns an
+        HttpResponseRedirect with allowed keyword argument combinations."""
+        @auto_render
+        def testview(request, *args, **kwargs):
+            assert 'only_context' not in kwargs
+            assert 'template_name' not in kwargs
+            return HttpResponseRedirect(repr(sorted(locals().items())))
+        response = testview(None)
+        self.assertEqual(response.__class__, HttpResponseRedirect)
+        self.assertOnlyContextException(testview)
+        self.assertEqual(testview(None, only_context=False).__class__,
+                         HttpResponseRedirect)
+        response = testview(None, template_name='tests/auto_render2.txt')
+        self.assertEqual(response.__class__, HttpResponseRedirect)
+
+    def test_16_auto_render_any_httpresponse(self):
+        """Call an @auto_render decorated view which returns an
+        arbitrary HttpResponse subclass with allowed keyword argument
+        combinations."""
+
+        class MyResponse(HttpResponse): pass
+        @auto_render
+        def testview(request, *args, **kwargs):
+            assert 'only_context' not in kwargs
+            assert 'template_name' not in kwargs
+            return MyResponse(repr(sorted(locals().items())))
+        response = testview(None)
+        self.assertEqual(response.__class__, MyResponse)
+        self.assertOnlyContextException(testview)
+        self.assertEqual(response.content,
+                         "[('MyResponse', "
+                         "<class 'pages.tests.auto_render.MyResponse'>), "
+                         "('args', ()), ('kwargs', {}), ('request',  
None)]")
+        self.assertEqual(testview(None, only_context=False).__class__,
+                         MyResponse)
+        response = testview(None, template_name='tests/auto_render2.txt')
+        self.assertEqual(response.__class__, MyResponse)
+        self.assertEqual(response.content,
+                         "[('MyResponse', "
+                         "<class 'pages.tests.auto_render.MyResponse'>), "
+                         "('args', ()), ('kwargs', {}), ('request',  
None)]")
+
+    def assertOnlyContextException(self, view):
+        """If an @auto_render-decorated view returns an HttpResponse
+        and is called with ``only_context=True``, it should raise an
+        appropriate exception."""
+
+        try:
+            view(None, only_context=True)
+        except Exception, e:
+            self.assertTrue(isinstance(e, AutoRenderHttpError))
+        else:
+            assert False, 'Exception expected'

Added: trunk/pages/tests/pages_tests.py
==============================================================================
--- (empty file)
+++ trunk/pages/tests/pages_tests.py    Mon Jul  6 11:09:44 2009
@@ -0,0 +1,578 @@
+# -*- coding: utf-8 -*-
+"""Django page CMS test suite module"""
+import django
+from django.test import TestCase
+import settings
+from pages.models import Page, Content, PagePermission
+from django.test.client import Client
+from django.template import Template, RequestContext, TemplateDoesNotExist
+from django.http import HttpResponse, HttpResponseRedirect
+
+class PagesTestCase(TestCase):
+    """Django page CMS test suite class"""
+    fixtures = ['tests.json']
+    counter = 1
+
+    def get_new_page_data(self):
+        """Helper method for creating page datas"""
+        page_data = {'title':'test page %d' % self.counter,
+            'slug':'test-page-%d' % self.counter, 'language':'en-us',
+            'sites':[2], 'status':Page.PUBLISHED}
+        self.counter = self.counter + 1
+        return page_data
+
+    def test_01_add_page(self):
+        """Test that the add admin page could be displayed via the
+        admin"""
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        response = c.get('/admin/pages/page/add/')
+        self.assertEqual(response.status_code, 200)
+
+
+    def test_02_create_page(self):
+        """Test that a page can be created via the admin."""
+        setattr(settings, "SITE_ID", 2)
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        response = c.post('/admin/pages/page/add/', page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+        slug_content =  
Content.objects.get_content_slug_by_slug(page_data['slug'])
+        assert(slug_content is not None)
+        page = slug_content.page
+        self.assertEqual(page.title(), page_data['title'])
+        self.assertEqual(page.slug(), page_data['slug'])
+        self.assertNotEqual(page.last_modification_date, None)
+
+    def test_03_slug_collision(self):
+        """Test a slug collision."""
+        setattr(settings, "PAGE_UNIQUE_SLUG_REQUIRED", True)
+
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        response = c.post('/admin/pages/page/add/', page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+
+        setattr(settings, "PAGE_UNIQUE_SLUG_REQUIRED", False)
+
+        response = c.post('/admin/pages/page/add/', page_data)
+        self.assertEqual(response.status_code, 200)
+
+        page1 =  
Content.objects.get_content_slug_by_slug(page_data['slug']).page
+        page_data['position'] = 'first-child'
+        page_data['target'] = page1.id
+        response = c.post('/admin/pages/page/add/', page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+        page2 =  
Content.objects.get_content_slug_by_slug(page_data['slug']).page
+        self.assertNotEqual(page1.id, page2.id)
+
+    def test_04_details_view(self):
+        """Test the details view"""
+
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        try:
+            response = c.get('/pages/')
+        except TemplateDoesNotExist, e:
+            if e.args != ('404.html',):
+                raise
+
+        page_data = self.get_new_page_data()
+        page_data['status'] = Page.DRAFT
+        response = c.post('/admin/pages/page/add/', page_data)
+        try:
+            response = c.get('/pages/')
+        except TemplateDoesNotExist, e:
+            if e.args != ('404.html',):
+                raise
+
+        page_data = self.get_new_page_data()
+        page_data['status'] = Page.PUBLISHED
+        page_data['slug'] = 'test-page-2'
+        response = c.post('/admin/pages/page/add/', page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+
+        response = c.get('/pages/test-page-2/')
+        self.assertEqual(response.status_code, 200)
+
+    def test_05_edit_page(self):
+        """Test that a page can edited via the admin"""
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        response = c.post('/admin/pages/page/add/', page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+        page = Page.objects.all()[0]
+        response = c.get('/admin/pages/page/%d/' % page.id)
+        self.assertEqual(response.status_code, 200)
+        page_data['title'] = 'changed title'
+        page_data['body'] = 'changed body'
+        response = c.post('/admin/pages/page/%d/' % page.id, page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+        page = Page.objects.get(id=page.id)
+        self.assertEqual(page.title(), 'changed title')
+        body = Content.objects.get_content(page, 'en-us', 'body')
+        self.assertEqual(body, 'changed body')
+
+    def test_06_site_framework(self):
+        """Test the site framework, and test if it's possible to
+        disable it"""
+
+        """
+        # this kind of hacks doesn't work anymore
+        setattr(settings, "SITE_ID", 2)
+        setattr(settings, "PAGE_USE_SITE_ID", True)
+
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        page_data["sites"] = [2]
+        response = c.post('/admin/pages/page/add/', page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+
+        page =  
Content.objects.get_content_slug_by_slug(page_data['slug']).page
+        self.assertEqual(page.sites.count(), 1)
+        self.assertEqual(page.sites.all()[0].id, 2)
+
+        page_data = self.get_new_page_data()
+        page_data["sites"] = [3]
+        response = c.post('/admin/pages/page/add/', page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+
+        # we cannot get a slug that doesn't exist
+        content = Content.objects.get_content_slug_by_slug("this doesn't  
exist")
+        self.assertEqual(content, None)
+
+        # we cannot get the data posted on another site
+        content =  
Content.objects.get_content_slug_by_slug(page_data['slug'])
+        self.assertEqual(content, None)
+
+        setattr(settings, "SITE_ID", 3)
+        page =  
Content.objects.get_content_slug_by_slug(page_data['slug']).page
+        self.assertEqual(page.sites.count(), 1)
+        self.assertEqual(page.sites.all()[0].id, 3)
+
+        # with param
+        self.assertEqual(Page.objects.on_site(2).count(), 1)
+        self.assertEqual(Page.objects.on_site(3).count(), 1)
+
+        # without param
+        self.assertEqual(Page.objects.on_site().count(), 1)
+        setattr(settings, "SITE_ID", 2)
+        self.assertEqual(Page.objects.on_site().count(), 1)
+
+        page_data = self.get_new_page_data()
+        page_data["sites"] = [2, 3]
+        response = c.post('/admin/pages/page/add/', page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+
+        self.assertEqual(Page.objects.on_site(3).count(), 2)
+        self.assertEqual(Page.objects.on_site(2).count(), 2)
+        self.assertEqual(Page.objects.on_site().count(), 2)
+
+        setattr(settings, "PAGE_USE_SITE_ID", False)
+
+        # we should get everything
+        self.assertEqual(Page.objects.on_site().count(), 3)"""
+
+    def test_07_languages(self):
+        """Test post a page with different languages
+        and test that the default view works correctly."""
+        c = Client()
+        user = c.login(username= 'batiste', password='b')
+
+        # test that the default language setting is used add page admin
+        # and not accept-language in HTTP requests.
+        """setattr(settings, "PAGE_DEFAULT_LANGUAGE", 'de')
+        response = c.get('/admin/pages/page/add/')
+        self.assertContains(response, 'value="de" selected="selected"')
+        setattr(settings, "PAGE_DEFAULT_LANGUAGE", 'fr-ch')
+        response = c.get('/admin/pages/page/add/')
+        self.assertContains(response, 'value="fr-ch"  
selected="selected"')"""
+
+        page_data = self.get_new_page_data()
+        page_data["title"] = 'english title'
+        response = c.post('/admin/pages/page/add/', page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+
+        page = Page.objects.all()[0]
+
+        # this test only works in version superior of 1.0.2
+        django_version =  django.get_version().rsplit()[0].split('.')
+        if len(django_version) > 2:
+            major, middle, minor = [int(v) for v in django_version]
+        else:
+            major, middle = [int(v) for v in django_version]
+        if major >= 1 and middle > 0:
+            response = c.get('/admin/pages/page/%d/?language=de' % page.id)
+            self.assertContains(response, 'value="de" selected="selected"')
+
+        # add a french version of the same page
+        page_data["language"] = 'fr-ch'
+        page_data["title"] = 'french title'
+        response = c.post('/admin/pages/page/%d/' % page.id, page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+
+        setattr(settings, "PAGE_DEFAULT_LANGUAGE", 'en-us')
+
+        # test that the frontend view use the good parameters
+        # I cannot find a way of setting the accept-language HTTP
+        # header so I used django_language cookie instead
+        c = Client()
+        c.cookies["django_language"] = 'en-us'
+        response = c.get('/pages/')
+        self.assertContains(response, 'english title')
+        self.assertContains(response, 'lang="en-us"')
+        self.assertNotContains(response, 'french title')
+
+        c = Client()
+        c.cookies["django_language"] = 'fr-ch'
+        response = c.get('/pages/')
+        self.assertContains(response, 'french title')
+        self.assertContains(response, 'lang="fr-ch"')
+
+        self.assertNotContains(response, 'english title')
+
+        # this should be mapped to the fr-ch content
+        c = Client()
+        c.cookies["django_language"] = 'fr-fr'
+        response = c.get('/pages/')
+        self.assertContains(response, 'french title')
+        self.assertContains(response, 'lang="fr-ch"')
+
+
+    def test_08_revision(self):
+        """Test that a page can edited several times."""
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        response = c.post('/admin/pages/page/add/', page_data)
+        page = Page.objects.all()[0]
+
+        page_data['body'] = 'changed body'
+        response = c.post('/admin/pages/page/%d/' % page.id, page_data)
+         
self.assertEqual(Content.objects.get_content(page, 'en-us', 'body'), 'changed  
body')
+
+        page_data['body'] = 'changed body 2'
+        response = c.post('/admin/pages/page/%d/' % page.id, page_data)
+         
self.assertEqual(Content.objects.get_content(page, 'en-us', 'body'), 'changed  
body 2')
+
+        response = c.get('/pages/')
+        self.assertContains(response, 'changed body 2', 1)
+
+        setattr(settings, "PAGE_CONTENT_REVISION", False)
+
+         
self.assertEqual(Content.objects.get_content(page, 'en-us', 'body'), 'changed  
body 2')
+
+    def test_09_placeholder(self):
+        """
+        Test that the placeholder is correctly displayed in
+        the admin
+        """
+        setattr(settings, "SITE_ID", 2)
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        page_data['template'] = 'pages/nice.html'
+        response = c.post('/admin/pages/page/add/', page_data)
+        page = Page.objects.all()[0]
+        response = c.get('/admin/pages/page/%d/' % page.id)
+        self.assertEqual(response.status_code, 200)
+
+        self.assertContains(response, 'name="right-column"', 1)
+
+    def test_10_directory_slug(self):
+        """
+        Test diretory slugs
+        """
+        setattr(settings, "PAGE_UNIQUE_SLUG_REQUIRED", False)
+        c = Client()
+        c.login(username= 'batiste', password='b')
+
+        page_data = self.get_new_page_data()
+        page_data['title'] = 'parent title'
+        page_data['slug'] = 'same-slug'
+        response = c.post('/admin/pages/page/add/', page_data)
+        # the redirect tell that the page has been create correctly
+        self.assertRedirects(response, '/admin/pages/page/')
+
+        page = Page.objects.all()[0]
+
+        response = c.post('/admin/pages/page/add/', page_data)
+        # we cannot create 2 root page with the same slug
+        # this assert test that the creation fails as wanted
+        self.assertEqual(response.status_code, 200)
+
+        response = c.get('/pages/same-slug/')
+
+        page1 =  
Content.objects.get_content_slug_by_slug(page_data['slug']).page
+        self.assertEqual(page1.id, page.id)
+
+        page_data['title'] = 'children title'
+        page_data['target'] = page1.id
+        page_data['position'] = 'first-child'
+        response = c.post('/admin/pages/page/add/', page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+
+        # finaly test that we can get every page according the path
+        response = c.get('/pages/same-slug/')
+        self.assertContains(response, "parent title", 2)
+
+        response = c.get('/pages/same-slug/same-slug/')
+        self.assertContains(response, "children title", 2)
+
+    def test_11_show_content_tag(self):
+        """
+        Test the {% show_content %} template tag
+        """
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        response = c.post('/admin/pages/page/add/', page_data)
+        page = Page.objects.all()[0]
+        class request:
+            REQUEST = {'language': 'en'}
+            GET = {}
+        context = RequestContext(request, {'page': page})
+        template = Template('{% load pages_tags %}'
+                            '{% show_content page "title" "en-us" %}')
+        self.assertEqual(template.render(context), page_data['title'])
+        template = Template('{% load pages_tags %}'
+                            '{% show_content page "title" %}')
+        self.assertEqual(template.render(context), page_data['title'])
+
+    def test_12_get_content_tag(self):
+        """
+        Test the {% get_content %} template tag
+        """
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        response = c.post('/admin/pages/page/add/', page_data)
+        page = Page.objects.all()[0]
+        class request:
+            REQUEST = {'language': 'en'}
+            GET = {}
+        context = RequestContext(request, {'page': page})
+        template = Template('{% load pages_tags %}'
+                            '{% get_content page "title" "en-us" as  
content %}'
+                            '{{ content }}')
+        self.assertEqual(template.render(context), page_data['title'])
+        template = Template('{% load pages_tags %}'
+                            '{% get_content page "title" as content %}'
+                            '{{ content }}')
+        self.assertEqual(template.render(context), page_data['title'])
+
+
+    def test_17_request_mockup(self):
+        from pages.utils import get_request_mock
+        request = get_request_mock()
+        self.assertEqual(hasattr(request, 'session'), True)
+
+    def test_18_tree_admin_interface(self):
+        """
+        Test that moving page in the tree is working properly
+        using the admin interface
+        """
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        page_data['slug'] = 'root'
+
+        response = c.post('/admin/pages/page/add/', page_data)
+
+        root_page = Content.objects.get_content_slug_by_slug('root').page
+        page_data['position'] = 'first-child'
+        page_data['target'] = root_page.id
+        page_data['slug'] = 'child-1'
+        response = c.post('/admin/pages/page/add/', page_data)
+
+        child_1 = Content.objects.get_content_slug_by_slug('child-1').page
+
+        page_data['slug'] = 'child-2'
+        response = c.post('/admin/pages/page/add/', page_data)
+
+        child_2 = Content.objects.get_content_slug_by_slug('child-2').page
+
+        self.assertEqual(str(Page.objects.all()),
+            "[<Page: root>, <Page: child-2>, <Page: child-1>]")
+        response = c.post('/admin/pages/page/%d/move-page/' % child_1.id,
+            {'position':'first-child', 'target':root_page.id})
+
+        self.assertEqual(str(Page.objects.all()),
+            "[<Page: root>, <Page: child-1>, <Page: child-2>]")
+
+        response = c.post('/admin/pages/page/%d/move-page/' % child_2.id,
+            {'position': 'left', 'target': child_1.id})
+
+        self.assertEqual(str(Page.objects.all()),
+            "[<Page: root>, <Page: child-2>, <Page: child-1>]")
+
+
+    def test_19_tree(self):
+        """
+        Test that the navigation tree works properly with mptt
+        """
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        page_data['slug'] = 'page1'
+        response = c.post('/admin/pages/page/add/', page_data)
+        page_data['slug'] = 'page2'
+        response = c.post('/admin/pages/page/add/', page_data)
+        page_data['slug'] = 'page3'
+        response = c.post('/admin/pages/page/add/', page_data)
+        self.assertEqual(str(Page.objects.navigation()),
+            "[<Page: page1>, <Page: page2>, <Page: page3>]")
+
+        p1 = Content.objects.get_content_slug_by_slug('page1').page
+        p2 = Content.objects.get_content_slug_by_slug('page2').page
+        p3 = Content.objects.get_content_slug_by_slug('page3').page
+
+        p2.move_to(p1, 'left')
+        p2.save()
+
+        self.assertEqual(str(Page.objects.navigation()),
+            "[<Page: page2>, <Page: page1>, <Page: page3>]")
+
+        p3.move_to(p2, 'left')
+        p3.save()
+
+        self.assertEqual(str(Page.objects.navigation()),
+            "[<Page: page3>, <Page: page2>, <Page: page1>]")
+
+        p1 = Content.objects.get_content_slug_by_slug('page1').page
+        p2 = Content.objects.get_content_slug_by_slug('page2').page
+        p3 = Content.objects.get_content_slug_by_slug('page3').page
+
+        p3.move_to(p1, 'first-child')
+        p2.move_to(p1, 'first-child')
+
+        self.assertEqual(str(Page.objects.navigation()),
+            "[<Page: page1>]")
+
+        p3 = Content.objects.get_content_slug_by_slug('page3').page
+        p3.move_to(p1, 'left')
+
+        self.assertEqual(str(Page.objects.navigation()),
+            "[<Page: page3>, <Page: page1>]")
+
+
+    def test_20_ajax_language(self):
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        # Activate a language other thant settings.LANGUAGE_CODE
+        response = c.post('/i18n/setlang/', {'language':'fr-ch' })
+        self.assertEqual(c.session.get('django_language', False), 'fr-ch')
+
+        # Make sure we're in french
+        response = c.get('/admin/pages/page/')
+        self.assertEqual(response.status_code, 200)
+        self.assertTrue('Auteur' in response.content)
+
+        # Create some pages (taken from test_18_tree_admin_interface)
+        page_data = self.get_new_page_data()
+        page_data['slug'] = 'root'
+
+        response = c.post('/admin/pages/page/add/', page_data)
+
+        root_page = Content.objects.get_content_slug_by_slug('root').page
+        page_data['position'] = 'first-child'
+        page_data['target'] = root_page.id
+        page_data['slug'] = 'child-1'
+        response = c.post('/admin/pages/page/add/', page_data)
+
+        child_1 = Content.objects.get_content_slug_by_slug('child-1').page
+
+        page_data['slug'] = 'child-2'
+        response = c.post('/admin/pages/page/add/', page_data)
+
+        child_2 = Content.objects.get_content_slug_by_slug('child-2').page
+
+        self.assertEqual(str(Page.objects.all()),
+            "[<Page: root>, <Page: child-2>, <Page: child-1>]")
+
+        """
+        The relevant bit, fixed by rev 501: the response issued by a move
+        command returns content localized in settings.LANGUAGE_CODE  
(i.e. 'en“)
+        even though the original AJAX request passed in a the correct
+        session ID localizing this client as fr-ch
+
+        This is probably because the LocaleMiddleware gets instantiated
+        with a couple request_mocks which have no real connection to the
+        AJAX request *but* django.utils.translation caches the active
+        language on a per thread basis.
+
+        This means that the first "bogus" call to  
LocaleMiddleware.process_request
+        will "kill" the localization data for the AJAX request.
+
+        Rev. 501 fixes this by passing in the language code from the  
original request.
+
+        """
+        response = c.post('/admin/pages/page/%d/move-page/' % child_1.id,
+            {'position':'first-child', 'target':root_page.id})
+
+        # Make sure the content response we got was in french
+        self.assertTrue('Auteur' in response.content)
+
+    def test_21_view_context(self):
+        """
+        Test that the default view can only return the context
+        """
+
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        page_data['slug'] = 'page1'
+        # create a page for the example otherwise you will get a Http404  
error
+        response = c.post('/admin/pages/page/add/', page_data)
+        page1 = Content.objects.get_content_slug_by_slug('page1').page
+
+        from pages.views import details
+        from pages.utils import get_request_mock
+        request = get_request_mock()
+        context = details(request, only_context=True)
+        self.assertEqual(context['current_page'], page1)
+
+    def test_22_calculated_status_bug(self):
+        """
+        Test the issue 100
+        http://code.google.com/p/django-page-cms/issues/detail?id=100
+        """
+        setattr(settings, "PAGE_SHOW_START_DATE", True)
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        page_data['slug'] = 'page1'
+        # create a page for the example otherwise you will get a Http404  
error
+        response = c.post('/admin/pages/page/add/', page_data)
+        page1 = Content.objects.get_content_slug_by_slug('page1').page
+
+        page1.status = Page.DRAFT
+        page1.save()
+
+        page1.get_calculated_status()
+        setattr(settings, "PAGE_SHOW_START_DATE", False)
+
+    def test_23_slug_bug(self):
+        """
+        Test the issue 97
+        http://code.google.com/p/django-page-cms/issues/detail?id=97
+        """
+        c = Client()
+        c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        page_data['slug'] = 'page1'
+        # create a page for the example otherwise you will get a Http404  
error
+        response = c.post('/admin/pages/page/add/', page_data)
+
+        response = c.get('/pages/page1/')
+        self.assertEqual(response.status_code, 200)
+
+        try:
+            response = c.get('/pages/toto/page1/')
+        except TemplateDoesNotExist, e:
+            if e.args != ('404.html',):
+                raise

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pinax-updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/pinax-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to