From 70d8c5c22ced17e150a6ffbf1abd294915e635fc Mon Sep 17 00:00:00 2001 From: Anthony Mangano Date: Thu, 11 May 2017 14:18:00 -0400 Subject: [PATCH] update footer endpoint in branding api to support inclusion of language selector --- lms/djangoapps/branding/tests/test_views.py | 49 +++++++++++++ lms/djangoapps/branding/views.py | 35 ++++++--- lms/static/sass/base/_base.scss | 2 +- lms/static/sass/shared/_footer-edx.scss | 28 ++++++-- lms/static/sass/shared/_footer.scss | 12 ++++ lms/templates/footer.html | 4 ++ .../widgets/footer-language-selector.html | 72 +++++++++++++++++++ themes/edx.org/lms/templates/footer.html | 7 +- themes/red-theme/lms/templates/footer.html | 4 ++ .../stanford-style/lms/templates/footer.html | 5 ++ 10 files changed, 200 insertions(+), 18 deletions(-) create mode 100644 lms/templates/widgets/footer-language-selector.html diff --git a/lms/djangoapps/branding/tests/test_views.py b/lms/djangoapps/branding/tests/test_views.py index 2098f654d9..0f123c2ad4 100644 --- a/lms/djangoapps/branding/tests/test_views.py +++ b/lms/djangoapps/branding/tests/test_views.py @@ -3,6 +3,7 @@ import json import urllib from django.test import TestCase +from django.contrib.auth.models import User from django.core.urlresolvers import reverse from django.conf import settings @@ -10,6 +11,8 @@ import mock import ddt from config_models.models import cache from branding.models import BrandingApiConfig +from openedx.core.djangoapps.dark_lang.models import DarkLangConfig +from openedx.core.djangoapps.lang_pref.api import released_languages from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin from openedx.core.djangoapps.theming.tests.test_util import with_comprehensive_theme_context from student.tests.factories import UserFactory @@ -208,6 +211,38 @@ class TestFooter(TestCase): else: self.assertNotIn("vendor", resp.content) + @ddt.data( + # OpenEdX + (None, None, '1'), + (None, 'eo', '1'), + (None, None, ''), + + # EdX.org + ('edx.org', None, '1'), + ('edx.org', 'eo', '1'), + ('edx.org', None, '') + ) + @ddt.unpack + def test_include_language_selector(self, theme, language, include_language_selector): + self._set_feature_flag(True) + DarkLangConfig(released_languages='en,eo,es-419,fr', enabled=True, changed_by=User().save()).save() + + with with_comprehensive_theme_context(theme): + params = { + key: val for key, val in [ + ('language', language), ('include-language-selector', include_language_selector) + ] if val + } + resp = self._get_footer(accepts="text/html", params=params) + + self.assertEqual(resp.status_code, 200) + + if include_language_selector: + selected_language = language if language else 'en' + self._verify_language_selector(resp.content, selected_language) + else: + self.assertNotIn('footer-language-selector', resp.content) + def test_no_supported_accept_type(self): self._set_feature_flag(True) resp = self._get_footer(accepts="application/x-shockwave-flash") @@ -230,6 +265,20 @@ class TestFooter(TestCase): return self.client.get(url, HTTP_ACCEPT=accepts) + def _verify_language_selector(self, content, selected_language): + """ Verify that the language selector is present and correctly configured.""" + # Verify the selector is included + self.assertIn('footer-language-selector', content) + + # Verify the correct language is selected + self.assertIn('