diff --git a/common/test/acceptance/tests/lms/test_lms_dashboard.py b/common/test/acceptance/tests/lms/test_lms_dashboard.py index 7422578816..96209c432c 100644 --- a/common/test/acceptance/tests/lms/test_lms_dashboard.py +++ b/common/test/acceptance/tests/lms/test_lms_dashboard.py @@ -5,9 +5,10 @@ End-to-end tests for the main LMS Dashboard (aka, Student Dashboard). from __future__ import absolute_import import datetime - +import re import six +from six.moves.urllib.parse import unquote # pylint: disable=import-error from common.test.acceptance.fixtures.course import CourseFixture from common.test.acceptance.pages.common.auto_auth import AutoAuthPage from common.test.acceptance.pages.lms.dashboard import DashboardPage @@ -170,18 +171,30 @@ class LmsDashboardPageTest(BaseLmsDashboardTest): self.assertEqual(twitter_widget.attrs('title')[0], 'Share on Twitter') self.assertEqual(twitter_widget.attrs('data-tooltip')[0], 'Share on Twitter') self.assertEqual(twitter_widget.attrs('target')[0], '_blank') - self.assertIn(twitter_url, twitter_widget.attrs('href')[0]) - self.assertIn(twitter_url, twitter_widget.attrs('onclick')[0]) + self._assert_social_url(twitter_widget.attrs('href')[0], unquote(twitter_url), r"\'(.*?)\'\,") + self._assert_social_url(twitter_widget.attrs('onclick')[0], unquote(twitter_url), r"\'(.*?)\'\,") facebook_widget = self.dashboard_page.get_course_social_sharing_widget('facebook') facebook_url = ("https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fcustom%2Fcourse%2Furl%3F" "utm_campaign%3Dsocial-sharing-db%26utm_medium%3Dsocial%26utm_source%3Dfacebook&" - "quote=I%27m+taking+Test") + "quote=I%27m+taking+Test+Course") self.assertEqual(facebook_widget.attrs('title')[0], 'Share on Facebook') self.assertEqual(facebook_widget.attrs('data-tooltip')[0], 'Share on Facebook') self.assertEqual(facebook_widget.attrs('target')[0], '_blank') - self.assertIn(facebook_url, facebook_widget.attrs('href')[0]) - self.assertIn(facebook_url, facebook_widget.attrs('onclick')[0]) + self._assert_social_url(facebook_widget.attrs('onclick')[0], unquote(facebook_url), r"\'(.*?);") + self._assert_social_url(facebook_widget.attrs('href')[0], unquote(facebook_url), r"^(.*)\;") + + def _assert_social_url(self, url, expected_url, pattern): + """ + will remove byte characters from specific query parameter + """ + url = unquote(url) + social_url_search = re.search(pattern, url) + url_split = (social_url_search.group(1) if social_url_search else url).split('?') + query_parameters = url_split[2].split('&') + urls = url_split[:2] + query_parameters + for query_parameter in urls: + self.assertIn(query_parameter.strip("'"), expected_url) def test_ended_course_date(self): """ @@ -317,7 +330,6 @@ class LmsDashboardPageTest(BaseLmsDashboardTest): self.assertEqual(course_date, expected_course_date) def test_advertised_start_date(self): - """ Scenario: Course Date should be advertised start date @@ -393,7 +405,7 @@ class LmsDashboardCourseUnEnrollDialogMessageTest(BaseLmsDashboardTestMultiple): expected_track_message = u'Are you sure you want to unenroll from the verified' + \ u' ' + cert_long_name + u'' + \ - u' track of ' + course_name + u'' + \ + u' track of ' + course_name + u'' + \ u' (' + course_number + u')?' expected_refund_message = u'The refund deadline for this course has passed,so you will not receive a refund.' diff --git a/lms/templates/dashboard/_dashboard_course_listing.html b/lms/templates/dashboard/_dashboard_course_listing.html index b4468bf21f..b17efd6019 100644 --- a/lms/templates/dashboard/_dashboard_course_listing.html +++ b/lms/templates/dashboard/_dashboard_course_listing.html @@ -225,9 +225,9 @@ from util.course import get_link_for_about_page, get_encoded_course_sharing_utm_ %> % if share_settings.get('DASHBOARD_FACEBOOK', False): <% - facebook_share_url = "{url}?{utm_params}".format(url=share_url.encode('utf-8'), utm_params=encoded_utm_parameters['facebook']) + facebook_share_url = u"{url}?{utm_params}".format(url=share_url, utm_params=encoded_utm_parameters['facebook']) share_text = _("I'm taking {course_name} online with {facebook_brand}. Check it out!").format(course_name=course_overview.display_name_with_default, facebook_brand=share_settings.get('FACEBOOK_BRAND', 'edX.org')) - query_params = urllib.urlencode((('u', facebook_share_url), ('quote', share_text.encode('utf-8')),)) + query_params = urllib.urlencode((('u', facebook_share_url), ('quote', share_text),)) facebook_url = 'https://www.facebook.com/sharer/sharer.php?{query}'.format(query=query_params) share_msg = _("Share {course_name} on Facebook").format(course_name=course_overview.display_name_with_default) %> @@ -247,9 +247,9 @@ from util.course import get_link_for_about_page, get_encoded_course_sharing_utm_ % endif % if share_settings.get('DASHBOARD_TWITTER', False): <% - twitter_share_url = "{url}?{utm_params}".format(url=share_url.encode('utf-8'), utm_params=encoded_utm_parameters['twitter']) + twitter_share_url = u"{url}?{utm_params}".format(url=share_url, utm_params=encoded_utm_parameters['twitter']) default_share_text = _("I'm taking {course_name} online with {twitter_brand}. Check it out!").format(course_name=course_overview.display_name_with_default, twitter_brand=share_settings.get('TWITTER_BRAND', '@edxonline')) - share_text = urllib.quote_plus(share_settings.get('DASHBOARD_TWITTER_TEXT', default_share_text.encode('utf-8'))) + share_text = urllib.quote_plus(share_settings.get('DASHBOARD_TWITTER_TEXT', default_share_text)) twitter_url = 'https://twitter.com/intent/tweet?text=' + share_text + '%20' + urllib.quote_plus(twitter_share_url) share_msg = _("Share {course_name} on Twitter").format(course_name=course_overview.display_name_with_default) %>