diff --git a/tests/e2e/overflow-menu.test.e2e.ts b/tests/e2e/overflow-menu.test.e2e.ts new file mode 100644 index 0000000000..9b0a5cb8ee --- /dev/null +++ b/tests/e2e/overflow-menu.test.e2e.ts @@ -0,0 +1,44 @@ +// Copyright 2026 The Forgejo Authors. All rights reserved. +// SPDX-License-Identifier: GPL-3.0-or-later + +// @watch start +// templates/user/profile.tmpl +// templates/user/overview/header.tmpl +// web_src/css/modules/tippy.css +// web_src/js/modules/tippy.js +// @watch end + +import {expect} from '@playwright/test'; +import {test} from './utils_e2e.ts'; + +test(`Visual properties`, async ({page, isMobile}) => { + test.skip(!isMobile, 'Overflow menu button only appears on mobile'); + + const noBg = 'rgba(0, 0, 0, 0)'; + const activeBg = 'rgb(226, 226, 229)'; + const menuItemSelector = `.tippy-box .tippy-content .tippy-target > a.item`; + const activeItemSelector = `${menuItemSelector}.active`; + const inactiveItemSelector = `${menuItemSelector}:not(.active)`; + + await page.goto(`/user2/repo1`); + const overflowMenuButton = page.locator(`.overflow-menu-button`); + + await overflowMenuButton.click(); + const menuItems = page.locator(`${menuItemSelector}`); + const itemCount = await menuItems.count(); + for (let i = 0; i < itemCount; i++) { + await menuItems.nth(i).click(); + await page.waitForLoadState('domcontentloaded'); + + await overflowMenuButton.click(); + const activeItem = page.locator(`${activeItemSelector}`); + expect(await activeItem.evaluate((el) => getComputedStyle(el).backgroundColor)).toBe(activeBg); + + const inactiveItems = page.locator(inactiveItemSelector); + const inactiveCount = await inactiveItems.count(); + for (let j = 0; j < itemCount - inactiveCount; j++) { + const nonActiveItem = page.locator(`${inactiveItemSelector}`).nth(j); + expect(await nonActiveItem.evaluate((el) => getComputedStyle(el).backgroundColor)).toBe(noBg); + } + } +}); diff --git a/web_src/css/modules/tippy.css b/web_src/css/modules/tippy.css index de681b24b6..ab894d46c5 100644 --- a/web_src/css/modules/tippy.css +++ b/web_src/css/modules/tippy.css @@ -97,6 +97,10 @@ background: var(--color-active); } +.tippy-box[data-theme="menu"] .tippy-target > .item.active { + background: var(--color-active); +} + /* box-with-header theme to look like .ui.attached.segment. can contain .ui.attached.header */ .tippy-box[data-theme="box-with-header"] {