Migrated release notes to Python (Bug 608481)
This also adds an extra method on TestCase to easily activate another locale for testing.
This commit is contained in:
Родитель
7eea35d720
Коммит
5d643d5165
|
@ -136,6 +136,17 @@
|
|||
"id": 650353
|
||||
}
|
||||
},
|
||||
{
|
||||
"pk": 697693,
|
||||
"model": "translations.translation",
|
||||
"fields": {
|
||||
"localized_string": "Quelque chose en français.\n\nQuelque chose d'autre.",
|
||||
"created": "2009-10-21 10:02:38",
|
||||
"locale": "fr",
|
||||
"modified": null,
|
||||
"id": 650353
|
||||
}
|
||||
},
|
||||
{
|
||||
"pk": 1,
|
||||
"model": "files.platform",
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
from contextlib import contextmanager
|
||||
from datetime import datetime, timedelta
|
||||
from functools import partial
|
||||
import os
|
||||
|
@ -8,6 +9,7 @@ import time
|
|||
from django import forms
|
||||
from django.conf import settings
|
||||
from django.test.client import Client
|
||||
from django.utils import translation
|
||||
|
||||
import elasticutils
|
||||
import nose
|
||||
|
@ -15,6 +17,7 @@ import test_utils
|
|||
from redisutils import mock_redis, reset_redis
|
||||
|
||||
import amo
|
||||
from amo.urlresolvers import Prefixer, get_url_prefix, set_url_prefix
|
||||
import addons.search
|
||||
from addons.models import Addon
|
||||
from applications.models import Application, AppVersion
|
||||
|
@ -100,6 +103,16 @@ class TestCase(RedisTest, test_utils.TestCase):
|
|||
FeaturedManager.featured_ids.clear()
|
||||
CreaturedManager.creatured_ids.clear()
|
||||
|
||||
@contextmanager
|
||||
def activate(self, locale):
|
||||
old_prefix = get_url_prefix()
|
||||
old_locale = translation.get_language()
|
||||
rf = test_utils.RequestFactory()
|
||||
set_url_prefix(Prefixer(rf.get('/%s/' % (locale,))))
|
||||
translation.activate(locale)
|
||||
yield
|
||||
set_url_prefix(old_prefix)
|
||||
translation.activate(old_locale)
|
||||
|
||||
class AMOPaths(object):
|
||||
"""Mixin for getting common AMO Paths."""
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{ LANG }}" dir="{{ DIR }}">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<title></title>
|
||||
</head>
|
||||
<body>
|
||||
<p{{ version.releasenotes|locale_html }}>{{ version.releasenotes|nl2br }}</p>
|
||||
</body>
|
||||
</html>
|
|
@ -1,3 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import hashlib
|
||||
import os
|
||||
|
||||
|
@ -262,6 +263,30 @@ class TestVersion(amo.tests.TestCase):
|
|||
version.save()
|
||||
eq_(version.version_int, None)
|
||||
|
||||
def test_version_update_info(self):
|
||||
addon = Addon.objects.get(pk=3615)
|
||||
r = self.client.get(reverse('addons.versions.update_info',
|
||||
args=(addon.id, self.version.version)))
|
||||
eq_(r.status_code, 200)
|
||||
doc = PyQuery(r.content)
|
||||
eq_(doc('p').html(), 'Fix for an important bug')
|
||||
|
||||
# Test update info in another language.
|
||||
with self.activate('fr'):
|
||||
r = self.client.get(reverse('addons.versions.update_info',
|
||||
args=(addon.id, self.version.version)))
|
||||
eq_(r.status_code, 200)
|
||||
doc = PyQuery(r.content)
|
||||
eq_(doc('p').html(), u"Quelque chose en français.<br/><br/>" \
|
||||
u"Quelque chose d'autre.")
|
||||
|
||||
def test_version_update_info_legacy_redirect(self):
|
||||
r = self.client.get('/versions/updateInfo/%s' % self.version.id,
|
||||
follow=True)
|
||||
url = reverse('addons.versions.update_info',
|
||||
args=(self.version.addon.id, self.version.version))
|
||||
self.assertRedirects(r, url, 301)
|
||||
|
||||
|
||||
class TestViews(amo.tests.TestCase):
|
||||
fixtures = ['addons/eula+contrib-addon', 'base/apps']
|
||||
|
|
|
@ -9,6 +9,8 @@ urlpatterns = patterns('',
|
|||
url('^format:rss$', VersionsRss(), name='addons.versions.rss'),
|
||||
url('^(?P<version_num>[^/]+)$', views.version_detail,
|
||||
name='addons.versions'),
|
||||
url('^(?P<version_num>[^/]+)/updateinfo/$', views.update_info,
|
||||
name='addons.versions.update_info'),
|
||||
)
|
||||
|
||||
download_patterns = patterns('',
|
||||
|
|
|
@ -60,6 +60,20 @@ def _find_version_page(qs, addon, version_num):
|
|||
raise http.Http404()
|
||||
|
||||
|
||||
def update_info(request, addon_id, version_num):
|
||||
version = get_object_or_404(Version, addon__id=addon_id,
|
||||
version=version_num)
|
||||
return jingo.render(request, 'versions/update_info.html',
|
||||
{'version': version})
|
||||
|
||||
|
||||
def update_info_redirect(request, version_id):
|
||||
version = get_object_or_404(Version, pk=version_id)
|
||||
return redirect(reverse('addons.versions.update_info',
|
||||
args=(version.addon.id, version.version)),
|
||||
permanent=True)
|
||||
|
||||
|
||||
@never_cache
|
||||
@login_required
|
||||
def download_watermarked(request, file_id):
|
||||
|
@ -98,7 +112,8 @@ def download_file(request, file_id, type=None):
|
|||
return http.HttpResponseForbidden()
|
||||
|
||||
if addon.is_disabled or file.status == amo.STATUS_DISABLED:
|
||||
if acl.check_addon_ownership(request, addon, viewer=True, ignore_disabled=True):
|
||||
if acl.check_addon_ownership(request, addon, viewer=True,
|
||||
ignore_disabled=True):
|
||||
return HttpResponseSendFile(request, file.guarded_file_path,
|
||||
content_type='application/xp-install')
|
||||
else:
|
||||
|
|
4
urls.py
4
urls.py
|
@ -128,6 +128,10 @@ urlpatterns = patterns('',
|
|||
('^addons/versions/(\d+)/format:rss$',
|
||||
lambda r, id: redirect('addons.versions.rss', id, permanent=True)),
|
||||
|
||||
# Legacy redirect. Requires a view to get extra data not provided in URL.
|
||||
('^versions/updateInfo/(?P<version_id>\d+)$',
|
||||
'versions.views.update_info_redirect'),
|
||||
|
||||
('^addons/reviews/(\d+)/format:rss$',
|
||||
lambda r, id: redirect('reviews.list.rss', id, permanent=True)),
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче