Skip to content

Commit

Permalink
Non ascii slugs are now displayed right on Step 7 of submission (bug …
Browse files Browse the repository at this point in the history
…621568)
  • Loading branch information
kumar303 committed Dec 30, 2010
1 parent 8741056 commit 47a73a7
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 1 deletion.
17 changes: 17 additions & 0 deletions apps/devhub/helpers.py
@@ -1,5 +1,7 @@
from collections import defaultdict
import urllib

import chardet
import jinja2
from jingo import register
from tower import ugettext as _, ungettext as ngettext
Expand Down Expand Up @@ -113,3 +115,18 @@ def summarize_validation(validation):
warnings = ngettext('{0} warning', '{0} warnings',
validation.warnings).format(validation.warnings)
return "%s, %s" % (errors, warnings)


@register.filter
def display_url(url):
"""Display a URL like the browser URL bar would.
Note: returns a Unicode object, not a valid URL.
"""
if isinstance(url, unicode):
# Byte sequences will be url encoded so convert
# to bytes here just to stop auto decoding.
url = url.encode('utf8')
bytes = urllib.unquote(url)
c = chardet.detect(bytes)
return bytes.decode(c['encoding'], 'replace')
2 changes: 1 addition & 1 deletion apps/devhub/templates/devhub/addons/submit/done.html
Expand Up @@ -26,7 +26,7 @@ <h3>{{ _("You're done!") }}</h3>
</p>
<p>
<a id="submitted-addon-url" href="{{ addon.get_url_path() }}">
{{ addon.get_url_path()|absolutify }}</a>
{{ addon.get_url_path()|absolutify|display_url }}</a>
</p>
<div class="done-next-steps">
<p><strong>{{ _('Next steps:') }}</strong></p>
Expand Down
24 changes: 24 additions & 0 deletions apps/devhub/tests/test_helpers.py
@@ -1,4 +1,6 @@
# -*- coding: utf8 -*-
import unittest
import urllib

from django.utils import translation

Expand Down Expand Up @@ -117,3 +119,25 @@ def test_summarize_validation():
eq_(render('{{ summarize_validation(validation) }}',
{'validation': v}),
u'2 errors, 2 warnings')


class TestDisplayUrl(unittest.TestCase):

def setUp(self):
self.raw_url = u'http://host/%s' % 'フォクすけといっしょ'.decode('utf8')

def test_utf8(self):
url = urllib.quote(self.raw_url.encode('utf8'))
eq_(render('{{ url|display_url }}', {'url':url}),
self.raw_url)

def test_unicode(self):
url = urllib.quote(self.raw_url.encode('utf8'))
url = unicode(url, 'utf8')
eq_(render('{{ url|display_url }}', {'url':url}),
self.raw_url)

def test_euc_jp(self):
url = urllib.quote(self.raw_url.encode('euc_jp'))
eq_(render('{{ url|display_url }}', {'url':url}),
self.raw_url)
12 changes: 12 additions & 0 deletions apps/devhub/tests/test_views.py
@@ -1,3 +1,4 @@
# -*- coding: utf8 -*-
import json
import os
import re
Expand Down Expand Up @@ -2840,6 +2841,17 @@ def test_incomplete_addon_no_versions(self):
follow=True)
self.assertRedirects(r, reverse('devhub.versions', args=['a3615']))

def test_display_non_ascii_url(self):
addon = Addon.objects.get(pk=3615)
addon.update(slug='フォクすけといっしょ')
r = self.client.get(reverse('devhub.submit.7', args=['フォクすけといっしょ']))
eq_(r.status_code, 200)
# The meta charset will always be utf-8.
doc = pq(r.content.decode('utf-8'))
eq_(doc('#submitted-addon-url').text(),
u'%s/en-US/firefox/addon/%s/' % (settings.SITE_URL,
'フォクすけといっしょ'.decode('utf8')))


class TestResumeStep(TestSubmitBase):

Expand Down

0 comments on commit 47a73a7

Please sign in to comment.