|
18 | 18 | PackageCategory,
|
19 | 19 | PackageListing,
|
20 | 20 | )
|
| 21 | +from thunderstore.core.factories import UserFactory |
21 | 22 | from thunderstore.repository.consts import PackageVersionReviewStatus
|
22 | 23 | from thunderstore.repository.models import Package, TeamMember, TeamMemberRole
|
23 | 24 |
|
@@ -525,3 +526,89 @@ def test_package_listing_visibility_updates_when_all_versions_not_visible(
|
525 | 526 |
|
526 | 527 | active_package_listing.refresh_from_db()
|
527 | 528 | 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) |
0 commit comments