From 0c015fe745ccbd0dfe5153edb1f07ac33a6aecc6 Mon Sep 17 00:00:00 2001 From: Rob Hudson Date: Mon, 15 Oct 2012 12:59:23 -0700 Subject: [PATCH] Fixed mishandling of file status when app is publicized (bug 801678) --- mkt/developers/tests/test_views.py | 33 +++++++++++++++----------- mkt/developers/views.py | 37 +++++++++++++++++------------- 2 files changed, 40 insertions(+), 30 deletions(-) diff --git a/mkt/developers/tests/test_views.py b/mkt/developers/tests/test_views.py index 8cd121351d..85e5758eb0 100644 --- a/mkt/developers/tests/test_views.py +++ b/mkt/developers/tests/test_views.py @@ -106,13 +106,13 @@ class TestPayPalJS(amo.tests.TestCase): self.create_switch('enabled-paypal', active=False) resp = self.client.get(self.url) assert not settings.PAYPAL_JS_URL in resp.content, ( - 'When paypal is disabled, its JS lib should not load') + 'When paypal is disabled, its JS lib should not load') def test_load_paypal_js(self): self.create_switch('enabled-paypal') resp = self.client.get(self.url) assert settings.PAYPAL_JS_URL in resp.content, ( - 'When paypal is enabled, its JS lib should load') + 'When paypal is enabled, its JS lib should load') class TestAppBreadcrumbs(AppHubTest): @@ -196,7 +196,7 @@ class TestAppDashboard(AppHubTest): app = self.get_app() self.make_mine() app.update(is_packaged=True) - next_version = Version.objects.create(addon=app, version='1.24') + Version.objects.create(addon=app, version='1.24') doc = pq(self.client.get(self.url).content) eq_(doc('.item[data-addonid=%s] .item-latest-version' % app.id ).text(), @@ -216,7 +216,7 @@ class TestAppDashboard(AppHubTest): ] amo.tests.check_links(expected, doc('a.action-link')) amo.tests.check_links([('View Statistics', app.get_stats_url())], - doc('a.stats-link'), verify=False) + doc('a.stats-link'), verify=False) def test_action_links_packaged(self): self.create_switch('app-stats') @@ -233,7 +233,7 @@ class TestAppDashboard(AppHubTest): ] amo.tests.check_links(expected, doc('a.action-link')) amo.tests.check_links([('View Statistics', app.get_stats_url())], - doc('a.stats-link'), verify=False) + doc('a.stats-link'), verify=False) def test_disabled_payments_action_links(self): self.create_switch('app-stats') @@ -482,7 +482,7 @@ class MarketplaceMixin(object): self.addon = Addon.objects.get(id=337141) self.addon.update(status=amo.STATUS_NOMINATED, - highest_status=amo.STATUS_NOMINATED) + highest_status=amo.STATUS_NOMINATED) self.url = self.addon.get_dev_url('payments') assert self.client.login(username='steamcube@mozilla.com', @@ -518,7 +518,7 @@ class MarketplaceMixin(object): # that the account exists on paypal. # @mock.patch('mkt.developers.forms.PremiumForm.clean', - new=lambda x: x.cleaned_data) + new=lambda x: x.cleaned_data) class TestMarketplace(MarketplaceMixin, amo.tests.TestCase): fixtures = ['base/users', 'webapps/337141-steamcube', 'market/prices'] @@ -568,8 +568,8 @@ class TestMarketplace(MarketplaceMixin, amo.tests.TestCase): data=self.get_data(currencies=['EUR', 'LOL'])) eq_(res.status_code, 200) self.assertFormError(res, 'form', 'currencies', - [u'Select a valid choice. ' - 'LOL is not one of the available choices.']) + [u'Select a valid choice. ' + 'LOL is not one of the available choices.']) def test_set_upsell(self): self.setup_premium() @@ -636,7 +636,7 @@ class TestMarketplace(MarketplaceMixin, amo.tests.TestCase): eq_(self.addon.premium.paypal_permissions_token, '') url = self.addon.get_dev_url('acquire_refund_permission') self.client.get(urlparams(url, request_token='foo', - verification_code='bar')) + verification_code='bar')) self.addon = Addon.objects.get(pk=self.addon.pk) eq_(self.addon.premium.paypal_permissions_token.lower(), 'foo') @@ -648,7 +648,7 @@ class TestMarketplace(MarketplaceMixin, amo.tests.TestCase): self.setup_premium() url = self.addon.get_dev_url('acquire_refund_permission') self.client.get(urlparams(url, request_token='foo', - verification_code='bar')) + verification_code='bar')) self.addon = Addon.objects.get(pk=self.addon.pk) eq_(self.addon.premium.paypal_permissions_token.lower(), 'foo') @@ -922,8 +922,8 @@ class TestIssueRefund(amo.tests.TestCase): everyone=True) client.post_refund.return_value = {'response': [{ - 'refundStatus': 'ALREADY_REVERSED_OR_REFUNDED', - 'receiver.email': self.user.email}]} + 'refundStatus': 'ALREADY_REVERSED_OR_REFUNDED', + 'receiver.email': self.user.email}]} c = self.make_purchase() r = self.client.post(self.url, {'transaction_id': c.transaction_id, 'issue': '1'}) @@ -983,7 +983,8 @@ class TestRefunds(amo.tests.TestCase): for status in amo.REFUND_STATUSES.keys(): for x in xrange(status + 2): c = Contribution.objects.create(addon=self.webapp, - user=self.user, type=amo.CONTRIB_PURCHASE) + user=self.user, + type=amo.CONTRIB_PURCHASE) r = Refund.objects.create(contribution=c, status=status, requested=days_ago(x)) self.expected.setdefault(status, []).append(r) @@ -1129,6 +1130,8 @@ class TestPublicise(amo.tests.TestCase): def setUp(self): self.webapp = self.get_webapp() self.webapp.update(status=amo.STATUS_PUBLIC_WAITING) + self.file = self.webapp.versions.latest().all_files[0] + self.file.update(status=amo.STATUS_PUBLIC_WAITING) self.publicise_url = self.webapp.get_dev_url('publicise') self.status_url = self.webapp.get_dev_url('versions') assert self.client.login(username='steamcube@mozilla.com', @@ -1147,6 +1150,8 @@ class TestPublicise(amo.tests.TestCase): res = self.client.post(self.publicise_url) eq_(res.status_code, 302) eq_(self.get_webapp().status, amo.STATUS_PUBLIC) + eq_(self.get_webapp().versions.latest().all_files[0].status, + amo.STATUS_PUBLIC) def test_status(self): res = self.client.get(self.status_url) diff --git a/mkt/developers/views.py b/mkt/developers/views.py index b2ff409b21..b6464f2f01 100644 --- a/mkt/developers/views.py +++ b/mkt/developers/views.py @@ -133,14 +133,15 @@ def dashboard(request, webapp=False): @dev_required(webapp=True) def edit(request, addon_id, addon, webapp=False): data = { - 'page': 'edit', - 'addon': addon, - 'webapp': webapp, - 'valid_slug': addon.app_slug, - 'image_sizes': APP_IMAGE_SIZES, - 'tags': addon.tags.not_blacklisted().values_list('tag_text', flat=True), - 'previews': addon.get_previews(), - 'device_type_form': DeviceTypeForm(request.POST or None, addon=addon), + 'page': 'edit', + 'addon': addon, + 'webapp': webapp, + 'valid_slug': addon.app_slug, + 'image_sizes': APP_IMAGE_SIZES, + 'tags': addon.tags.not_blacklisted().values_list('tag_text', + flat=True), + 'previews': addon.get_previews(), + 'device_type_form': DeviceTypeForm(request.POST or None, addon=addon), } if acl.action_allowed(request, 'Apps', 'Configure'): data['admin_settings_form'] = forms.AdminSettingsForm(instance=addon) @@ -191,6 +192,9 @@ def disable(request, addon_id, addon): def publicise(request, addon_id, addon): if addon.status == amo.STATUS_PUBLIC_WAITING: addon.update(status=amo.STATUS_PUBLIC) + File.objects.filter( + version__addon=addon, status=amo.STATUS_PUBLIC_WAITING).update( + status=amo.STATUS_PUBLIC) amo.log(amo.LOG.CHANGE_STATUS, addon.get_status_display(), addon) # Call update_version, so various other bits of data update. addon.update_version() @@ -471,7 +475,7 @@ def paypal_setup_confirm(request, addon_id, addon, webapp, source='paypal'): if waffle.flag_is_active(request, 'solitude-payments'): obj = client.create_seller_paypal(addon) client.patch_seller_paypal(pk=obj['resource_pk'], - data={'paypal_id': addon.paypal_id}) + data={'paypal_id': addon.paypal_id}) if waffle.flag_is_active(request, 'solitude-payments'): # TODO(solitude): when the migration of data is completed, we @@ -564,7 +568,7 @@ def bluevia_callback(request, addon_id, addon, webapp): status = request.POST.get('status') if status in ['registered', 'loggedin']: bluevia = BlueViaConfig.objects.create(user=request.amo_user, - developer_id=developer_id) + developer_id=developer_id) try: (AddonBlueViaConfig.objects.get(addon=addon) .update(bluevia_config=bluevia)) @@ -718,8 +722,8 @@ def issue_refund(request, addon_id, addon, webapp=False): if 'issue' in request.POST: if waffle.flag_is_active(request, 'solitude-payments'): try: - response = client.post_refund(data={'uuid': - contribution.transaction_id}) + response = client.post_refund( + data={'uuid': contribution.transaction_id}) except client.Error, e: contribution.record_failed_refund(e) paypal_log.error('Refund failed for: %s' % txn_id, @@ -756,8 +760,9 @@ def issue_refund(request, addon_id, addon, webapp=False): contribution.paykey, res['receiver.email'])) messages.error(request, - _("A refund can't be issued at this time. We've " - "notified an admin; please try again later.")) + _("A refund can't be issued at this time. " + "We've notified an admin; please try " + "again later.")) return redirect(addon.get_dev_url('refunds')) contribution.mail_approved() @@ -972,7 +977,7 @@ def file_validation(request, addon_id, addon, file_id): @dev_required(allow_editors=True) def json_file_validation(request, addon_id, addon, file_id): file = get_object_or_404(File, id=file_id) - if not file.has_been_validated == True: + if not file.has_been_validated: if request.method != 'POST': return http.HttpResponseNotAllowed(['POST']) @@ -1013,7 +1018,7 @@ def json_upload_detail(request, upload, addon_slug=None): def upload_validation_context(request, upload, addon_slug=None, addon=None, - url=None): + url=None): if addon_slug and not addon: addon = get_object_or_404(Addon, slug=addon_slug) if not settings.VALIDATE_ADDONS: