diff --git a/templates/repo/issue/labels/labels_sidebar.tmpl b/templates/repo/issue/labels/labels_sidebar.tmpl
index be30baba92..d39c2133a7 100644
--- a/templates/repo/issue/labels/labels_sidebar.tmpl
+++ b/templates/repo/issue/labels/labels_sidebar.tmpl
@@ -1,11 +1,13 @@
{{ctx.Locale.Tr "repo.issues.new.no_label"}}
-
- {{range .root.Labels}}
- {{template "repo/issue/labels/label" dict "root" $.root "label" .}}
- {{end}}
- {{range .root.OrgLabels}}
- {{template "repo/issue/labels/label" dict "root" $.root "label" .}}
- {{end}}
-
+ {{if .root.HasSelectedLabel}}
+
+ {{range .root.Labels}}
+ {{template "repo/issue/labels/label" dict "root" $.root "label" .}}
+ {{end}}
+ {{range .root.OrgLabels}}
+ {{template "repo/issue/labels/label" dict "root" $.root "label" .}}
+ {{end}}
+
+ {{end}}
diff --git a/tests/e2e/README.md b/tests/e2e/README.md
index 0f1ef4b40e..e5fd1ca6c0 100644
--- a/tests/e2e/README.md
+++ b/tests/e2e/README.md
@@ -20,32 +20,6 @@ make clean frontend
npx playwright install-deps
```
-## Interactive testing
-
-You can make use of Playwright's integrated UI mode to run individual tests,
-get feedback and visually trace what your browser is doing.
-
-To do so, launch the debugserver using:
-
-```
-make test-e2e-debugserver
-```
-
-Then launch the Playwright UI:
-
-```
-npx playwright test --ui
-```
-
-You can also run individual tests while the debugserver using:
-
-```
-npx playwright test actions.test.e2e.js:9
-```
-
-First, specify the complete test filename,
-and after the colon you can put the linenumber where the test is defined.
-
## Run all tests via local act_runner
```
diff --git a/tests/e2e/issue-sidebar.test.e2e.js b/tests/e2e/issue-sidebar.test.e2e.js
deleted file mode 100644
index 41b1b2064a..0000000000
--- a/tests/e2e/issue-sidebar.test.e2e.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// @ts-check
-import {test, expect} from '@playwright/test';
-import {login_user, load_logged_in_context} from './utils_e2e.js';
-
-test.beforeAll(async ({browser}, workerInfo) => {
- await login_user(browser, workerInfo, 'user2');
-});
-
-async function login({browser}, workerInfo) {
- const context = await load_logged_in_context(browser, workerInfo, 'user2');
- return await context.newPage();
-}
-
-// belongs to test: Pull: Toggle WIP
-const prTitle = 'pull5';
-
-async function click_toggle_wip({page}) {
- await page.locator('.toggle-wip>a').click();
- await page.waitForLoadState('networkidle');
-}
-
-async function check_wip({page}, is) {
- const elemTitle = '#issue-title-display';
- const stateLabel = '.issue-state-label';
- await expect(page.locator(elemTitle)).toContainText(prTitle);
- await expect(page.locator(elemTitle)).toContainText('#5');
- if (is) {
- await expect(page.locator(elemTitle)).toContainText('WIP');
- await expect(page.locator(stateLabel)).toContainText('Draft');
- } else {
- await expect(page.locator(elemTitle)).not.toContainText('WIP');
- await expect(page.locator(stateLabel)).toContainText('Open');
- }
-}
-
-test('Pull: Toggle WIP', async ({browser}, workerInfo) => {
- test.skip(workerInfo.project.name === 'Mobile Safari', 'Unable to get tests working on Safari Mobile, see https://codeberg.org/forgejo/forgejo/pulls/3445#issuecomment-1789636');
- const page = await login({browser}, workerInfo);
- const response = await page.goto('/user2/repo1/pulls/5');
- await expect(response?.status()).toBe(200); // Status OK
- // initial state
- await check_wip({page}, false);
- // toggle to WIP
- await click_toggle_wip({page});
- await check_wip({page}, true);
- // remove WIP
- await click_toggle_wip({page});
- await check_wip({page}, false);
-
- // manually edit title to another prefix
- await page.locator('#issue-title-edit-show').click();
- await page.locator('#issue-title-editor input').fill(`[WIP] ${prTitle}`);
- await page.getByText('Save').click();
- await page.waitForLoadState('networkidle');
- await check_wip({page}, true);
- // remove again
- await click_toggle_wip({page});
- await check_wip({page}, false);
-});
-
-test('Issue: Labels', async ({browser}, workerInfo) => {
- test.skip(workerInfo.project.name === 'Mobile Safari', 'Unable to get tests working on Safari Mobile, see https://codeberg.org/forgejo/forgejo/pulls/3445#issuecomment-1789636');
- const page = await login({browser}, workerInfo);
- // select label list in sidebar only
- const labelList = page.locator('.issue-content-right .labels-list a');
- const response = await page.goto('/user2/repo1/issues/1');
- await expect(response?.status()).toBe(200);
- // preconditions
- await expect(labelList.filter({hasText: 'label1'})).toBeVisible();
- await expect(labelList.filter({hasText: 'label2'})).not.toBeVisible();
- // add label2
- await page.locator('.select-label').click();
- // label search could be tested this way:
- // await page.locator('.select-label input').fill('label2');
- await page.locator('.select-label .item').filter({hasText: 'label2'}).click();
- await page.locator('.select-label').click();
- await page.waitForLoadState('networkidle');
- await expect(labelList.filter({hasText: 'label2'})).toBeVisible();
- // test removing label again
- await page.locator('.select-label').click();
- await page.locator('.select-label .item').filter({hasText: 'label2'}).click();
- await page.locator('.select-label').click();
- await page.waitForLoadState('networkidle');
- await expect(labelList.filter({hasText: 'label2'})).not.toBeVisible();
- await expect(labelList.filter({hasText: 'label1'})).toBeVisible();
-});
diff --git a/tests/integration/issue_test.go b/tests/integration/issue_test.go
index 3f61dafbf0..6a0a9c2934 100644
--- a/tests/integration/issue_test.go
+++ b/tests/integration/issue_test.go
@@ -939,3 +939,32 @@ func TestIssueUnsubscription(t *testing.T) {
session.MakeRequest(t, req, http.StatusOK)
})
}
+
+func TestIssueLabelList(t *testing.T) {
+ defer tests.PrepareTestEnv(t)()
+ labelListSelector := ".labels.list .labels-list"
+ hiddenClass := "tw-hidden"
+
+ t.Run("Show label list", func(t *testing.T) {
+ defer tests.PrintCurrentTest(t)()
+
+ req := NewRequest(t, "GET", "/user2/repo1/issues/1")
+ resp := MakeRequest(t, req, http.StatusOK)
+ htmlDoc := NewHTMLParser(t, resp.Body)
+
+ htmlDoc.AssertElement(t, labelListSelector, true)
+ htmlDoc.AssertElement(t, ".labels.list .no-select.item."+hiddenClass, true)
+ })
+
+ t.Run("Show no label list", func(t *testing.T) {
+ defer tests.PrintCurrentTest(t)()
+ session := loginUser(t, "user2")
+
+ req := NewRequest(t, "GET", "/user2/repo2/issues/1")
+ resp := session.MakeRequest(t, req, http.StatusOK)
+ htmlDoc := NewHTMLParser(t, resp.Body)
+
+ htmlDoc.AssertElement(t, labelListSelector, false)
+ htmlDoc.AssertElement(t, ".labels.list .no-select.item:not([class*='"+hiddenClass+"'])", true)
+ })
+}