def __init__(self, *args, **kwargs): super(TierChangeForm, self).__init__(*args, **kwargs) self.tier_info = SiteTierInfo.objects.get_current() self.fields['tier'].queryset = self.tier_info.available_tiers.all() if 'tier' in self.initial: self.initial['token'] = make_tier_change_token( self.initial['tier'])
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_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)