diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 824423731..cfe28d660 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -39,9 +39,9 @@ jobs: - name: Install Prisma Client run: npm install @prisma/client - name: Generate Prisma Client - run: npx prisma generate --schema packages/prisma/schema.prisma + run: npm run prisma:generate -w @documenso/prisma - name: Create the database - run: npx prisma migrate dev --schema packages/prisma/schema.prisma + run: npm run prisma:migrate-dev -w @documenso/prisma - name: Run Playwright tests run: npm run ci - uses: actions/upload-artifact@v3 diff --git a/packages/lib/server-only/user/delete-user-and-data.ts b/packages/lib/server-only/user/delete-user-and-data.ts deleted file mode 100644 index 3cfac13f6..000000000 --- a/packages/lib/server-only/user/delete-user-and-data.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { prisma } from '@documenso/prisma'; - -export const deleteUserAndItsData = async (name: string) => { - const user = await prisma.user.findFirst({ - where: { - name: { - contains: name, - }, - }, - }); - - if (!user) { - throw new Error(`User with name ${name} not found`); - } - - const document = await prisma.document.findMany({ - where: { - userId: user.id, - }, - select: { - documentData: { - select: { - data: true, - }, - }, - }, - }); - - return prisma.$transaction([ - prisma.user.delete({ - where: { - id: user.id, - }, - }), - prisma.documentData.deleteMany({ - where: { - data: document[0]?.documentData.data, - }, - }), - ]); -}; diff --git a/packages/lib/server-only/user/delete-user.ts b/packages/lib/server-only/user/delete-user.ts new file mode 100644 index 000000000..901a8a3d7 --- /dev/null +++ b/packages/lib/server-only/user/delete-user.ts @@ -0,0 +1,21 @@ +import { prisma } from '@documenso/prisma'; + +export const deleteUser = async (name: string) => { + const user = await prisma.user.findFirst({ + where: { + name: { + contains: name, + }, + }, + }); + + if (!user) { + throw new Error(`User with name ${name} not found`); + } + + return await prisma.user.delete({ + where: { + id: user.id, + }, + }); +}; diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index c4f034ba2..fa604955f 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -1,5 +1,6 @@ generator client { provider = "prisma-client-js" + output = "../../node_modules/.prisma/client" } datasource db { @@ -110,10 +111,10 @@ model Document { Field Field[] ShareLink DocumentShareLink[] documentDataId String - documentData DocumentData @relation(fields: [documentDataId], references: [id], onDelete: Cascade) + documentData DocumentData @relation(fields: [documentDataId], references: [id], onDelete: Cascade) documentMeta DocumentMeta? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt @@unique([documentDataId]) } @@ -133,11 +134,11 @@ model DocumentData { } model DocumentMeta { - id String @id @default(cuid()) - subject String? - message String? - documentId Int @unique - document Document @relation(fields: [documentId], references: [id], onDelete: Cascade) + id String @id @default(cuid()) + subject String? + message String? + documentId Int @unique + document Document @relation(fields: [documentId], references: [id], onDelete: Cascade) } enum ReadStatus { diff --git a/packages/web-tests/e2e/test-auth-flow.spec.ts b/packages/web-tests/e2e/test-auth-flow.spec.ts index c53a9577f..3d1d4cd39 100644 --- a/packages/web-tests/e2e/test-auth-flow.spec.ts +++ b/packages/web-tests/e2e/test-auth-flow.spec.ts @@ -1,6 +1,6 @@ import { type Page, expect, test } from '@playwright/test'; -import { deleteUserAndItsData } from '@documenso/lib/server-only/user/delete-user-and-data'; +import { deleteUser } from '@documenso/lib/server-only/user/delete-user'; test.use({ storageState: { cookies: [], origins: [] } }); @@ -10,9 +10,9 @@ test.use({ storageState: { cookies: [], origins: [] } }); */ test.describe.configure({ mode: 'serial' }); -const username = E2E_TEST_AUTHENTICATE_USERNAME; -const email = E2E_TEST_AUTHENTICATE_USER_EMAIL; -const password = E2E_TEST_AUTHENTICATE_USER_PASSWORD; +const username = 'testuser'; +const email = 'test-user@documenso.com'; +const password = 'password'; test('user can sign up with email and password', async ({ page }: { page: Page }) => { await page.goto('/signup'); @@ -48,7 +48,7 @@ test('user can login with user and password', async ({ page }: { page: Page }) = test.afterAll('Teardown', async () => { try { - await deleteUserAndItsData(username); + await deleteUser(username); } catch (e) { throw new Error(`Error deleting user: ${e}`); }