From e47ca1d6b6168fb546eacd60d99bf0697c7a8d64 Mon Sep 17 00:00:00 2001 From: Ephraim Atta-Duncan Date: Fri, 8 Mar 2024 00:04:27 +0000 Subject: [PATCH] chore: add e2e test for deleting a user --- .../profile/delete-account-dialog.tsx | 5 ++++- .../app-tests/e2e/test-delete-user.spec.ts | 21 +++++++++++++++++++ packages/prisma/package.json | 3 ++- packages/prisma/seed/users.ts | 21 +++++++++++++++++++ 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 packages/app-tests/e2e/test-delete-user.spec.ts diff --git a/apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx b/apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx index 933b37f31..4db0ba01a 100644 --- a/apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx +++ b/apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx @@ -78,7 +78,9 @@ export const DeleteAccountDialog = ({ className, user }: DeleteAccountDialogProp
- + @@ -110,6 +112,7 @@ export const DeleteAccountDialog = ({ className, user }: DeleteAccountDialogProp onClick={onDeleteAccount} loading={isDeletingAccount} variant="destructive" + data-testid="delete-account-confirmation-button" disabled={hasTwoFactorAuthentication} > {isDeletingAccount ? 'Deleting account...' : 'Delete Account'} diff --git a/packages/app-tests/e2e/test-delete-user.spec.ts b/packages/app-tests/e2e/test-delete-user.spec.ts new file mode 100644 index 000000000..acda3f0fc --- /dev/null +++ b/packages/app-tests/e2e/test-delete-user.spec.ts @@ -0,0 +1,21 @@ +import { test } from '@playwright/test'; + +import { WEBAPP_BASE_URL } from '@documenso/lib/constants/app'; +import { seedUser } from '@documenso/prisma/seed/users'; + +import { manualLogin } from './fixtures/authentication'; + +test('delete user', async ({ page }) => { + const user = await seedUser(); + + await manualLogin({ + page, + email: user.email, + redirectPath: '/settings', + }); + + await page.getByTestId('delete-account-button').click(); + await page.getByTestId('delete-account-confirmation-button').click(); + + await page.waitForURL(`${WEBAPP_BASE_URL}/signin`); +}); diff --git a/packages/prisma/package.json b/packages/prisma/package.json index 0cd3ed282..62248ffc0 100644 --- a/packages/prisma/package.json +++ b/packages/prisma/package.json @@ -12,7 +12,8 @@ "prisma:generate": "prisma generate", "prisma:migrate-dev": "prisma migrate dev", "prisma:migrate-deploy": "prisma migrate deploy", - "prisma:seed": "prisma db seed" + "prisma:seed": "prisma db seed", + "prisma:studio": "prisma studio" }, "prisma": { "seed": "ts-node --transpileOnly --project ./tsconfig.seed.json ./seed-database.ts" diff --git a/packages/prisma/seed/users.ts b/packages/prisma/seed/users.ts index 353683a1d..647b93736 100644 --- a/packages/prisma/seed/users.ts +++ b/packages/prisma/seed/users.ts @@ -26,6 +26,27 @@ export const seedUser = async ({ }); }; +export const seed2faUser = async ({ + name = `2fa-user-${Date.now()}`, + email = `2fa-user-${Date.now()}@test.documenso.com`, + password = 'password', + verified = true, +}: SeedUserOptions = {}) => { + return await prisma.user.create({ + data: { + name, + email, + password: hashSync(password), + emailVerified: verified ? new Date() : undefined, + url: name, + twoFactorEnabled: true, + twoFactorSecret: + 'b2840b216b1f089cb086bdd4260196c645d90b0bd3ff8f66d20d19b99a0da1631bf299e416476917194f1064f58b', + twoFactorBackupCodes: 'a-bunch-of-backup-codes', + }, + }); +}; + export const unseedUser = async (userId: number) => { await prisma.user.delete({ where: {