def test_free_with_in_app_requires_in_app(self): self.platforms.update(price='free', allow_inapp='False') form = forms_payments.PremiumForm(self.platforms, **self.kwargs) assert not form.is_valid()
def test_initial(self): form = forms_payments.PremiumForm(**self.kwargs) eq_(form._initial_price_id(), Price.objects.get(price='0.99').pk)
def test_initial_not_there(self): Price.objects.get(price='0.99').update(active=False) form = forms_payments.PremiumForm(**self.kwargs) eq_(form._initial_price_id(), None)
def test_not_is_paid_free(self): self.addon.update(premium_type=amo.ADDON_FREE) form = forms_payments.PremiumForm(data=self.platforms, **self.kwargs) eq_(form.is_paid(), False)
def test_can_set_desktop_for_packaged_app(self): self.platforms = {'free_platforms': ['free-desktop']} self.addon.update(is_packaged=True) form = forms_payments.PremiumForm(data=self.platforms, **self.kwargs) assert form.is_valid(), form.errors
def test_is_paid_free_inapp(self): self.addon.update(premium_type=amo.ADDON_FREE_INAPP) form = forms_payments.PremiumForm(data=self.platforms, **self.kwargs) eq_(form.is_paid(), True)
def test_free_inapp_price_required(self): self.addon.update(premium_type=amo.ADDON_FREE_INAPP) form = forms_payments.PremiumForm(data=self.platforms, **self.kwargs) assert not form.is_valid()
def test_is_paid_premium(self): self.make_premium(self.addon) form = forms_payments.PremiumForm(data=self.platforms, **self.kwargs) eq_(form.is_paid(), True)
def test_is_paid_premium_inapp(self): self.addon.update(premium_type=mkt.ADDON_PREMIUM_INAPP) form = forms_payments.PremiumForm(data=self.platforms, **self.kwargs) eq_(form.is_paid(), True)
def payments(request, addon_id, addon, webapp=False): premium_form = forms_payments.PremiumForm(request.POST or None, request=request, addon=addon, user=request.amo_user) region_form = forms.RegionForm(request.POST or None, product=addon, request=request) upsell_form = forms_payments.UpsellForm(request.POST or None, addon=addon, user=request.amo_user) account_list_form = forms_payments.AccountListForm(request.POST or None, addon=addon, user=request.amo_user) if request.method == 'POST': success = all( form.is_valid() for form in [premium_form, region_form, upsell_form, account_list_form]) if success: region_form.save() try: premium_form.save() except client.Error as err: success = False log.error('Error setting payment information (%s)' % err) messages.error( request, _(u'We encountered a problem connecting to the ' u'payment server.')) raise # We want to see these exceptions! is_free_inapp = addon.premium_type == amo.ADDON_FREE_INAPP is_now_paid = (addon.premium_type in amo.ADDON_PREMIUMS or is_free_inapp) # If we haven't changed to a free app, check the upsell. if is_now_paid and success: try: if not is_free_inapp: upsell_form.save() account_list_form.save() except client.Error as err: log.error('Error saving payment information (%s)' % err) messages.error( request, _(u'We encountered a problem connecting to ' u'the payment server.')) success = False raise # We want to see all the solitude errors now. # If everything happened successfully, give the user a pat on the back. if success: messages.success(request, _('Changes successfully saved.')) return redirect(addon.get_dev_url('payments')) # TODO: refactor this (bug 945267) is_packaged = addon.is_packaged android_payments_enabled = waffle.flag_is_active(request, 'android-payments') android_packaged_enabled = waffle.flag_is_active(request, 'android-packaged') desktop_packaged_enabled = waffle.flag_is_active(request, 'desktop-packaged') # If android payments is not allowed then firefox os must # be 'checked' and android-mobile and android-tablet should not be. invalid_paid_platform_state = [] # If isn't packaged or it is packaged and the android-packaged flag is on # then we should check that desktop isn't set to True. if not is_packaged or (is_packaged and desktop_packaged_enabled): invalid_paid_platform_state.append(('desktop', True)) if not android_payments_enabled: # When android-payments is off... # If isn't packaged or it is packaged and the android-packaged flag is on # then we should check for the state of android-mobile and android-tablet. if not is_packaged or (is_packaged and android_packaged_enabled): invalid_paid_platform_state += [('android-mobile', True), ('android-tablet', True)] invalid_paid_platform_state.append(('firefoxos', False)) cannot_be_paid = (addon.premium_type == amo.ADDON_FREE and any(premium_form.device_data['free-%s' % x] == y for x, y in invalid_paid_platform_state)) try: tier_zero = Price.objects.get(price='0.00', active=True) tier_zero_id = tier_zero.pk except Price.DoesNotExist: tier_zero = None tier_zero_id = '' # Get the regions based on tier zero. This should be all the # regions with payments enabled. paid_region_ids_by_slug = [] if tier_zero: paid_region_ids_by_slug = tier_zero.region_ids_by_slug() provider = get_provider() paid_platform_names = [ unicode(platform[1]) for platform in PAID_PLATFORMS(request, is_packaged) ] return jingo.render( request, 'developers/payments/premium.html', { 'addon': addon, 'webapp': webapp, 'premium': addon.premium, 'form': premium_form, 'upsell_form': upsell_form, 'tier_zero_id': tier_zero_id, 'region_form': region_form, 'DEVICE_LOOKUP': DEVICE_LOOKUP, 'is_paid': (addon.premium_type in amo.ADDON_PREMIUMS or addon.premium_type == amo.ADDON_FREE_INAPP), 'cannot_be_paid': cannot_be_paid, 'paid_platform_names': paid_platform_names, 'has_incomplete_status': addon.status == amo.STATUS_NULL, 'is_packaged': addon.is_packaged, # Bango values 'account_form': provider.forms['account'](), 'account_list_form': account_list_form, # Waffles 'api_pricelist_url': reverse('price-list'), 'payment_methods': { PAYMENT_METHOD_ALL: _('All'), PAYMENT_METHOD_CARD: _('Credit card'), PAYMENT_METHOD_OPERATOR: _('Carrier'), }, 'all_paid_region_ids_by_slug': paid_region_ids_by_slug, 'provider': provider, })