Coverage for website/registrations/tests/test_payables.py: 100.00%
57 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from datetime import datetime
2from unittest.mock import MagicMock
4from django.conf import settings
5from django.test import TestCase
6from django.utils import timezone
8from members.models import Membership
9from members.models.member import Member
10from payments.exceptions import PaymentError
11from payments.models import Payment
12from payments.payables import payables
13from payments.services import create_payment
14from registrations.models import Registration, Renewal
15from registrations.payables import RegistrationPayable, RenewalPayable
18class RenewalPayableTest(TestCase):
19 def setUp(self):
20 self.model = MagicMock()
21 self.model.contribution = 20
22 self.model.membership = MagicMock()
23 self.model.member = "member"
24 self.model.length = Renewal.MEMBERSHIP_YEAR
25 self.model.membership_type = Membership.BENEFACTOR
26 self.model.created_at = datetime(2018, 3, 4, 12, 0, 0)
27 self.model.updated_at = datetime(2018, 3, 5, 12, 0, 0)
29 self.payable = RenewalPayable(self.model)
31 def test_attributes(self):
32 self.assertEqual(self.payable.payment_amount, 20)
33 self.assertEqual(self.payable.payment_payer, "member")
34 self.assertEqual(
35 self.payable.payment_topic, "Membership renewal benefactor (year)"
36 )
37 self.assertEqual(
38 self.payable.payment_notes,
39 "Membership renewal benefactor (year). Creation date: March 4, 2018. Completion date: March 5, 2018",
40 )
41 self.assertFalse(self.payable.can_manage_payment(None))
44class RegistrationPayableTest(TestCase):
45 fixtures = ["members.json"]
47 def setUp(self):
48 self.model = MagicMock()
49 self.model.contribution = 20
50 self.model.membership = MagicMock()
51 self.model.membership.user = "member"
52 self.model.length = Registration.MEMBERSHIP_YEAR
53 self.model.membership_type = Membership.BENEFACTOR
54 self.model.created_at = datetime(2018, 3, 4, 12, 0, 0)
55 self.model.updated_at = datetime(2018, 3, 5, 12, 0, 0)
57 self.payable = RegistrationPayable(self.model)
59 def test_attributes(self):
60 self.assertEqual(self.payable.payment_amount, 20)
61 self.assertEqual(self.payable.payment_payer, "member")
62 self.payable.model.membership = None
63 self.assertEqual(self.payable.payment_payer, None)
64 self.assertEqual(
65 self.payable.payment_topic, "Membership registration benefactor (year)"
66 )
67 self.assertEqual(
68 self.payable.payment_notes,
69 "Membership registration benefactor (year). Creation date: March 4, 2018. Completion date: March 5, 2018",
70 )
71 self.assertFalse(self.payable.can_manage_payment(None))
73 def test_immutable_fields_after_payment(self):
74 payables.register(Registration, RegistrationPayable)
75 registration = Registration.objects.create(
76 first_name="John",
77 last_name="Doe",
78 email="johndoe@example.com",
79 programme="computingscience",
80 starting_year=2014,
81 address_street="Heyendaalseweg 135",
82 address_street2="",
83 address_postal_code="6525AJ",
84 address_city="Nijmegen",
85 address_country="NL",
86 phone_number="06123456789",
87 birthday=timezone.now().replace(year=1990),
88 length=Registration.MEMBERSHIP_YEAR,
89 membership_type=Membership.MEMBER,
90 status=Registration.STATUS_ACCEPTED,
91 contribution=settings.MEMBERSHIP_PRICES[Registration.MEMBERSHIP_YEAR],
92 )
94 create_payment(registration, Member.objects.get(pk=1), Payment.CASH)
96 registration.contribution = 0
98 with self.assertRaises(PaymentError):
99 registration.save()