mirror of
https://github.com/Sea-Haven-Industries/meal-order-manager.git
synced 2026-10-05 15:21:57 +00:00
fix(form): restore description toggles after sign-in (#107)
Some checks are pending
Deploy / deploy (push) Waiting to run
Some checks are pending
Deploy / deploy (push) Waiting to run
* fix(form): restore description toggles after sign-in * fix(form): reset expanded descriptions on re-auth
This commit is contained in:
parent
139ea3b1d3
commit
a69e6d0a7c
2 changed files with 105 additions and 0 deletions
|
|
@ -124,6 +124,7 @@ function handleCredentialResponse(response) {
|
||||||
document.getElementById("app").classList.remove("is-hidden");
|
document.getElementById("app").classList.remove("is-hidden");
|
||||||
const footer = document.getElementById("sticky-footer");
|
const footer = document.getElementById("sticky-footer");
|
||||||
if (footer) footer.classList.remove("is-hidden");
|
if (footer) footer.classList.remove("is-hidden");
|
||||||
|
refreshAllDescToggles();
|
||||||
document.getElementById("user-name").textContent = payload.name;
|
document.getElementById("user-name").textContent = payload.name;
|
||||||
document.getElementById("user-email").textContent = payload.email;
|
document.getElementById("user-email").textContent = payload.email;
|
||||||
if (payload.picture) {
|
if (payload.picture) {
|
||||||
|
|
@ -266,6 +267,13 @@ function scheduleDescToggle(card) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function refreshAllDescToggles() {
|
||||||
|
document.querySelectorAll("#meals-list [data-meal-index]").forEach((card) => {
|
||||||
|
card.querySelector(".meal-desc")?.classList.remove("is-expanded");
|
||||||
|
scheduleDescToggle(card);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function updateMealCard(card, meal, i) {
|
function updateMealCard(card, meal, i) {
|
||||||
const qty = quantities[i] || 0;
|
const qty = quantities[i] || 0;
|
||||||
card.dataset.mealIndex = String(i);
|
card.dataset.mealIndex = String(i);
|
||||||
|
|
|
||||||
|
|
@ -927,6 +927,103 @@ class TestGenerateFormPlaywright:
|
||||||
|
|
||||||
|
|
||||||
class TestGenerateFormGooglePlaywright:
|
class TestGenerateFormGooglePlaywright:
|
||||||
|
def test_desc_toggle_attaches_after_auth_reveal(self, tmp_path):
|
||||||
|
sync_api = pytest.importorskip("playwright.sync_api")
|
||||||
|
sync_playwright = sync_api.sync_playwright
|
||||||
|
|
||||||
|
out = tmp_path / "google-order-form.html"
|
||||||
|
out.write_text(_render_for_browser(google=True))
|
||||||
|
|
||||||
|
with sync_playwright() as p:
|
||||||
|
try:
|
||||||
|
browser = p.chromium.launch(headless=True)
|
||||||
|
except Exception as exc:
|
||||||
|
raise RuntimeError(
|
||||||
|
"Chromium is required for form Playwright tests. "
|
||||||
|
"Run: playwright install --with-deps chromium"
|
||||||
|
) from exc
|
||||||
|
try:
|
||||||
|
page = browser.new_page()
|
||||||
|
page.add_init_script(
|
||||||
|
"""window.google = {
|
||||||
|
accounts: {
|
||||||
|
id: {
|
||||||
|
initialize() {},
|
||||||
|
renderButton() {},
|
||||||
|
disableAutoSelect() {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};"""
|
||||||
|
)
|
||||||
|
page.route(
|
||||||
|
"https://accounts.google.com/gsi/client",
|
||||||
|
lambda route: route.abort(),
|
||||||
|
)
|
||||||
|
_mock_form_routes(page)
|
||||||
|
page.goto(out.as_uri(), wait_until="domcontentloaded")
|
||||||
|
|
||||||
|
short_card = page.locator('[data-meal-index="0"]')
|
||||||
|
long_card = page.locator('[data-meal-index="1"]')
|
||||||
|
long_card.wait_for(state="attached")
|
||||||
|
page.evaluate(
|
||||||
|
"""() => new Promise((resolve) => {
|
||||||
|
requestAnimationFrame(() => requestAnimationFrame(resolve));
|
||||||
|
})"""
|
||||||
|
)
|
||||||
|
assert "is-hidden" in (
|
||||||
|
page.locator("#app").get_attribute("class") or ""
|
||||||
|
)
|
||||||
|
assert long_card.locator(".meal-desc-toggle").count() == 0
|
||||||
|
|
||||||
|
page.evaluate(
|
||||||
|
"(credential) => handleCredentialResponse({ credential })",
|
||||||
|
_google_credential(),
|
||||||
|
)
|
||||||
|
toggle = long_card.locator(".meal-desc-toggle")
|
||||||
|
toggle.wait_for(state="visible")
|
||||||
|
|
||||||
|
assert short_card.locator(".meal-desc-toggle").count() == 0
|
||||||
|
assert toggle.inner_text() == "More"
|
||||||
|
assert toggle.get_attribute("aria-expanded") == "false"
|
||||||
|
toggle.click()
|
||||||
|
assert toggle.inner_text() == "Less"
|
||||||
|
assert toggle.get_attribute("aria-expanded") == "true"
|
||||||
|
assert "is-expanded" in (
|
||||||
|
long_card.locator(".meal-desc").get_attribute("class") or ""
|
||||||
|
)
|
||||||
|
|
||||||
|
page.evaluate("signOut()")
|
||||||
|
assert "is-hidden" in (
|
||||||
|
page.locator("#app").get_attribute("class") or ""
|
||||||
|
)
|
||||||
|
page.evaluate(
|
||||||
|
"(credential) => handleCredentialResponse({ credential })",
|
||||||
|
_google_credential(),
|
||||||
|
)
|
||||||
|
page.wait_for_function(
|
||||||
|
"""() => {
|
||||||
|
const card = document.querySelector('[data-meal-index="1"]');
|
||||||
|
const desc = card?.querySelector('.meal-desc');
|
||||||
|
const toggle = card?.querySelector('.meal-desc-toggle');
|
||||||
|
return !desc?.classList.contains('is-expanded')
|
||||||
|
&& toggle?.textContent === 'More'
|
||||||
|
&& toggle?.getAttribute('aria-expanded') === 'false';
|
||||||
|
}"""
|
||||||
|
)
|
||||||
|
|
||||||
|
toggle = long_card.locator(".meal-desc-toggle")
|
||||||
|
toggle.click()
|
||||||
|
assert toggle.inner_text() == "Less"
|
||||||
|
assert toggle.get_attribute("aria-expanded") == "true"
|
||||||
|
toggle.click()
|
||||||
|
assert toggle.inner_text() == "More"
|
||||||
|
assert toggle.get_attribute("aria-expanded") == "false"
|
||||||
|
assert "is-expanded" not in (
|
||||||
|
long_card.locator(".meal-desc").get_attribute("class") or ""
|
||||||
|
)
|
||||||
|
finally:
|
||||||
|
browser.close()
|
||||||
|
|
||||||
@pytest.fixture(scope="class")
|
@pytest.fixture(scope="class")
|
||||||
@classmethod
|
@classmethod
|
||||||
def signed_in_admin_page(cls, tmp_path_factory):
|
def signed_in_admin_page(cls, tmp_path_factory):
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue