[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#739070: qa.debian.org: [new PTS] Links to developer page not working if email contains the symbol +



Hi distro-tracker developers,

Please review my patch for properly encoding the developer pages URL.
The second file should not be applied, it just helped me while diving
into distro-tracker.

Regards,
Christophe
diff --git a/distro_tracker/vendor/debian/rules.py b/distro_tracker/vendor/debian/rules.py
index fd00fb2..18ce4b7 100644
--- a/distro_tracker/vendor/debian/rules.py
+++ b/distro_tracker/vendor/debian/rules.py
@@ -199,7 +199,7 @@ def get_developer_information_url(developer_email):
     developer, given his email.
     """
     URL_TEMPLATE = 'http://qa.debian.org/developer.php?email={email}'
-    return URL_TEMPLATE.format(email=developer_email)
+    return URL_TEMPLATE.format(email=urllib.quote(developer_email))
 
 
 def get_external_version_information_urls(package_name):
@@ -225,7 +225,7 @@ def get_maintainer_extra(developer_email, package_name=None):
     """
     The function returns a list of additional items that are to be
     included in the general panel next to the maintainer. This includes:
-     
+
      - Whether the maintainer agrees with lowthreshold NMU
      - Whether the maintainer is a Debian Maintainer
     """
@@ -252,7 +252,7 @@ def get_uploader_extra(developer_email, package_name=None):
     """
     The function returns a list of additional items that are to be
     included in the general panel next to an uploader. This includes:
-     
+
      - Whether the uploader is a DebianMaintainer
     """
     if package_name is None:
diff --git a/distro_tracker/vendor/debian/tests.py b/distro_tracker/vendor/debian/tests.py
index 710be8f..7207381 100644
--- a/distro_tracker/vendor/debian/tests.py
+++ b/distro_tracker/vendor/debian/tests.py
@@ -313,13 +313,13 @@ class GetDeveloperInformationSiteUrlTest(SimpleTestCase):
         """
         developer_email = 'debian-dpkg@lists.debian.org'
         self.assertEqual(
-            'http://qa.debian.org/developer.php?email=debian-dpkg@lists.debian.org',
+            'http://qa.debian.org/developer.php?email=debian-dpkg%40lists.debian.org',
             get_developer_information_url(developer_email)
         )
 
         developer_email = 'email@domain.com'
         self.assertEqual(
-            'http://qa.debian.org/developer.php?email=email@domain.com',
+            'http://qa.debian.org/developer.php?email=email%40domain.com',
             get_developer_information_url(developer_email)
         )
 
@@ -1317,7 +1317,7 @@ class DebianBugActionItemsTests(TestCase):
         # The item is of the correct type
         item = ActionItem.objects.all()[0]
         self.assertEqual(
-            item.item_type.type_name, 
+            item.item_type.type_name,
             UpdatePackageBugStats.PATCH_BUG_ACTION_ITEM_TYPE_NAME)
         # The item references the correct package.
         self.assertEqual(item.package.name, self.package_name.name)
diff --git a/functional_tests/tests.py b/functional_tests/tests.py
index baa8428..8208b52 100644
--- a/functional_tests/tests.py
+++ b/functional_tests/tests.py
@@ -30,6 +30,8 @@ from distro_tracker.core.models import PackageName
 from distro_tracker.core.models import Subscription
 from distro_tracker.core.models import TeamMembership
 from distro_tracker.core.panels import BasePanel
+from distro_tracker.core.panels import PackageExtractedInfo
+from distro_tracker.vendor.debian.rules import get_developer_information_url
 
 from selenium import webdriver
 from selenium.common.exceptions import NoSuchElementException
@@ -38,6 +40,7 @@ from selenium.webdriver.common.keys import Keys
 from django.utils.six.moves import mock
 import os
 import time
+import urllib
 
 
 class SeleniumTestCase(LiveServerTestCase):
@@ -315,6 +318,29 @@ class PackagePageTest(SeleniumTestCase):
         column = self.browser.find_element_by_id('dtracker-package-right')
         self.assertIn("Hello, world", column.text)
 
+    def test_escape_email_charaters(self):
+        """
+        Tests escaping characters in email address.
+        """
+        self.contributor_email = "contributor+email@domain.net"
+        self.PackageExtractedInfo = PackageExtractedInfo.objects.create(
+            package=self.package,
+            key="general",
+            value='''{
+                "name": "%s",
+                "maintainer": {
+                    "name": "Maintainer",
+                    "email": "%s",
+                    "developer_info_url": "%s"} }''' % (
+            self.package,
+            self.contributor_email,
+            get_developer_information_url(self.contributor_email)))
+        self.get_page(self.get_package_url(self.package.name))
+        column = self.browser.find_element_by_id('dtracker-package-left')
+        self.assertIn(
+            urllib.quote(self.contributor_email),
+            column.get_attribute("innerHTML"))
+
 
 User = get_user_model()
 

Attachment: signature.asc
Description: Digital signature


Reply to: