def test_upgrade(self): plan = RentalPlan.objects.get(slug="unlimited1") self.signup_plan(plan) new_plan = RentalPlan.objects.get(slug="unlimited2") mrp = MemberRentalPlan.objects.all()[0] change_plan(mrp, new_plan) self.assertEqual(BillingHistory.objects.count(), 2) _bh = BillingHistory.objects.all()[0] invoice_num = 'RENT_CHNG_%s_%s' % (_bh.user.pk, _bh.pk) self.assertEqual(_bh.aim_response['invoice_number'], invoice_num) self.assertEqual(MemberRentalPlanHistory.objects.count(), 1)
def test_downgrade(self): plan = RentalPlan.objects.get(slug="unlimited2") self.signup_plan(plan) new_plan = RentalPlan.objects.get(slug="unlimited1") mrp = MemberRentalPlan.objects.all()[0] change_plan(mrp, new_plan) self.assertEqual(BillingHistory.objects.count(), 1) self.assertEqual(mrp.rental_plan.slug, "unlimited2") _bh = BillingHistory.objects.all()[0] self.assertEqual(_bh.debit, plan.first_payment_amount) fake_now = datetime.datetime.combine(mrp.next_payment_date, datetime.time()) with patched_context(datetime.datetime, "now", Fake().is_callable().returns(fake_now)): call_command("rent", "recurring_billing") call_command("rent", "recurring_billing") mrp = MemberRentalPlan.objects.all()[0] self.assertEqual(mrp.rental_plan.slug, "unlimited1") self.assertEqual(BillingHistory.objects.count(), 2) _bh = BillingHistory.objects.all()[0] self.assertEqual(_bh.debit, new_plan.thereafter_payments_amount)
def done(self, form_list, **kwargs): old_member_rental_plan = self.request.user.get_profile().member_rental_plan new_rental_plan = self.get_all_cleaned_data()['rental_plan'] change_plan(old_member_rental_plan, new_rental_plan) is_upgrade = old_member_rental_plan.rental_plan.is_upgrade(new_rental_plan) if is_upgrade: plan_starts = "now" add_deferred_message( self.request, messages.INFO, "You have successfully changed your plan to %s" % new_rental_plan.description2 ) else: plan_starts = old_member_rental_plan.next_payment_date add_deferred_message( self.request, messages.INFO, "Your plan will be changed to %s on %s" % (new_rental_plan.description2, plan_starts) ) return JsonResponse({'redirect_to': reverse("new_rent:change_plan")})