Coverage for website/payments/tests/test_widgets.py: 100.00%

54 statements  

« prev     ^ index     » next       coverage.py v7.6.7, created at 2025-08-14 10:31 +0000

1from django.test import TestCase, override_settings 

2 

3from payments.models import Payment, PaymentUser 

4from payments.payables import payables 

5from payments.tests.__mocks__ import MockModel, MockPayable 

6from payments.widgets import PaymentWidget 

7 

8 

9@override_settings(SUSPEND_SIGNALS=True) 

10class PaymentWidgetTest(TestCase): 

11 """Tests widgets.""" 

12 

13 fixtures = ["members.json"] 

14 

15 @classmethod 

16 def setUpTestData(cls): 

17 cls.member = PaymentUser.objects.filter(last_name="Wiggers").first() 

18 cls.payment = Payment.objects.create( 

19 amount=10, paid_by=cls.member, processed_by=cls.member, type=Payment.CASH 

20 ) 

21 cls.obj = MockModel(payer=cls.member, payment=cls.payment) 

22 

23 def setUp(self): 

24 payables.register(MockModel, MockPayable) 

25 

26 def tearDown(self): 

27 payables._unregister(MockModel) 

28 

29 def test_get_context(self): 

30 widget = PaymentWidget(obj=self.obj) 

31 

32 with self.subTest("With object only"): 

33 context = widget.get_context("payment", None, {}) 

34 self.assertEqual(context["obj"].pk, payables.get_payable(self.obj).pk) 

35 self.assertEqual(context["app_label"], "mock_app") 

36 self.assertEqual(context["model_name"], "mock_model") 

37 

38 with self.subTest("Trying to set payment to none"): 

39 self.obj.payment = None 

40 widget = PaymentWidget(obj=self.obj) 

41 context = widget.get_context("payment", None, {}) 

42 self.assertEqual(context["obj"].pk, payables.get_payable(self.obj).pk) 

43 self.assertEqual(context["app_label"], "mock_app") 

44 self.assertEqual(context["model_name"], "mock_model") 

45 

46 with self.subTest("With payment primary key"): 

47 context = widget.get_context("payment", self.payment.pk, {}) 

48 self.assertEqual( 

49 context["url"], 

50 f"/admin/payments/payment/{self.payment.pk}/change/", 

51 ) 

52 self.assertEqual(context["payment"], self.payment) 

53 

54 with self.subTest("Empty value"): 

55 widget = PaymentWidget() 

56 context = widget.get_context("payment", None, {}) 

57 self.assertNotIn("url", context) 

58 self.assertNotIn("payment", context) 

59 

60 def test_value_from_datadict(self): 

61 with self.subTest("Empty value"): 

62 widget = PaymentWidget() 

63 value = widget.value_from_datadict([], [], None) 

64 self.assertIsNone(value) 

65 

66 with self.subTest("With payment"): 

67 widget = PaymentWidget(obj=self.obj) 

68 value = widget.value_from_datadict([], [], None) 

69 self.assertEqual(value, self.payment.pk) 

70 

71 with self.subTest("With unpaid payable"): 

72 self.obj.payment = None 

73 widget = PaymentWidget(obj=self.obj) 

74 value = widget.value_from_datadict([], [], None) 

75 self.assertIsNone(value)