|
@@ -5,10 +5,40 @@ from coin.members.tests import MemberTestsUtils
|
|
|
from coin.members.models import Member, LdapUser
|
|
|
from coin.billing.models import Invoice
|
|
|
from coin.offers.models import Offer, Service, OfferSubscription
|
|
|
-from coin.billing.create_subscriptions_invoices import create_invoice_for_a_period
|
|
|
+from coin.billing.create_subscriptions_invoices import create_member_invoice_for_a_period
|
|
|
|
|
|
class BillingInvoiceCreationTests(TestCase):
|
|
|
|
|
|
+ def test_first_subscription_invoice_has_initial_fees(self):
|
|
|
+ """
|
|
|
+ Test que la première facture générée pour un abonnement possède les
|
|
|
+ frais de mise en servic
|
|
|
+ """
|
|
|
+ # Créé une offre
|
|
|
+ service = Service(name='ServiceTest')
|
|
|
+ service.save()
|
|
|
+ offer = Offer(name='Offre', billing_period=3, period_fees=30,
|
|
|
+ initial_fees=50, service=service)
|
|
|
+ offer.save()
|
|
|
+ # Créé un membre
|
|
|
+ ldap_cn = MemberTestsUtils.get_random_ldap_cn()
|
|
|
+ member = Member(first_name = 'Balthazar', last_name = 'Picsou',
|
|
|
+ ldap_cn = ldap_cn)
|
|
|
+ member.save()
|
|
|
+ # Créé un abonnement
|
|
|
+ subscription = OfferSubscription(
|
|
|
+ subscription_date=datetime.date(2014,1,1),
|
|
|
+ member=member,
|
|
|
+ offer=offer)
|
|
|
+ subscription.save()
|
|
|
+ # Demande la création de la première facture
|
|
|
+ invoice = create_member_invoice_for_a_period(member, datetime.date(2014,1,1))
|
|
|
+ # La facture doit avoir les frais de mise en service
|
|
|
+ # Pour tester cela on tri par montant d'item décroissant.
|
|
|
+ # Comme les initial_fees sont plus élevées que les period_fees, il doit
|
|
|
+ # sortie en premier
|
|
|
+ self.assertEqual(invoice.details.order_by('-amount').first().amount, 50)
|
|
|
+
|
|
|
def test_subscription_cant_be_charged_twice(self):
|
|
|
"""
|
|
|
Test qu'un abonnement ne peut pas être facturé deux fois pendant une
|
|
@@ -32,10 +62,10 @@ class BillingInvoiceCreationTests(TestCase):
|
|
|
member=member,
|
|
|
offer=offer)
|
|
|
subscription.save()
|
|
|
+
|
|
|
# Créé une facture
|
|
|
invoice = Invoice(member=member)
|
|
|
invoice.save()
|
|
|
-
|
|
|
# Créé une facturation pour cette offre pour la première période
|
|
|
# de janvier à mars
|
|
|
invoice.details.create(label=offer.name,
|
|
@@ -53,18 +83,18 @@ class BillingInvoiceCreationTests(TestCase):
|
|
|
period_to=datetime.date(2014,8,31))
|
|
|
|
|
|
# Demande la génération d'une facture pour février
|
|
|
- # Elle doit échouer et renvoyer None car l'offre est déjà facturée de
|
|
|
+ # Elle doit renvoyer None car l'offre est déjà facturée de
|
|
|
# janvier à mars
|
|
|
- invoice_test_1 = create_invoice_for_a_period(member,
|
|
|
- datetime.date(2014,2,1))
|
|
|
+ invoice_test_1 = create_member_invoice_for_a_period(
|
|
|
+ member,datetime.date(2014,2,1))
|
|
|
self.assertEqual(invoice_test_1, None)
|
|
|
|
|
|
# Demande la création d'une facture pour avril
|
|
|
# Elle doit fonctionner, mais devrait avoir une période de facturation
|
|
|
# que de 2 mois, d'avril à mai car il y a déjà une facture pour
|
|
|
# la période de juin à aout
|
|
|
- invoice_test_2 = create_invoice_for_a_period(member,
|
|
|
- datetime.date(2014,4,1))
|
|
|
+ invoice_test_2 = create_member_invoice_for_a_period(
|
|
|
+ member, datetime.date(2014,4,1))
|
|
|
self.assertEqual(invoice_test_2.details.first().period_from,
|
|
|
datetime.date(2014,4,1))
|
|
|
self.assertEqual(invoice_test_2.details.first().period_to,
|