Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions isic/core/tests/test_collection_pin_browser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
from django.urls import reverse
from playwright.sync_api import expect
import pytest


@pytest.mark.playwright
def test_collection_pin_unpin(
staff_authenticated_page,
staff_authenticated_user,
collection_factory,
):
page = staff_authenticated_page

collection = collection_factory(
public=True, pinned=False, locked=False, creator=staff_authenticated_user
)
page.goto(reverse("core/collection-detail", args=[collection.pk]))

# Pin icon should not be visible yet
expect(page.locator(".ri-pushpin-2-fill")).not_to_be_visible()

# Pin the collection
page.get_by_role("button", name="Actions").click()
page.get_by_role("menuitem", name="Pin Collection").click()

page.wait_for_url(f"**{reverse('core/collection-detail', args=[collection.pk])}")

expect(page.get_by_text("Collection pinned.")).to_be_visible()
expect(page.locator(".ri-pushpin-2-fill")).to_be_visible()

# Unpin button should now be present
page.get_by_role("button", name="Actions").click()
expect(page.get_by_role("menuitem", name="Unpin Collection")).to_be_visible()

# Unpin the collection
page.get_by_role("menuitem", name="Unpin Collection").click()

page.wait_for_url(f"**{reverse('core/collection-detail', args=[collection.pk])}")

expect(page.get_by_text("Collection unpinned.")).to_be_visible()
expect(page.locator(".ri-pushpin-2-fill")).not_to_be_visible()

# Pin button should be back
page.get_by_role("button", name="Actions").click()
expect(page.get_by_role("menuitem", name="Pin Collection")).to_be_visible()


@pytest.mark.playwright
def test_collection_pin_disabled_for_private_collection(
staff_authenticated_page,
staff_authenticated_user,
collection_factory,
):
page = staff_authenticated_page

collection = collection_factory(
public=False, pinned=False, locked=False, creator=staff_authenticated_user
)
page.goto(reverse("core/collection-detail", args=[collection.pk]))

page.get_by_role("button", name="Actions").click()

# The disabled span should be present with the correct title
pin_item = page.locator("span", has_text="Pin Collection")
expect(pin_item).to_be_visible()
expect(pin_item).to_have_attribute("title", "Collection must be public to be pinned")

# No clickable link — only the disabled span exists
expect(page.locator("a", has_text="Pin Collection")).not_to_be_visible()