Skip to content
This repository was archived by the owner on Mar 15, 2018. It is now read-only.

Commit 054b3fa

Browse files
author
Rob Hudson
committed
Update supported_locales during update_manifests (bug 867455)
1 parent d4e334a commit 054b3fa

File tree

2 files changed

+47
-29
lines changed

2 files changed

+47
-29
lines changed

mkt/webapps/tasks.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from files.models import FileUpload
1818
from mkt.developers.tasks import _fetch_manifest, validator
1919
from mkt.webapps.models import Webapp
20-
from mkt.webapps.utils import get_locale_properties
20+
from mkt.webapps.utils import get_locale_properties, get_supported_locales
2121
from users.utils import get_task_user
2222

2323
task_log = logging.getLogger('z.task')
@@ -90,7 +90,8 @@ def update_manifests(ids, **kw):
9090

9191
def _update_manifest(id, check_hash, failed_fetches):
9292
webapp = Webapp.objects.get(pk=id)
93-
file_ = webapp.get_latest_file()
93+
version = webapp.versions.latest()
94+
file_ = version.files.latest()
9495

9596
_log(webapp, u'Fetching webapp manifest')
9697
if not file_:
@@ -188,6 +189,11 @@ def _update_manifest(id, check_hash, failed_fetches):
188189
rereview = True
189190
msg.append(u'Locales updated: %s' % crud.get('updated'))
190191

192+
# Check if supported_locales changed and update if so.
193+
supported_locales = ','.join(get_supported_locales(new))
194+
if version.supported_locales != supported_locales:
195+
version.update(supported_locales=supported_locales, _signal=False)
196+
191197
if rereview:
192198
msg = ' '.join(msg)
193199
_log(webapp, msg, rereview=True)

mkt/webapps/tests/test_tasks.py

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,12 @@ def test_new_version_not_created(self, _copy_stored_file):
145145
old_file = self.addon.get_latest_file()
146146
self._run()
147147

148-
new = Webapp.objects.get(pk=self.addon.pk)
149-
version = new.current_version
150-
file = new.get_latest_file()
148+
app = Webapp.objects.get(pk=self.addon.pk)
149+
version = app.current_version
150+
file = app.get_latest_file()
151151

152-
# Test that our new version looks good
153-
eq_(new.versions.count(), 1)
152+
# Test that our new version looks good.
153+
eq_(app.versions.count(), 1)
154154
assert version == old_version, 'Version created'
155155
assert file == old_file, 'File created'
156156

@@ -166,8 +166,8 @@ def test_version_updated(self):
166166
self._hash = 'foo'
167167
self._run()
168168

169-
new = Webapp.objects.get(pk=self.addon.pk)
170-
eq_(new.versions.latest().version, '1.1')
169+
app = Webapp.objects.get(pk=self.addon.pk)
170+
eq_(app.versions.latest().version, '1.1')
171171

172172
def test_not_log(self):
173173
self._hash = ohash
@@ -248,10 +248,9 @@ def test_manifest_name_change_rereview(self, open_manifest):
248248
# Mock original manifest file lookup.
249249
open_manifest.return_value = original
250250
# Mock new manifest with name change.
251-
n = new.copy()
252-
n['name'] = 'Mozilla Ball Ultimate Edition'
251+
self.new['name'] = 'Mozilla Ball Ultimate Edition'
253252
response_mock = mock.Mock()
254-
response_mock.read.return_value = json.dumps(n)
253+
response_mock.read.return_value = json.dumps(self.new)
255254
response_mock.headers = {
256255
'Content-Type': 'application/x-web-app-manifest+json'}
257256
self.urlopen_mock.return_value = response_mock
@@ -267,10 +266,9 @@ def test_manifest_locale_name_add_rereview(self, open_manifest):
267266
# Mock original manifest file lookup.
268267
open_manifest.return_value = original
269268
# Mock new manifest with name change.
270-
n = new.copy()
271-
n['locales'] = {'es': {'name': 'eso'}}
269+
self.new['locales'] = {'es': {'name': 'eso'}}
272270
response_mock = mock.Mock()
273-
response_mock.read.return_value = json.dumps(n)
271+
response_mock.read.return_value = json.dumps(self.new)
274272
response_mock.headers = {
275273
'Content-Type': 'application/x-web-app-manifest+json'}
276274
self.urlopen_mock.return_value = response_mock
@@ -290,10 +288,9 @@ def test_manifest_locale_name_change_rereview(self, open_manifest):
290288
# Mock original manifest file lookup.
291289
open_manifest.return_value = original
292290
# Mock new manifest with name change.
293-
n = new.copy()
294-
n['locales'] = {'de': {'name': 'Bippity Bop'}}
291+
self.new['locales'] = {'de': {'name': 'Bippity Bop'}}
295292
response_mock = mock.Mock()
296-
response_mock.read.return_value = json.dumps(n)
293+
response_mock.read.return_value = json.dumps(self.new)
297294
response_mock.headers = {
298295
'Content-Type': 'application/x-web-app-manifest+json'}
299296
self.urlopen_mock.return_value = response_mock
@@ -313,12 +310,11 @@ def test_manifest_default_locale_change(self, open_manifest):
313310
# Mock original manifest file lookup.
314311
open_manifest.return_value = original
315312
# Mock new manifest with name change.
316-
n = new.copy()
317-
n['name'] = u'Mozilla Balón'
318-
n['default_locale'] = 'es'
319-
n['locales'] = {'en-US': {'name': 'MozillaBall'}}
313+
self.new['name'] = u'Mozilla Balón'
314+
self.new['default_locale'] = 'es'
315+
self.new['locales'] = {'en-US': {'name': 'MozillaBall'}}
320316
response_mock = mock.Mock()
321-
response_mock.read.return_value = json.dumps(n)
317+
response_mock.read.return_value = json.dumps(self.new)
322318
response_mock.headers = {
323319
'Content-Type': 'application/x-web-app-manifest+json'}
324320
self.urlopen_mock.return_value = response_mock
@@ -341,10 +337,11 @@ def test_manifest_locale_name_removal_no_rereview(self, open_manifest):
341337
# Mock original manifest file lookup.
342338
open_manifest.return_value = original
343339
# Mock new manifest with name change.
344-
n = new.copy()
345-
del n['locales']['de']
340+
# Note: Not using `del` b/c copy doesn't copy nested structures.
341+
self.new['locales'] = {
342+
'fr': {'description': 'Testing name-less locale'}}
346343
response_mock = mock.Mock()
347-
response_mock.read.return_value = json.dumps(n)
344+
response_mock.read.return_value = json.dumps(self.new)
348345
response_mock.headers = {
349346
'Content-Type': 'application/x-web-app-manifest+json'}
350347
self.urlopen_mock.return_value = response_mock
@@ -360,10 +357,9 @@ def test_force_rereview(self, open_manifest):
360357
# Mock original manifest file lookup.
361358
open_manifest.return_value = original
362359
# Mock new manifest with name change.
363-
n = new.copy()
364-
n['name'] = 'Mozilla Ball Ultimate Edition'
360+
self.new['name'] = 'Mozilla Ball Ultimate Edition'
365361
response_mock = mock.Mock()
366-
response_mock.read.return_value = json.dumps(n)
362+
response_mock.read.return_value = json.dumps(self.new)
367363
response_mock.headers = {
368364
'Content-Type': 'application/x-web-app-manifest+json'}
369365
self.urlopen_mock.return_value = response_mock
@@ -379,3 +375,19 @@ def test_force_rereview(self, open_manifest):
379375

380376
# 2 logs: 1 for manifest update, 1 for re-review trigger.
381377
eq_(ActivityLog.objects.for_apps(self.addon).count(), 2)
378+
379+
@mock.patch('mkt.webapps.tasks._open_manifest')
380+
def test_manifest_support_locales_change(self, open_manifest):
381+
# Mock original manifest file lookup.
382+
open_manifest.return_value = original
383+
# Mock new manifest with name change.
384+
self.new['locales'].update({'es': {'name': u'Mozilla Balón'}})
385+
response_mock = mock.Mock()
386+
response_mock.read.return_value = json.dumps(self.new)
387+
response_mock.headers = {
388+
'Content-Type': 'application/x-web-app-manifest+json'}
389+
self.urlopen_mock.return_value = response_mock
390+
391+
self._run()
392+
ver = self.version.reload()
393+
eq_(ver.supported_locales, 'de,es,fr')

0 commit comments

Comments
 (0)