def test_sending(self): settings.BILLING_CC_EMAIL = None makebills() self.assertEquals(len(mail.outbox), 1) m = mail.outbox[0] self.assertEquals(m.to[0], self.membership.billing_email()) self.assertEquals(m.from_email, settings.BILLING_FROM_EMAIL)
def test_no_email_if_membership_fee_zero(self): membership = create_dummy_member('N', type='H') self.assertEqual(len(mail.outbox), 0) membership.preapprove(self.user) self.assertEqual(len(mail.outbox), 1) mail.outbox = [] membership.approve(self.user) makebills() bill = Bill.objects.latest('id') self.assertEquals(bill.billingcycle.sum, Decimal('0')) from models import logger as models_logger models_logger.setLevel(level=logging.INFO) handler = MockLoggingHandler() models_logger.addHandler(handler) bill.send_as_email() self.assertTrue(bill.billingcycle.is_paid) self.assertEqual(len(mail.outbox), 0) models_logger.removeHandler(handler) infos = handler.messages["info"] properly_logged = False for info in infos: if "Bill not sent:" in info: properly_logged = True self.assertTrue(properly_logged)
def test_fees(self): "Test setting fees and verify that they are set properly" now = datetime.now() - timedelta(seconds=5) week_ago = datetime.now() - timedelta(days=7) P_FEE = 30 S_FEE = 500 O_FEE = 60 H_FEE = 0 soon = datetime.now() + timedelta(hours=1) # Old fees Fee.objects.create(type='P', start=week_ago, sum=P_FEE / 2) Fee.objects.create(type='O', start=week_ago, sum=O_FEE / 2) Fee.objects.create(type='S', start=week_ago, sum=S_FEE / 2) Fee.objects.create(type='H', start=week_ago, sum=H_FEE / 2) # Real fees p_fee = Fee.objects.create(type='P', start=now, sum=P_FEE) o_fee = Fee.objects.create(type='O', start=now, sum=O_FEE) s_fee = Fee.objects.create(type='S', start=now, sum=S_FEE) h_fee = Fee.objects.create(type='H', start=now, sum=H_FEE) # Future fees that must not interfere Fee.objects.create(type='P', start=soon, sum=P_FEE * 2) Fee.objects.create(type='O', start=soon, sum=O_FEE * 2) Fee.objects.create(type='S', start=soon, sum=S_FEE * 2) Fee.objects.create(type='H', start=soon, sum=H_FEE * 2) makebills() c_p = BillingCycle.objects.get(membership__type='P') c_o = BillingCycle.objects.get(membership__type='O') c_s = BillingCycle.objects.get(membership__type='S') c_h = BillingCycle.objects.get(membership__type='H') self.assertEqual(c_p.sum, P_FEE) self.assertEqual(c_o.sum, O_FEE) self.assertEqual(c_s.sum, S_FEE) self.assertEqual(c_h.sum, H_FEE)
def test_fees(self): "Test setting fees and verify that they are set properly" now = datetime.now() - timedelta(seconds=5) week_ago = datetime.now() - timedelta(days=7) P_FEE=30 S_FEE=500 O_FEE=60 H_FEE=0 soon = datetime.now() + timedelta(hours=1) # Old fees Fee.objects.create(type='P', start=week_ago, sum=P_FEE/2) Fee.objects.create(type='O', start=week_ago, sum=O_FEE/2) Fee.objects.create(type='S', start=week_ago, sum=S_FEE/2) Fee.objects.create(type='H', start=week_ago, sum=H_FEE/2) # Real fees p_fee = Fee.objects.create(type='P', start=now, sum=P_FEE) o_fee = Fee.objects.create(type='O', start=now, sum=O_FEE) s_fee = Fee.objects.create(type='S', start=now, sum=S_FEE) h_fee = Fee.objects.create(type='H', start=now, sum=H_FEE) # Future fees that must not interfere Fee.objects.create(type='P', start=soon, sum=P_FEE*2) Fee.objects.create(type='O', start=soon, sum=O_FEE*2) Fee.objects.create(type='S', start=soon, sum=S_FEE*2) Fee.objects.create(type='H', start=soon, sum=H_FEE*2) makebills() c_p = BillingCycle.objects.get(membership__type='P') c_o = BillingCycle.objects.get(membership__type='O') c_s = BillingCycle.objects.get(membership__type='S') c_h = BillingCycle.objects.get(membership__type='H') self.assertEqual(c_p.sum, P_FEE) self.assertEqual(c_o.sum, O_FEE) self.assertEqual(c_s.sum, S_FEE) self.assertEqual(c_h.sum, H_FEE)
def test_sending_with_cc(self): settings.BILLING_CC_EMAIL = "*****@*****.**" makebills() self.assertEquals(len(mail.outbox), 1) m = mail.outbox[0] self.assertEquals(m.to[0], self.membership.billing_email()) self.assertEquals(m.from_email, settings.BILLING_FROM_EMAIL) self.assertEquals(m.extra_headers['CC'], settings.BILLING_CC_EMAIL) self.assertTrue(settings.BILLING_CC_EMAIL in m.bcc)
def setUp(self): self.user = User.objects.get(id=1) membership = create_dummy_member('N') membership.preapprove(self.user) membership.approve(self.user) self.membership = membership makebills() self.cycle = BillingCycle.objects.get(membership=self.membership) self.bill = self.cycle.bill_set.order_by('due_date')[0] settings.ENABLE_REMINDERS = True
def test_expired_cycle(self): "makebills: before a cycle expires, a new one is created" cycle = create_billingcycle(self.membership) cycle.starts = datetime.now() - timedelta(days=365) cycle.ends = datetime.now() + timedelta(days=27) cycle.save() makebills() self.assertEquals(len(mail.outbox), 1) self.assertFalse(cycle.last_bill().is_reminder())
def test_single_preapproved_no_op(self): "makebills: preapproved membership no-op" membership = create_dummy_member('N') membership.preapprove(self.user) mail.outbox = [] makebills() self.assertEqual(len(mail.outbox), 0) cycles = membership.billingcycle_set.all() self.assertEqual(len(cycles), 0) membership.delete()
def test_approved_cycle_and_bill_creation(self): "makebills: cycle and bill creation" makebills() self.assertEqual(len(mail.outbox), 1) self.assertEqual(len(self.membership.billingcycle_set.all()), 1) membership2 = create_dummy_member('N') membership2.preapprove(self.user) membership2.approve(self.user) mail.outbox = [] makebills() self.assertEqual(len(membership2.billingcycle_set.all()), 1) self.assertEqual(len(mail.outbox), 1) c = membership2.billingcycle_set.all()[0] self.assertEqual(c.bill_set.count(), 1) self.assertEqual(c.last_bill().reminder_count, 0)
def test_new_billing_cycle_with_previous_paid(self): "makebills: new billing cycle with previous already paid" m = self.membership makebills() self.assertEqual(len(m.billingcycle_set.all()), 1) self.assertEqual(len(mail.outbox), 1) c = m.billingcycle_set.all()[0] c.end = datetime.now() + timedelta(days=5) c.save() b = c.last_bill() b.due_date = datetime.now() + timedelta(days=9) b.save() b.billingcycle.is_paid = True b.billingcycle.save() makebills() self.assertTrue(len(m.billingcycle_set.all()), 2) self.assertEqual(len(mail.outbox), 2)
def test_no_cycle_created(self): "makebills: no cycles after an expired membership, should log a warning" m = self.membership makebills() c = m.billingcycle_set.all()[0] c.end = datetime.now() - timedelta(hours=1) c.save() handler = MockLoggingHandler() makebills_logger.addHandler(handler) makebills() makebills_logger.removeHandler(handler) warnings = handler.messages["warning"] self.assertTrue(len(warnings) > 0) logged = False for warning in warnings: if "no new billing cycle created for" in warning: logged = True break self.assertTrue(logged)