Harden NordVPN reconciliation and WebGUI testing
This commit is contained in:
parent
a115d2a012
commit
b4a30ca190
1 changed files with 777 additions and 97 deletions
|
|
@ -3,6 +3,18 @@ const { test, expect } = require("@playwright/test");
|
|||
const username = process.env.OPNSENSE_UI_USERNAME;
|
||||
const password = process.env.OPNSENSE_UI_PASSWORD;
|
||||
|
||||
async function closeDialog(dialog) {
|
||||
const hidden = dialog.evaluate(
|
||||
(element) =>
|
||||
new Promise((resolve) => {
|
||||
window.jQuery(element).one("hidden.bs.modal", resolve);
|
||||
}),
|
||||
);
|
||||
await dialog.getByRole("button", { name: "Close" }).click();
|
||||
await hidden;
|
||||
await expect(dialog).toBeHidden();
|
||||
}
|
||||
|
||||
if (!username || !password) {
|
||||
throw new Error(
|
||||
"Set OPNSENSE_UI_USERNAME and OPNSENSE_UI_PASSWORD for the disposable OPNsense deployment.",
|
||||
|
|
@ -57,21 +69,12 @@ test("renders and preserves NordVPN enrollment controls", async ({ page }) => {
|
|||
await page.locator("#usernamefld").fill(username);
|
||||
await page.locator("#passwordfld").fill(password);
|
||||
await page.getByRole("button", { name: "Login" }).click();
|
||||
await expect(page.locator("#usernamefld")).toBeHidden();
|
||||
await page.goto("/ui/nordvpn");
|
||||
await expect(
|
||||
page.getByRole("heading", { name: "NordVPN egress enrollment" }),
|
||||
).toBeVisible();
|
||||
|
||||
const accessToken = page.locator("#accessToken");
|
||||
const bootstrap = page.getByRole("button", { name: "Bootstrap NordLynx" });
|
||||
await accessToken.fill("synthetic-token");
|
||||
await bootstrap.click();
|
||||
await bootstrapStarted;
|
||||
await expect(accessToken).toHaveValue("");
|
||||
await expect(bootstrap).toBeDisabled();
|
||||
finishBootstrap();
|
||||
await expect(bootstrap).toBeEnabled();
|
||||
|
||||
const countries = page.locator('[id="settings.general.countries"]');
|
||||
await expect(countries.locator('option[value="XA"]')).toHaveText(
|
||||
"Synthetic A",
|
||||
|
|
@ -150,8 +153,7 @@ test("renders and preserves NordVPN enrollment controls", async ({ page }) => {
|
|||
await expect(
|
||||
dialog.locator('select[for="enrollment.destination"]'),
|
||||
).toHaveValues(["any"]);
|
||||
await dialog.getByRole("button", { name: "Close" }).click();
|
||||
await expect(dialog).toBeHidden();
|
||||
await closeDialog(dialog);
|
||||
|
||||
await row.getByRole("button", { name: "Clone" }).click();
|
||||
await expect(dialog).toBeVisible();
|
||||
|
|
@ -161,8 +163,7 @@ test("renders and preserves NordVPN enrollment controls", async ({ page }) => {
|
|||
await expect(
|
||||
dialog.locator('select[for="enrollment.destination"]'),
|
||||
).toHaveValues(["any"]);
|
||||
await dialog.getByRole("button", { name: "Close" }).click();
|
||||
await expect(dialog).toBeHidden();
|
||||
await closeDialog(dialog);
|
||||
|
||||
const beforeDelete = await testRows.count();
|
||||
await row.getByRole("button", { name: "Delete" }).click();
|
||||
|
|
@ -171,5 +172,16 @@ test("renders and preserves NordVPN enrollment controls", async ({ page }) => {
|
|||
await removal.getByRole("button", { name: "Yes" }).click();
|
||||
await expect(testRows).toHaveCount(beforeDelete - 1);
|
||||
|
||||
const accessToken = page.locator("#accessToken");
|
||||
const bootstrap = page.getByRole("button", { name: "Bootstrap NordLynx" });
|
||||
await accessToken.fill("synthetic-token");
|
||||
await bootstrap.click();
|
||||
await bootstrapStarted;
|
||||
await expect(accessToken).toHaveValue("");
|
||||
await expect(bootstrap).toBeDisabled();
|
||||
finishBootstrap();
|
||||
await expect(bootstrap).toBeEnabled();
|
||||
await expect(page.locator("#bootstrapMsg")).toHaveText("Bootstrap started");
|
||||
|
||||
expect(errors).toEqual([]);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue