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

1from datetime import datetime 

2from unittest.mock import MagicMock 

3 

4from django.conf import settings 

5from django.test import TestCase 

6from django.utils import timezone 

7 

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 

16 

17 

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) 

28 

29 self.payable = RenewalPayable(self.model) 

30 

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)) 

42 

43 

44class RegistrationPayableTest(TestCase): 

45 fixtures = ["members.json"] 

46 

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) 

56 

57 self.payable = RegistrationPayable(self.model) 

58 

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)) 

72 

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 ) 

93 

94 create_payment(registration, Member.objects.get(pk=1), Payment.CASH) 

95 

96 registration.contribution = 0 

97 

98 with self.assertRaises(PaymentError): 

99 registration.save()