Skip to content

Commit 313c143

Browse files
committed
Improve visibility test coverage
1 parent 29e94b8 commit 313c143

File tree

2 files changed

+139
-0
lines changed

2 files changed

+139
-0
lines changed

django/thunderstore/community/tests/test_package_listing.py

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
PackageCategory,
1919
PackageListing,
2020
)
21+
from thunderstore.core.factories import UserFactory
2122
from thunderstore.repository.consts import PackageVersionReviewStatus
2223
from thunderstore.repository.models import Package, TeamMember, TeamMemberRole
2324

@@ -525,3 +526,89 @@ def test_package_listing_visibility_updates_when_all_versions_not_visible(
525526

526527
active_package_listing.refresh_from_db()
527528
assert_listing_is_public(active_package_listing)
529+
530+
531+
@pytest.mark.django_db
532+
def test_is_visible_to_user_true_if_public_detail():
533+
listing = PackageListingFactory()
534+
listing.visibility.public_detail = True
535+
listing.visibility.save()
536+
537+
user = UserFactory.create()
538+
539+
assert listing.is_visible_to_user(None)
540+
assert listing.is_visible_to_user(user)
541+
542+
543+
@pytest.mark.django_db
544+
def test_is_visible_to_user_false_if_no_user_and_not_public():
545+
listing = PackageListingFactory()
546+
listing.visibility.public_detail = False
547+
listing.visibility.save()
548+
549+
assert not listing.is_visible_to_user(None)
550+
551+
552+
@pytest.mark.django_db
553+
def test_is_visible_to_users_with_sufficient_permissions():
554+
listing = PackageListingFactory()
555+
listing.visibility.public_detail = False
556+
listing.visibility.save()
557+
558+
user = UserFactory.create()
559+
560+
assert not listing.is_visible_to_user(user)
561+
562+
owner = UserFactory.create()
563+
TeamMember.objects.create(
564+
user=owner,
565+
team=listing.package.owner,
566+
role=TeamMemberRole.owner,
567+
)
568+
569+
moderator = UserFactory.create()
570+
CommunityMembership.objects.create(
571+
user=moderator,
572+
community=listing.community,
573+
role=CommunityMemberRole.moderator,
574+
)
575+
576+
superuser = UserFactory.create(is_superuser=True)
577+
578+
assert listing.is_visible_to_user(owner)
579+
assert listing.is_visible_to_user(moderator)
580+
assert listing.is_visible_to_user(superuser)
581+
582+
583+
@pytest.mark.django_db
584+
def test_is_visible_to_user_false_if_visible_detail_false():
585+
listing = PackageListingFactory()
586+
listing.visibility.public_detail = False
587+
listing.visibility.owner_detail = False
588+
listing.visibility.moderator_detail = False
589+
listing.visibility.admin_detail = False
590+
listing.visibility.save()
591+
592+
user = UserFactory.create()
593+
594+
assert not listing.is_visible_to_user(user)
595+
596+
TeamMember.objects.create(
597+
user=user,
598+
team=listing.package.owner,
599+
role=TeamMemberRole.owner,
600+
)
601+
602+
assert not listing.is_visible_to_user(user)
603+
604+
CommunityMembership.objects.create(
605+
user=user,
606+
community=listing.community,
607+
role=CommunityMemberRole.moderator,
608+
)
609+
610+
assert not listing.is_visible_to_user(user)
611+
612+
user.is_superuser = True
613+
614+
assert not listing.is_visible_to_user(user)

django/thunderstore/repository/tests/test_package_version.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
from django.db import IntegrityError
55

66
from thunderstore.community.factories import PackageListingFactory
7+
from thunderstore.community.models import CommunityMemberRole, CommunityMembership
78
from thunderstore.community.models.package_listing import PackageListing
9+
from thunderstore.core.factories import UserFactory
810
from thunderstore.repository.consts import PackageVersionReviewStatus
911
from thunderstore.repository.factories import PackageFactory, PackageVersionFactory
1012
from thunderstore.repository.models import PackageVersion
@@ -219,3 +221,53 @@ def test_package_listing_visibility_updates_with_package_is_active(
219221

220222
package_version.refresh_from_db()
221223
assert_version_is_public(package_version)
224+
225+
226+
@pytest.mark.django_db
227+
def test_can_user_manage_approval_status_false_if_immune():
228+
user = UserFactory.create()
229+
230+
listing = PackageListingFactory(
231+
package_version_kwargs={"review_status": PackageVersionReviewStatus.immune}
232+
)
233+
234+
CommunityMembership.objects.create(
235+
user=user,
236+
community=listing.community,
237+
role=CommunityMemberRole.moderator,
238+
)
239+
240+
version = listing.package.latest
241+
242+
assert version.review_status == PackageVersionReviewStatus.immune
243+
assert not version.can_user_manage_approval_status(user)
244+
245+
246+
@pytest.mark.django_db
247+
def test_can_user_manage_approval_status_true_if_one_listing_allows():
248+
user = UserFactory.create()
249+
250+
listing1 = PackageListingFactory()
251+
listing2 = PackageListingFactory(package=listing1.package)
252+
253+
CommunityMembership.objects.create(
254+
user=user,
255+
community=listing2.community,
256+
role=CommunityMemberRole.moderator,
257+
)
258+
259+
version = listing1.package.latest
260+
261+
assert version.can_user_manage_approval_status(user)
262+
263+
264+
@pytest.mark.django_db
265+
def test_can_user_manage_approval_status_false_if_none_allow():
266+
user = UserFactory.create()
267+
268+
listing1 = PackageListingFactory()
269+
listing2 = PackageListingFactory(package=listing1.package)
270+
271+
version = listing1.package.latest
272+
273+
assert not version.can_user_manage_approval_status(user)

0 commit comments

Comments
 (0)