04552aa8f6
The Game status dropdown is now a <game-status-selector> light-DOM custom
element: the Python builder emits the tag + kebab attrs htpy-style, behavior
lives in ts/elements/{dropdown,game-status-selector}.ts wired by the native
connectedCallback, and GameStatusSelectorProps is the codegen'd contract. The
~70-line inline-Alpine f-string is gone.
Also fix SimpleTable to collect and re-attach the media of its row/header
nodes: it stringifies cells into the table markup, which silently dropped each
cell component's declared Media — so a <game-status-selector> in a cell never
got its <script> emitted. Now Page() emits it.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
import pytest
|
|
from django.urls import reverse
|
|
from playwright.sync_api import Page, expect
|
|
|
|
|
|
@pytest.fixture
|
|
def authenticated_page(live_server, page: Page, django_user_model) -> Page:
|
|
django_user_model.objects.create_user(username="tester", password="secret123")
|
|
page.goto(f"{live_server.url}{reverse('login')}")
|
|
page.fill('input[name="username"]', "tester")
|
|
page.fill('input[name="password"]', "secret123")
|
|
page.click('input[type="submit"]')
|
|
page.wait_for_url(f"{live_server.url}/tracker**")
|
|
return page
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_game_status_selector_opens_and_patches(authenticated_page: Page, live_server):
|
|
from games.models import Game, Platform
|
|
|
|
platform = Platform.objects.create(name="PC", icon="pc")
|
|
game = Game.objects.create(name="Test Game", platform=platform, status="u")
|
|
|
|
page = authenticated_page
|
|
page.goto(f"{live_server.url}{reverse('games:list_games')}")
|
|
|
|
host = page.locator("game-status-selector").first
|
|
expect(host).to_be_attached()
|
|
host.locator("[data-toggle]").click()
|
|
expect(host.locator("[data-menu]")).to_be_visible()
|
|
host.locator('[data-option][data-value="f"]').click()
|
|
expect(host.locator("[data-menu]")).to_be_hidden()
|
|
game.refresh_from_db()
|
|
assert game.status == "f"
|