"""Tests of Branding API """ from unittest import mock from django.conf import settings from django.test import TestCase from django.test.utils import override_settings from django.urls import reverse from openedx.core.djangoapps.site_configuration.tests.test_util import with_site_configuration from ..api import _footer_business_links, get_footer, get_home_url, get_logo_url test_config_disabled_contact_us = { # pylint: disable=invalid-name "CONTACT_US_ENABLE": False, } test_config_custom_url_contact_us = { # pylint: disable=invalid-name "CONTACT_US_ENABLE": True, "CONTACT_US_CUSTOM_LINK": "https://open.edx.org/", } class TestHeader(TestCase): """Test API end-point for retrieving the header. """ def test_cdn_urls_for_logo(self): # Ordinarily, we'd use `override_settings()` to override STATIC_URL, # which is what the staticfiles storage backend is using to construct the URL. # Unfortunately, other parts of the system are caching this value on module # load, which can cause other tests to fail. To ensure that this change # doesn't affect other tests, we patch the `url()` method directly instead. cdn_url = "http://cdn.example.com/static/image.png" with mock.patch('lms.djangoapps.branding.api.staticfiles_storage.url', return_value=cdn_url): logo_url = get_logo_url() assert logo_url == cdn_url def test_home_url(self): expected_url = get_home_url() assert reverse('dashboard') == expected_url class TestFooter(TestCase): """Test retrieving the footer. """ maxDiff = None @mock.patch.dict('django.conf.settings.FEATURES', {'ENABLE_MKTG_SITE': True}) @mock.patch.dict('django.conf.settings.MKTG_URLS', { "ROOT": "https://edx.org", "ENTERPRISE": "/enterprise" }) @override_settings(ENTERPRISE_MARKETING_FOOTER_QUERY_PARAMS={}, PLATFORM_NAME='\xe9dX') def test_footer_business_links_no_marketing_query_params(self): """ Enterprise marketing page values returned should be a concatenation of ROOT and ENTERPRISE marketing url values when ENTERPRISE_MARKETING_FOOTER_QUERY_PARAMS is not set. """ business_links = _footer_business_links() assert business_links[0]['url'] == 'https://edx.org/enterprise' @mock.patch.dict('django.conf.settings.FEATURES', {'ENABLE_MKTG_SITE': True}) @mock.patch.dict('django.conf.settings.MKTG_URLS', { "ROOT": "https://edx.org", "ABOUT": "/about-us", "NEWS": "/news-announcements", "CONTACT": "/contact", "CAREERS": '/careers', "FAQ": "/student-faq", "BLOG": "/edx-blog", "DONATE": "/donate", "JOBS": "/jobs", "SITE_MAP": "/sitemap", "TRADEMARKS": "/trademarks", "TOS_AND_HONOR": "/edx-terms-service", "PRIVACY": "/edx-privacy-policy", "ACCESSIBILITY": "/accessibility", "AFFILIATES": '/affiliate-program', "MEDIA_KIT": "/media-kit", "ENTERPRISE": "https://business.edx.org" }) @override_settings(PLATFORM_NAME='\xe9dX') def test_get_footer(self): actual_footer = get_footer(is_secure=True) business_url = 'https://business.edx.org/?utm_campaign=edX.org+Referral&utm_source=edX.org&utm_medium=Footer' expected_footer = { 'copyright': '\xa9 \xe9dX. All rights reserved except where noted. ' ' edX, Open edX and their respective logos are ' 'registered trademarks of edX Inc.', 'navigation_links': [ {'url': 'https://edx.org/about-us', 'name': 'about', 'title': 'About'}, {'url': 'https://business.edx.org', 'name': 'enterprise', 'title': '\xe9dX for Business'}, {'url': 'https://edx.org/edx-blog', 'name': 'blog', 'title': 'Blog'}, {'url': 'https://edx.org/news-announcements', 'name': 'news', 'title': 'News'}, {'url': 'https://example.support.edx.org/hc/en-us', 'name': 'help-center', 'title': 'Help Center'}, {'url': '/support/contact_us', 'name': 'contact', 'title': 'Contact'}, {'url': 'https://edx.org/careers', 'name': 'careers', 'title': 'Careers'}, {'url': 'https://edx.org/donate', 'name': 'donate', 'title': 'Donate'} ], 'business_links': [ {'url': 'https://edx.org/about-us', 'name': 'about', 'title': 'About'}, {'url': business_url, 'name': 'enterprise', 'title': '\xe9dX for Business'}, {'url': 'https://edx.org/affiliate-program', 'name': 'affiliates', 'title': 'Affiliates'}, {'url': 'https://open.edx.org', 'name': 'openedx', 'title': 'Open edX'}, {'url': 'https://edx.org/careers', 'name': 'careers', 'title': 'Careers'}, {'url': 'https://edx.org/news-announcements', 'name': 'news', 'title': 'News'}, ], 'more_info_links': [ {'url': 'https://edx.org/edx-terms-service', 'name': 'terms_of_service_and_honor_code', 'title': 'Terms of Service & Honor Code'}, {'url': 'https://edx.org/edx-privacy-policy', 'name': 'privacy_policy', 'title': 'Privacy Policy'}, {'url': 'https://edx.org/accessibility', 'name': 'accessibility_policy', 'title': 'Accessibility Policy'}, {'url': 'https://edx.org/trademarks', 'name': 'trademarks', 'title': 'Trademark Policy'}, {'url': 'https://edx.org/sitemap', 'name': 'sitemap', 'title': 'Sitemap'}, ], 'connect_links': [ {'url': 'https://edx.org/edx-blog', 'name': 'blog', 'title': 'Blog'}, # pylint: disable=line-too-long {'url': f'{settings.LMS_ROOT_URL}/support/contact_us', 'name': 'contact', 'title': 'Contact Us'}, {'url': 'https://example.support.edx.org/hc/en-us', 'name': 'help-center', 'title': 'Help Center'}, {'url': 'https://edx.org/media-kit', 'name': 'media_kit', 'title': 'Media Kit'}, {'url': 'https://edx.org/donate', 'name': 'donate', 'title': 'Donate'} ], 'legal_links': [ {'url': 'https://edx.org/edx-terms-service', 'name': 'terms_of_service_and_honor_code', 'title': 'Terms of Service & Honor Code'}, {'url': 'https://edx.org/edx-privacy-policy', 'name': 'privacy_policy', 'title': 'Privacy Policy'}, {'url': 'https://edx.org/accessibility', 'name': 'accessibility_policy', 'title': 'Accessibility Policy'}, {'url': 'https://edx.org/sitemap', 'name': 'sitemap', 'title': 'Sitemap'}, {'name': 'media_kit', 'title': 'Media Kit', 'url': 'https://edx.org/media-kit'} ], 'social_links': [ {'url': '#', 'action': 'Like \xe9dX on Facebook', 'name': 'facebook', 'icon-class': 'fa-facebook-square', 'title': 'Facebook'}, {'url': '#', 'action': 'Follow \xe9dX on Twitter', 'name': 'twitter', 'icon-class': 'fa-twitter-square', 'title': 'Twitter'}, {'url': '#', 'action': 'Follow \xe9dX on LinkedIn', 'name': 'linkedin', 'icon-class': 'fa-linkedin-square', 'title': 'LinkedIn'}, {'url': '#', 'action': 'Follow \xe9dX on Instagram', 'name': 'instagram', 'icon-class': 'fa-instagram', 'title': 'Instagram'}, {'url': '#', 'action': 'Subscribe to the \xe9dX subreddit', 'name': 'reddit', 'icon-class': 'fa-reddit-square', 'title': 'Reddit'} ], 'mobile_links': [], 'logo_image': 'https://edx.org/static/images/logo.png', 'openedx_link': { 'url': 'https://open.edx.org', 'image': 'https://files.edx.org/openedx-logos/open-edx-logo-tag.png', 'title': 'Powered by Open edX' }, 'edx_org_link': { 'url': 'https://www.edx.org/?' 'utm_medium=affiliate_partner' '&utm_source=opensource-partner' '&utm_content=open-edx-partner-footer-link' '&utm_campaign=open-edx-footer', 'text': 'Take free online courses at edX.org', }, } assert actual_footer == expected_footer @with_site_configuration(configuration=test_config_disabled_contact_us) def test_get_footer_disabled_contact_form(self): """ Test retrieving the footer with disabled contact form. """ actual_footer = get_footer(is_secure=True) assert any(((l['name'] == 'contact') for l in actual_footer['connect_links'])) is False assert any(((l['name'] == 'contact') for l in actual_footer['navigation_links'])) is False @with_site_configuration(configuration=test_config_custom_url_contact_us) def test_get_footer_custom_contact_url(self): """ Test retrieving the footer with custom contact form url. """ actual_footer = get_footer(is_secure=True) contact_us_link = [l for l in actual_footer['connect_links'] if l['name'] == 'contact'][0] assert contact_us_link['url'] == test_config_custom_url_contact_us['CONTACT_US_CUSTOM_LINK'] navigation_link_contact_us = [l for l in actual_footer['navigation_links'] if l['name'] == 'contact'][0] assert navigation_link_contact_us['url'] == test_config_custom_url_contact_us['CONTACT_US_CUSTOM_LINK']