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
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from django.test import TestCase, override_settings
3from payments.models import Payment, PaymentUser
4from payments.payables import payables
5from payments.tests.__mocks__ import MockModel, MockPayable
6from payments.widgets import PaymentWidget
9@override_settings(SUSPEND_SIGNALS=True)
10class PaymentWidgetTest(TestCase):
11 """Tests widgets."""
13 fixtures = ["members.json"]
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)
23 def setUp(self):
24 payables.register(MockModel, MockPayable)
26 def tearDown(self):
27 payables._unregister(MockModel)
29 def test_get_context(self):
30 widget = PaymentWidget(obj=self.obj)
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")
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")
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)
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)
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)
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)
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)