Coverage for website/photos/tests/test_services.py: 100.00%
87 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 RequestFactory, TestCase, override_settings
2from django.utils.timezone import datetime
4from freezegun import freeze_time
6from members.models import Member, Membership
7from photos.models import Album
8from photos.services import get_annotated_accessible_albums, is_album_accessible
11@override_settings(SUSPEND_SIGNALS=True)
12class IsAlbumAccesibleTest(TestCase):
13 fixtures = ["members.json"]
15 @classmethod
16 def setUpTestData(cls):
17 cls.member = Member.objects.filter(username="testuser").first()
19 def setUp(self):
20 self.rf = RequestFactory()
22 @freeze_time("2017-01-01")
23 def test_is_album_accessible(self):
24 request = self.rf.get("/")
25 request.member = None
26 album = Album(date=datetime(year=2017, month=1, day=1), slug="test")
28 with self.subTest(membership=None):
29 self.assertFalse(is_album_accessible(request, album))
31 request.member = self.member
32 with self.subTest(membership=None):
33 self.assertFalse(is_album_accessible(request, album))
35 membership = Membership.objects.create(
36 user=self.member,
37 type=Membership.MEMBER,
38 since=datetime(year=2016, month=1, day=1),
39 )
40 self.member.refresh_from_db() # Clear the cached membership
42 with self.subTest(
43 membership_since=membership.since, membership_until=membership.until
44 ):
45 self.assertTrue(is_album_accessible(request, album))
47 membership.until = datetime(year=2016, month=1, day=1)
48 membership.save()
49 self.member.refresh_from_db() # Clear the cached membership
51 with self.subTest(
52 membership_since=membership.since, membership_until=membership.until
53 ):
54 self.assertFalse(is_album_accessible(request, album))
56 membership.until = datetime(year=2017, month=1, day=1)
57 membership.save()
58 self.member.refresh_from_db() # Clear the cached membership
60 with self.subTest(
61 membership_since=membership.since, membership_until=membership.until
62 ):
63 self.assertTrue(is_album_accessible(request, album))
66@override_settings(SUSPEND_SIGNALS=True)
67class GetAnnotatedAccessibleAlbumsTest(TestCase):
68 fixtures = ["members.json"]
70 @classmethod
71 def setUpTestData(cls):
72 cls.member = Member.objects.filter(username="testuser").first()
74 def setUp(self):
75 self.rf = RequestFactory()
77 @freeze_time("2017-01-01")
78 def test_get_annotated_accessible_albums(self):
79 request = self.rf.get("/")
80 request.member = None
81 album = Album(
82 title="test_case", date=datetime(year=2017, month=1, day=1), slug="test"
83 )
84 album.save()
86 self.assertEqual(Album.objects.count(), 1)
88 with self.subTest(membership=None):
89 albums = Album.objects.all()
90 albums = get_annotated_accessible_albums(request, albums)
91 for album in albums:
92 self.assertFalse(album.accessible)
94 request.member = self.member
95 with self.subTest(membership=None):
96 albums = Album.objects.all()
97 albums = get_annotated_accessible_albums(request, albums)
98 for album in albums:
99 self.assertFalse(album.accessible)
101 membership = Membership.objects.create(
102 user=self.member,
103 type=Membership.MEMBER,
104 since=datetime(year=2016, month=1, day=1),
105 )
106 self.member.refresh_from_db() # Clear the cached membership
108 with self.subTest(
109 membership_since=membership.since, membership_until=membership.until
110 ):
111 albums = Album.objects.all()
112 albums = get_annotated_accessible_albums(request, albums)
113 for album in albums:
114 self.assertTrue(album.accessible)
116 membership.until = datetime(year=2016, month=1, day=1)
117 membership.save()
118 self.member.refresh_from_db() # Clear the cached membership
120 with self.subTest(
121 membership_since=membership.since, membership_until=membership.until
122 ):
123 albums = Album.objects.all()
124 albums = get_annotated_accessible_albums(request, albums)
125 for album in albums:
126 self.assertFalse(album.accessible)
128 membership.until = datetime(year=2017, month=1, day=1)
129 membership.save()
130 self.member.refresh_from_db() # Clear the cached membership
132 with self.subTest(
133 membership_since=membership.since, membership_until=membership.until
134 ):
135 albums = Album.objects.all()
136 albums = get_annotated_accessible_albums(request, albums)
137 for album in albums:
138 self.assertTrue(album.accessible)