Coverage for website/members/tests/test_models.py: 100.00%
134 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
3from django.test import TestCase, override_settings
4from django.utils import timezone
6from freezegun import freeze_time
8from members.models import Member, Profile
9from members.models.membership import Membership
12@override_settings(SUSPEND_SIGNALS=True)
13class MemberBirthdayTest(TestCase):
14 fixtures = ["members.json"]
16 def _make_date(self, date):
17 return timezone.make_aware(datetime.strptime(date, "%Y-%m-%d"))
19 def _get_members(self, start, end):
20 start_date = self._make_date(start)
21 end_date = self._make_date(end)
22 return Member.current_members.with_birthdays_in_range(start_date, end_date)
24 def _assert_none(self, start, end):
25 members = self._get_members(start, end)
26 self.assertEqual(len(members), 0)
28 def _assert_thom(self, start, end):
29 members = self._get_members(start, end)
30 self.assertEqual(len(members), 1)
31 self.assertEqual(members[0].get_full_name(), "Thom Wiggers")
33 def test_one_year_contains_birthday(self):
34 self._assert_thom("2016-03-02", "2016-08-08")
36 def test_one_year_not_contains_birthday(self):
37 self._assert_none("2016-01-01", "2016-02-01")
39 def test_span_year_contains_birthday(self):
40 self._assert_thom("2015-08-09", "2016-08-08")
42 def test_span_year_not_contains_birthday(self):
43 self._assert_none("2015-12-25", "2016-03-01")
45 def test_span_multiple_years_contains_birthday(self):
46 self._assert_thom("2012-12-31", "2016-01-01")
48 def test_range_before_person_born(self):
49 self._assert_none("1985-12-12", "1985-12-13")
51 def test_person_born_in_range_in_one_year(self):
52 self._assert_thom("1993-01-01", "1993-04-01")
54 def test_person_born_in_range_spanning_one_year(self):
55 self._assert_thom("1992-12-31", "1993-04-01")
57 def test_person_born_in_range_spanning_multiple_years(self):
58 self._assert_thom("1992-12-31", "1995-01-01")
61@override_settings(SUSPEND_SIGNALS=True)
62class MemberTest(TestCase):
63 fixtures = ["members.json"]
65 def test_has_been_member(self):
66 member = Member.objects.get(pk=1)
68 self.assertTrue(member.has_been_member())
70 m1 = member.membership_set.all()[0]
71 m1.type = "honorary"
72 m1.save()
73 self.assertFalse(member.has_been_member())
75 def test_has_been_honorary_member(self):
76 member = Member.objects.get(pk=1)
78 self.assertFalse(member.has_been_honorary_member())
80 m1 = member.membership_set.all()[0]
81 m1.type = "honorary"
82 m1.save()
83 self.assertTrue(member.has_been_honorary_member())
85 def test_membership_properties(self):
86 member = Member.objects.get(pk=1)
87 member.membership_set.all().delete()
89 old_membership = Membership.objects.create(
90 user=member,
91 since="2022-09-01",
92 until="2023-09-01",
93 type=Membership.MEMBER,
94 )
95 middle_membership = Membership.objects.create(
96 user=member,
97 since="2023-09-01",
98 until="2024-09-01",
99 type=Membership.MEMBER,
100 )
101 latest_membership = Membership.objects.create(
102 user=member,
103 since="2024-09-01",
104 until="2025-09-01",
105 type=Membership.MEMBER,
106 )
108 with freeze_time("2022-08-25"):
109 member.refresh_from_db()
110 self.assertFalse(member.has_active_membership())
111 self.assertIsNone(member.current_membership)
112 self.assertEqual(member.latest_membership, latest_membership)
114 with freeze_time("2022-09-01"):
115 member.refresh_from_db()
116 self.assertTrue(member.has_active_membership())
117 self.assertEqual(member.current_membership, old_membership)
118 self.assertEqual(member.latest_membership, latest_membership)
120 with freeze_time("2024-08-25"):
121 # A membership has been renewed before the end of the current one.
122 member.refresh_from_db()
123 self.assertTrue(member.has_active_membership())
124 self.assertEqual(member.current_membership, middle_membership)
125 self.assertEqual(member.latest_membership, latest_membership)
127 with freeze_time("2024-09-01"):
128 member.refresh_from_db()
129 self.assertTrue(member.has_active_membership())
130 self.assertEqual(member.current_membership, latest_membership)
131 self.assertEqual(member.latest_membership, latest_membership)
133 with freeze_time("2025-09-01"):
134 member.refresh_from_db()
135 self.assertFalse(member.has_active_membership())
136 self.assertIsNone(member.current_membership)
137 self.assertEqual(member.latest_membership, latest_membership)
140class MemberDisplayNameTest(TestCase):
141 @classmethod
142 def setUpTestData(cls):
143 cls.member = Member.objects.create(
144 username="johnnytest", first_name="", last_name=""
145 )
146 cls.profile = Profile.objects.create(
147 user_id=cls.member.pk,
148 initials=None,
149 nickname=None,
150 display_name_preference="full",
151 )
153 def setUp(self):
154 self.profile.display_name_preference = "full"
155 # Assuming we always have a first and last name
156 self.profile.user.first_name = "Johnny"
157 self.profile.user.last_name = "Test"
158 self.profile.nickname = None
159 self.profile.initials = None
161 def test_check_display_name_full(self):
162 self.assertEqual("Johnny Test", self.profile.display_name())
163 self.assertEqual("Johnny", self.profile.short_display_name())
165 def test_check_display_name_nickname(self):
166 self.profile.display_name_preference = "nickname"
167 self.assertEqual("Johnny Test", self.profile.display_name())
168 self.assertEqual("Johnny", self.profile.short_display_name())
169 self.profile.nickname = "John"
170 self.assertEqual("'John'", self.profile.display_name())
171 self.assertEqual("'John'", self.profile.short_display_name())
173 def test_check_display_name_firstname(self):
174 self.profile.display_name_preference = "firstname"
175 self.assertEqual("Johnny", self.profile.display_name())
176 self.assertEqual("Johnny", self.profile.short_display_name())
178 def test_check_display_name_initials(self):
179 self.profile.display_name_preference = "initials"
180 self.assertEqual("Test", self.profile.display_name())
181 self.assertEqual("Test", self.profile.short_display_name())
182 self.profile.initials = "J"
183 self.assertEqual("J Test", self.profile.display_name())
184 self.assertEqual("J Test", self.profile.short_display_name())
186 def test_check_display_name_fullnick(self):
187 self.profile.display_name_preference = "fullnick"
188 self.assertEqual("Johnny Test", self.profile.display_name())
189 self.assertEqual("Johnny", self.profile.short_display_name())
190 self.profile.nickname = "John"
191 self.assertEqual("Johnny 'John' Test", self.profile.display_name())
192 self.assertEqual("Johnny", self.profile.short_display_name())
194 def test_check_display_name_nicklast(self):
195 self.profile.display_name_preference = "nicklast"
196 self.assertEqual("Johnny Test", self.profile.display_name())
197 self.assertEqual("Johnny", self.profile.short_display_name())
198 self.profile.nickname = "John"
199 self.assertEqual("'John' Test", self.profile.display_name())
200 self.assertEqual("'John'", self.profile.short_display_name())