mirror of
https://github.com/dani-garcia/vaultwarden.wiki.git
synced 2026-08-06 05:03:44 +03:00
* Config server setting suppressOnboardingInterstitials * Backport fix playwright tests --------- Co-authored-by: Timshel <timshel@users.noreply.github.com>
97 lines
3.2 KiB
TypeScript
97 lines
3.2 KiB
TypeScript
import { test, expect, type TestInfo } from '@playwright/test';
|
|
import { MailDev } from 'maildev';
|
|
|
|
import * as admin from "./setups/admin";
|
|
import { logNewUser, logUser } from './setups/sso';
|
|
import { activateEmail, disableEmail } from './setups/2fa';
|
|
import * as utils from "../global-utils";
|
|
|
|
let users = utils.loadEnv();
|
|
|
|
let mailserver;
|
|
|
|
test.beforeAll('Setup', async ({ browser }, testInfo: TestInfo) => {
|
|
mailserver = new MailDev({
|
|
port: process.env.MAILDEV_SMTP_PORT,
|
|
web: { port: process.env.MAILDEV_HTTP_PORT },
|
|
})
|
|
|
|
await mailserver.listen();
|
|
|
|
await utils.startVault(browser, testInfo, {
|
|
SSO_ENABLED: true,
|
|
SSO_ONLY: true,
|
|
SMTP_HOST: process.env.MAILDEV_HOST,
|
|
SMTP_FROM: process.env.PW_SMTP_FROM,
|
|
});
|
|
});
|
|
|
|
test.afterAll('Teardown', async ({}) => {
|
|
utils.stopVault();
|
|
if( mailserver ){
|
|
await mailserver.close();
|
|
}
|
|
});
|
|
|
|
test('2FA email', async ({ page }) => {
|
|
|
|
const mailBuffer = mailserver.buffer(users.user1.email);
|
|
|
|
await logNewUser(test, page, users.user1, {mailBuffer: mailBuffer});
|
|
|
|
await activateEmail(test, page, users.user1, mailBuffer);
|
|
|
|
await logUser(test, page, users.user1, {mailBuffer: mailBuffer, mail2fa: true, notNewDevice: true});
|
|
|
|
await disableEmail(test, page, users.user1);
|
|
|
|
mailBuffer.close();
|
|
});
|
|
|
|
|
|
test('Admin invite', async ({ page }) => {
|
|
const mailBuffer = mailserver.buffer(users.user2.email);
|
|
|
|
await admin.login(test, page);
|
|
await admin.invite(test, page, users.user2.email);
|
|
|
|
|
|
const link = await test.step('Extract email link', async () => {
|
|
const invited = await mailBuffer.expect((m) => m.subject === "Join Vaultwarden");
|
|
await page.setContent(invited.html);
|
|
return await page.getByTestId("invite").getAttribute("href");
|
|
});
|
|
|
|
await test.step('Redirect to Keycloak', async () => {
|
|
await page.goto(link);
|
|
});
|
|
|
|
await test.step('Keycloak login', async () => {
|
|
await expect(page.getByRole('heading', { name: 'Sign in to your account' })).toBeVisible();
|
|
await page.getByLabel(/Username/).fill(users.user2.name);
|
|
await page.getByLabel('Password', { exact: true }).fill(users.user2.password);
|
|
await page.getByRole('button', { name: 'Sign In' }).click();
|
|
});
|
|
|
|
await test.step('Create Vault account', async () => {
|
|
await expect(page.getByRole('heading', { name: 'Join organisation' })).toBeVisible();
|
|
await page.getByRole('textbox', { name: 'Master password * (required)', exact: true }).fill(users.user2.password);
|
|
await page.getByRole('textbox', { name: 'Confirm master password * (' }).fill(users.user2.password);
|
|
await page.getByRole('button', { name: 'Create account' }).click();
|
|
});
|
|
|
|
await test.step('Default vault page', async () => {
|
|
await expect(page).toHaveTitle('Vaults | Vaultwarden Web');
|
|
|
|
await utils.checkNotification(page, 'Account successfully created!');
|
|
await utils.checkNotification(page, 'Invitation accepted');
|
|
});
|
|
|
|
await test.step('Check mails', async () => {
|
|
await mailBuffer.expect((m) => m.subject.includes("New Device Logged"));
|
|
await mailBuffer.expect((m) => m.subject === "Welcome");
|
|
});
|
|
|
|
mailBuffer.close();
|
|
});
|