Skip to content

Commit

Permalink
Merge pull request django-cms#4110 from yakky/feature/fix_languages
Browse files Browse the repository at this point in the history
Fix languages
  • Loading branch information
yakky committed May 13, 2015
2 parents f5b2203 + 9cc5902 commit 5af5648
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 18 deletions.
31 changes: 24 additions & 7 deletions cms/tests/page.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
# -*- coding: utf-8 -*-
from __future__ import with_statement
import datetime
from django.contrib.auth import get_user_model
from django.db import transaction
from cms.exceptions import PublicIsUnmodifiable, PublicVersionNeeded
from cms.test_utils.compat import skipIf
from cms.utils.i18n import force_language
import os.path

from django.conf import settings
from django.core.cache import cache
from django.contrib.sites.models import Site
from django.contrib import admin
from django.contrib.sites.models import Site
from django.contrib.auth import get_user_model
from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse
from django.db import transaction
from django.db.models import signals
from django.http import HttpRequest, HttpResponse, HttpResponseNotFound
from django.test.utils import override_settings
Expand All @@ -23,18 +20,21 @@
from cms import constants
from cms.admin.forms import AdvancedSettingsForm
from cms.admin.pageadmin import PageAdmin
from cms.api import create_page, add_plugin
from cms.api import create_page, add_plugin, create_title, publish_page
from cms.exceptions import PublicIsUnmodifiable, PublicVersionNeeded
from cms.middleware.user import CurrentUserMiddleware
from cms.models import Page, Title, EmptyTitle
from cms.models.placeholdermodel import Placeholder
from cms.models.pluginmodel import CMSPlugin
from cms.signals import pre_save_page, post_save_page
from cms.sitemaps import CMSSitemap
from cms.templatetags.cms_tags import get_placeholder_content
from cms.test_utils.compat import skipIf
from cms.test_utils.testcases import (CMSTestCase, URL_CMS_PAGE, URL_CMS_PAGE_ADD)
from cms.test_utils.util.context_managers import LanguageOverride, UserLoginContext
from cms.utils import get_cms_setting
from cms.utils.compat.dj import installed_apps
from cms.utils.i18n import force_language
from cms.utils.page_resolver import get_page_from_request, is_valid_url
from cms.utils.page import is_valid_page_slug, get_available_slug
from cms.utils.urlutils import admin_reverse
Expand Down Expand Up @@ -72,6 +72,23 @@ def test_add_page(self):
response = self.client.get(URL_CMS_PAGE_ADD)
self.assertEqual(response.status_code, 200)

def test_absolute_url(self):
user = self.get_superuser()
page = create_page("page", "nav_playground.html", "en", published=True)
create_title("fr", "french home", page)
page_2 = create_page("inner", "nav_playground.html", "en", published=True, parent=page)
create_title("fr", "french inner", page_2)
publish_page(page_2, user, "fr")

self.assertEqual(page_2.get_absolute_url(), '/en/inner/')
self.assertEqual(page_2.get_absolute_url(language='en'), '/en/inner/')
self.assertEqual(page_2.get_absolute_url(language='fr'), '/fr/french-inner/')

with force_language('fr'):
self.assertEqual(page_2.get_absolute_url(), '/fr/french-inner/')
self.assertEqual(page_2.get_absolute_url(language='en'), '/en/inner/')
self.assertEqual(page_2.get_absolute_url(language='fr'), '/fr/french-inner/')

def test_create_page_admin(self):
"""
Test that a page can be created via the admin
Expand Down
23 changes: 21 additions & 2 deletions cms/tests/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
from django.template import Variable
from django.test.utils import override_settings

from cms.api import create_page
from cms.api import create_page, create_title, publish_page
from cms.apphook_pool import apphook_pool
from cms.models import PagePermission
from cms.models import PagePermission, UserSettings, Placeholder
from cms.test_utils.testcases import CMSTestCase
from cms.test_utils.util.fuzzy_int import FuzzyInt
from cms.utils.conf import get_cms_setting
Expand Down Expand Up @@ -171,6 +171,25 @@ def test_edit_permission(self):
self.assertContains(response, "cms_toolbar-item_switch_save-edit", 1, 200)


def test_toolbar_switch_urls(self):
user = self.get_superuser()
user_settings = UserSettings(language="en", user=user)
placeholder = Placeholder(slot="clipboard")
placeholder.save()
user_settings.clipboard = placeholder
user_settings.save()

page = create_page("page", "nav_playground.html", "en", published=True)
create_title("fr", "french home", page)
publish_page(page, user, "fr")

with self.login_user_context(user):
response = self.client.get("/fr/?%s" % get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON'))
self.assertContains(response, "/fr/?%s" % get_cms_setting('CMS_TOOLBAR_URL__EDIT_OFF'), 1, 200)
response = self.client.get("/fr/?%s" % get_cms_setting('CMS_TOOLBAR_URL__EDIT_OFF'))
self.assertContains(response, "/fr/?%s" % get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON'), 1, 200)


@override_settings(ROOT_URLCONF='cms.test_utils.project.urls')
class ContextTests(CMSTestCase):

Expand Down
20 changes: 11 additions & 9 deletions cms/toolbar/toolbar.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,21 +224,23 @@ def get_object_pk(self):

def get_object_public_url(self):
if self.obj:
try:
return self.obj.get_public_url()
except:
pass
with force_language(self.request.LANGUAGE_CODE):
try:
return self.obj.get_public_url()
except:
pass
return ''

def get_object_draft_url(self):
if self.obj:
try:
return self.obj.get_draft_url()
except:
with force_language(self.request.LANGUAGE_CODE):
try:
return self.obj.get_absolute_url()
return self.obj.get_draft_url()
except:
pass
try:
return self.obj.get_absolute_url()
except:
pass
return ''

# Internal API
Expand Down

0 comments on commit 5af5648

Please sign in to comment.