From: Alexander Moisseev Date: Sun, 5 Oct 2025 17:08:30 +0000 (+0300) Subject: [Test] Add e2e for classifier dropdown population X-Git-Tag: 3.14.0~92^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=500ef16d277b045da0abde7a7770284ef305a479;p=thirdparty%2Frspamd.git [Test] Add e2e for classifier dropdown population after RO → Disconnect → Enable --- diff --git a/test/playwright/tests/scan.spec.mjs b/test/playwright/tests/scan.spec.mjs index 5ac9a9abb0..0e27a74ac9 100644 --- a/test/playwright/tests/scan.spec.mjs +++ b/test/playwright/tests/scan.spec.mjs @@ -157,4 +157,48 @@ test.describe.serial("Scan flow across WebUI tabs", () => { } }); }); + + test.describe("Regression: classifier list after RO → disconnect → enable", () => { + test("Classifier dropdown is populated after reconnect", async ({browser}, testInfo) => { + const {readOnlyPassword, enablePassword} = testInfo.project.use.rspamdPasswords; + + // Use isolated context to avoid pre-populated state from other tests + const context = await browser.newContext(); + const page2 = await context.newPage(); + + async function gotoTabLocal(name) { + await page2.locator(`#${name}_nav`).click(); + } + + // Login as read-only + await login(page2, readOnlyPassword); + await page2.waitForSelector("#navBar:not(.d-none)"); + + // Go to Scan in RO + await gotoTabLocal("scan"); + await expect(page2.locator("#scan")).toBeVisible(); + + // Disconnect and login as enable (writable) + await page2.locator("#disconnect").click(); + // Avoid shared login() helper which calls page.goto('/') to stay on the same tab. + await page2.locator("#connectPassword").fill(enablePassword); + // Expect classifiers request after successful enable login + const p = page2.waitForResponse( + (r) => r.url().includes("/bayes/classifiers") && r.status() === 200, + {timeout: 5000} + ); + await page2.locator("#connectButton").click(); + await page2.waitForSelector("#navBar:not(.d-none)"); + await p; + + // Expect classifiers to be populated + const classifier = page2.locator("#classifier"); + await expect(classifier).toBeVisible(); + const optionCount = await classifier.locator("option").count(); + expect(optionCount).toBeGreaterThan(1); + + await page2.close(); + await context.close(); + }); + }); });