login.smtp.spec.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import { test, expect, type TestInfo } from '@playwright/test';
  2. import { MailDev } from 'maildev';
  3. const utils = require('../global-utils');
  4. import { createAccount, logUser } from './setups/user';
  5. import { activateEmail, retrieveEmailCode, disableEmail } from './setups/2fa';
  6. let users = utils.loadEnv();
  7. let mailserver;
  8. test.beforeAll('Setup', async ({ browser }, testInfo: TestInfo) => {
  9. mailserver = new MailDev({
  10. port: process.env.MAILDEV_SMTP_PORT,
  11. web: { port: process.env.MAILDEV_HTTP_PORT },
  12. })
  13. await mailserver.listen();
  14. await utils.startVault(browser, testInfo, {
  15. SMTP_HOST: process.env.MAILDEV_HOST,
  16. SMTP_FROM: process.env.PW_SMTP_FROM,
  17. });
  18. });
  19. test.afterAll('Teardown', async ({}) => {
  20. utils.stopVault();
  21. if( mailserver ){
  22. await mailserver.close();
  23. }
  24. });
  25. test('Account creation', async ({ page }) => {
  26. const mailBuffer = mailserver.buffer(users.user1.email);
  27. await createAccount(test, page, users.user1, mailBuffer);
  28. mailBuffer.close();
  29. });
  30. test('Login', async ({ context, page }) => {
  31. const mailBuffer = mailserver.buffer(users.user1.email);
  32. await logUser(test, page, users.user1, mailBuffer);
  33. await test.step('verify email', async () => {
  34. await page.getByText('Verify your account\'s email').click();
  35. await expect(page.getByText('Verify your account\'s email')).toBeVisible();
  36. await page.getByRole('button', { name: 'Send email' }).click();
  37. await utils.checkNotification(page, 'Check your email inbox for a verification link');
  38. const verify = await mailBuffer.expect((m) => m.subject === "Verify Your Email");
  39. expect(verify.from[0]?.address).toBe(process.env.PW_SMTP_FROM);
  40. const page2 = await context.newPage();
  41. await page2.setContent(verify.html);
  42. const link = await page2.getByTestId("verify").getAttribute("href");
  43. await page2.close();
  44. await page.goto(link);
  45. await utils.checkNotification(page, 'Account email verified');
  46. });
  47. mailBuffer.close();
  48. });
  49. test('Activate 2fa', async ({ page }) => {
  50. const emails = mailserver.buffer(users.user1.email);
  51. await logUser(test, page, users.user1);
  52. await activateEmail(test, page, users.user1, emails);
  53. emails.close();
  54. });
  55. test('2fa', async ({ page }) => {
  56. const emails = mailserver.buffer(users.user1.email);
  57. await test.step('login', async () => {
  58. await page.goto('/');
  59. await page.getByLabel(/Email address/).fill(users.user1.email);
  60. await page.getByRole('button', { name: 'Continue' }).click();
  61. await page.getByLabel('Master password').fill(users.user1.password);
  62. await page.getByRole('button', { name: 'Log in with master password' }).click();
  63. await expect(page.getByRole('heading', { name: 'Verify your Identity' })).toBeVisible();
  64. const code = await retrieveEmailCode(test, page, emails);
  65. await page.getByLabel(/Verification code/).fill(code);
  66. await page.getByRole('button', { name: 'Continue' }).click();
  67. await expect(page).toHaveTitle(/Vaults/);
  68. })
  69. await disableEmail(test, page, users.user1);
  70. emails.close();
  71. });