def test_valid(self):
        """
        If everything is right, the form should come back valid.

        """
        token = make_tier_change_token(self.tier1)
        form = TierChangeForm({'tier': self.tier1.slug, 'token': token})
        self.assertTrue(form.is_valid())
    def test_valid(self):
        """
        If everything is right, the form should come back valid.

        """
        token = make_tier_change_token(self.tier1)
        form = TierChangeForm({'tier': self.tier1.slug, 'token': token})
        self.assertTrue(form.is_valid())
    def test_bad_token(self):
        """
        The form should be invalid if the token is invalid.

        """
        self.assertNotEqual(self.tier_info.tier, self.tier1)
        token = 'not_a_token'
        form = TierChangeForm({'tier': self.tier1.slug, 'token': token})
        self.assertFalse(form.is_valid())
        self.assertEqual(form.errors.keys(), ['__all__'])
    def test_bad_token(self):
        """
        The form should be invalid if the token is invalid.

        """
        self.assertNotEqual(self.tier_info.tier, self.tier1)
        token = 'not_a_token'
        form = TierChangeForm({'tier': self.tier1.slug, 'token': token})
        self.assertFalse(form.is_valid())
        self.assertEqual(form.errors.keys(), ['__all__'])
    def test_same_tier(self):
        """
        The form should be invalid if the tier we're changing to is the same
        as the current tier.

        """
        self.assertEqual(self.tier_info.tier, self.tier2)
        token = make_tier_change_token(self.tier2)
        form = TierChangeForm({'tier': self.tier2.slug, 'token': token})
        self.assertFalse(form.is_valid())
        self.assertEqual(form.errors.keys(), ['tier'])
    def test_bad_slug(self):
        """
        The form should be invalid if the slug given doesn't refer to an
        available tier.

        """
        tier3 = self.create_tier(name='Tier3', slug='tier3', price=30)
        token = make_tier_change_token(tier3)
        form = TierChangeForm({'tier': tier3.slug, 'token': token})
        self.assertFalse(form.is_valid())
        self.assertEqual(form.errors.keys(), ['tier'])
    def test_same_tier(self):
        """
        The form should be invalid if the tier we're changing to is the same
        as the current tier.

        """
        self.assertEqual(self.tier_info.tier, self.tier2)
        token = make_tier_change_token(self.tier2)
        form = TierChangeForm({'tier': self.tier2.slug, 'token': token})
        self.assertFalse(form.is_valid())
        self.assertEqual(form.errors.keys(), ['tier'])
    def test_bad_slug(self):
        """
        The form should be invalid if the slug given doesn't refer to an
        available tier.

        """
        tier3 = self.create_tier(name='Tier3', slug='tier3', price=30)
        token = make_tier_change_token(tier3)
        form = TierChangeForm({'tier': tier3.slug, 'token': token})
        self.assertFalse(form.is_valid())
        self.assertEqual(form.errors.keys(), ['tier'])
    def test_save(self):
        """
        Saving the form should update the last tier changed date and actually
        change the tier.

        """
        token = make_tier_change_token(self.tier1)
        form = TierChangeForm({'tier': self.tier1.slug, 'token': token})
        self.assertTrue(form.is_valid())
        self.assertEqual(self.tier_info.tier, self.tier2)
        old_tier_changed = self.tier_info.tier_changed
        form.save()
        self.assertEqual(self.tier_info.tier, self.tier1)
        self.assertGreater(self.tier_info.tier_changed, old_tier_changed)
    def test_save(self):
        """
        Saving the form should update the last tier changed date and actually
        change the tier.

        """
        token = make_tier_change_token(self.tier1)
        form = TierChangeForm({'tier': self.tier1.slug, 'token': token})
        self.assertTrue(form.is_valid())
        self.assertEqual(self.tier_info.tier, self.tier2)
        old_tier_changed = self.tier_info.tier_changed
        form.save()
        self.assertEqual(self.tier_info.tier, self.tier1)
        self.assertGreater(self.tier_info.tier_changed, old_tier_changed)
Example #11
0
 def get_context_data(self, **kwargs):
     context = super(DowngradeConfirmationView,
                     self).get_context_data(**kwargs)
     tier_info = SiteTierInfo.objects.get_current()
     slug = self.request.GET.get('tier', '')
     try:
         tier = tier_info.available_tiers.get(slug=slug)
     except Tier.DoesNotExist:
         raise Http404
     if tier.price >= tier_info.tier.price:
         raise Http404
     if tier_info.enforce_payments:
         if tier.price == 0:
             if tier_info.subscription:
                 form = PayPalCancellationForm()
             else:
                 # If they don't have an active subscription, we can't very
                 # well cancel it.
                 form = TierChangeForm(initial={'tier': tier})
         else:
             form = PayPalSubscriptionForm(tier)
     else:
         form = TierChangeForm(initial={'tier': tier})
     context.update({
         'form':
         form,
         'tier':
         tier,
         'tier_info':
         tier_info,
         'admins_to_demote':
         admins_to_demote(tier),
         'videos_to_deactivate':
         videos_to_deactivate(tier),
         'have_theme':
         Theme.objects.filter(default=True).exists()
     })
     return context
Example #12
0
    def get_context_data(self, **kwargs):
        context = super(TierView, self).get_context_data(**kwargs)
        tier_info = SiteTierInfo.objects.get_current()

        if tier_info.enforce_payments:
            price = (0 if tier_info.subscription is None else
                     tier_info.subscription.signup_or_modify.amount3)
            try:
                set_tier(price)
            except Tier.DoesNotExist:
                logging.error('No tier matching current subscription.',
                              exc_info=True)
            except Tier.MultipleObjectsReturned:
                logging.error(
                    'Multiple tiers found matching current'
                    'subscription.',
                    exc_info=True)

        forms = SortedDict()
        tiers = tier_info.available_tiers.order_by('price')
        for tier in tiers:
            if tier.price < tier_info.tier.price:
                forms[tier] = DowngradeConfirmationForm(tier)
            else:
                if tier_info.enforce_payments:
                    forms[tier] = PayPalSubscriptionForm(tier)
                else:
                    forms[tier] = TierChangeForm(initial={'tier': tier})

        # Here we build a list of prices of current subscriptions, sorted
        # by the date the subscription started. This lets us check in the
        # template whether a tier's subscription should be considered
        # "upcoming" or "old".
        subscriptions = sorted([
            subscr
            for subscr in tier_info.subscriptions if not subscr.is_cancelled
        ],
                               key=lambda s: s.signup_or_modify.subscr_date,
                               reverse=True)
        subscription_prices = [subscr.price for subscr in subscriptions]
        context.update({
            'subscription_prices': subscription_prices,
            'cancellation_form': PayPalCancellationForm(),
            'forms': forms,
            'tier_info': tier_info,
        })
        return context
Example #13
0
 def handle_form(self, data):
     form = TierChangeForm(data)
     if form.is_valid():
         form.save()
Example #14
0
 def handle_form(self, data):
     form = TierChangeForm(data)
     if form.is_valid():
         form.save()