@@ -21,12 +21,16 @@ class InvoiceTestCase(RegistrationCartTestCase):
def _invoice_containing_prod_1(self, qty=1):
cart = TestingCartController.for_user(self.USER_1)
cart.add_to_cart(self.PROD_1, qty)
return TestingInvoiceController.for_cart(self.reget(cart.cart))
def _credit_note_for_invoice(self, invoice):
note = commerce.CreditNote.objects.get(invoice=invoice)
return TestingCreditNoteController(note)
def test_create_invoice(self):
current_cart = TestingCartController.for_user(self.USER_1)
# Should be able to create an invoice after the product is added
current_cart.add_to_cart(self.PROD_1, 1)
invoice_1 = TestingInvoiceController.for_cart(current_cart.cart)
@@ -311,14 +315,13 @@ class InvoiceTestCase(RegistrationCartTestCase):
invoice.pay("Reference", to_pay)
self.assertTrue(invoice.invoice.is_paid)
invoice.refund()
# There should be one credit note generated out of the invoice.
credit_note = commerce.CreditNote.objects.get(invoice=invoice.invoice)
cn = TestingCreditNoteController(credit_note)
cn = self._credit_note_for_invoice(invoice.invoice)
# That credit note should be in the unclaimed pile
self.assertEquals(1, commerce.CreditNote.unclaimed().count())
# Create a new (identical) cart with invoice
@@ -339,14 +342,13 @@ class InvoiceTestCase(RegistrationCartTestCase):
# Create a new cart (of half value of inv 1) and get invoice
cart.add_to_cart(self.PROD_1, 1)
@@ -378,14 +380,13 @@ class InvoiceTestCase(RegistrationCartTestCase):
# Create a new cart with invoice, pay it
invoice_2 = self._invoice_containing_prod_1(1)
invoice_2.pay("LOL", invoice_2.invoice.value)
# Cannot pay paid invoice
@@ -412,15 +413,14 @@ class InvoiceTestCase(RegistrationCartTestCase):
cn.refund()
# Refunding a credit note should mark it as claimed
self.assertEquals(0, commerce.CreditNote.unclaimed().count())
# Create a new cart with invoice
@@ -441,15 +441,13 @@ class InvoiceTestCase(RegistrationCartTestCase):
invoice_2 = TestingInvoiceController.for_cart(self.reget(cart.cart))
@@ -457,6 +455,44 @@ class InvoiceTestCase(RegistrationCartTestCase):
# Cannot refund this credit note as it is already applied.
with self.assertRaises(ValidationError):
def test_money_into_void_invoice_generates_credit_note(self):
invoice = self._invoice_containing_prod_1(1)
invoice.void()
val = invoice.invoice.value
invoice.pay("Paying into the void.", val, pre_validate=False)
self.assertEqual(val, cn.credit_note.value)
def test_money_into_refunded_invoice_generates_credit_note(self):
invoice.pay("Paying the first time.", val)
cnval = val - 1
invoice.pay("Paying into the void.", cnval, pre_validate=False)
notes = commerce.CreditNote.objects.filter(invoice=invoice.invoice)
notes = sorted(notes, key = lambda note: note.value)
self.assertEqual(cnval, notes[0].value)
self.assertEqual(val, notes[1].value)
def test_money_into_paid_invoice_generates_credit_note(self):