diff --git a/api/__mocks__/env-exam.ts b/api/__mocks__/env-exam.ts index e27d61445cb..2a863283b1f 100644 --- a/api/__mocks__/env-exam.ts +++ b/api/__mocks__/env-exam.ts @@ -343,9 +343,7 @@ export const exam: EnvExam = { }; export async function seedEnvExam() { - await fastifyTestInstance.prisma.envExamAttempt.deleteMany({}); - await fastifyTestInstance.prisma.envGeneratedExam.deleteMany({}); - await fastifyTestInstance.prisma.envExam.deleteMany({}); + await clearEnvExam(); await fastifyTestInstance.prisma.envExam.create({ data: exam @@ -369,3 +367,15 @@ export async function seedEnvExam() { // } // } } + +export async function clearEnvExam() { + await fastifyTestInstance.prisma.envExamAttempt.deleteMany({}); + await fastifyTestInstance.prisma.envGeneratedExam.deleteMany({}); + await fastifyTestInstance.prisma.envExam.deleteMany({}); +} + +export async function seedEnvExamAttempt() { + await fastifyTestInstance.prisma.envExamAttempt.create({ + data: examAttempt + }); +} diff --git a/api/prisma/schema.prisma b/api/prisma/schema.prisma index 188a3ea11ff..914d557063c 100644 --- a/api/prisma/schema.prisma +++ b/api/prisma/schema.prisma @@ -277,7 +277,7 @@ model EnvExamAttempt { needsRetake Boolean // Relations - user user @relation(fields: [userId], references: [id]) + user user @relation(fields: [userId], references: [id], onDelete: Cascade) exam EnvExam @relation(fields: [examId], references: [id]) generatedExam EnvGeneratedExam @relation(fields: [generatedExamId], references: [id]) } diff --git a/api/src/exam-environment/routes/exam-environment.test.ts b/api/src/exam-environment/routes/exam-environment.test.ts index cca82576ef2..7d88faec3bd 100644 --- a/api/src/exam-environment/routes/exam-environment.test.ts +++ b/api/src/exam-environment/routes/exam-environment.test.ts @@ -42,6 +42,10 @@ describe('/exam-environment/', () => { res.body.examEnvironmentAuthorizationToken; }); + afterAll(async () => { + await mock.clearEnvExam(); + }); + describe('POST /exam-environment/exam/attempt', () => { afterEach(async () => { await fastifyTestInstance.prisma.envExamAttempt.deleteMany(); diff --git a/api/src/routes/protected/user.test.ts b/api/src/routes/protected/user.test.ts index 65f288dad0f..8299ae7a02d 100644 --- a/api/src/routes/protected/user.test.ts +++ b/api/src/routes/protected/user.test.ts @@ -16,6 +16,11 @@ import { createSuperRequest } from '../../../jest.utils'; import { JWT_SECRET } from '../../utils/env'; +import { + clearEnvExam, + seedEnvExam, + seedEnvExamAttempt +} from '../../../__mocks__/env-exam'; import { getMsTranscriptApiUrl } from './user'; const mockedFetch = jest.fn(); @@ -336,6 +341,10 @@ describe('userRoutes', () => { }); describe('/account/delete', () => { + beforeEach(async () => { + await seedEnvExam(); + await seedEnvExamAttempt(); + }); afterEach(async () => { await fastifyTestInstance.prisma.userToken.deleteMany({ where: { OR: [{ userId: defaultUserId }, { userId: otherUserId }] } @@ -343,6 +352,7 @@ describe('userRoutes', () => { await fastifyTestInstance.prisma.msUsername.deleteMany({ where: { OR: [{ userId: defaultUserId }, { userId: otherUserId }] } }); + await clearEnvExam(); }); test('POST returns 200 status code with empty object', async () => { @@ -398,6 +408,18 @@ describe('userRoutes', () => { ); expect(setCookie).toHaveLength(3); }); + + test("POST deletes all the user's exam attempts", async () => { + const examAttempts = + await fastifyTestInstance.prisma.envExamAttempt.findMany(); + expect(examAttempts).toHaveLength(1); + + await superPost('/account/delete'); + + const examAttemptsAfter = + await fastifyTestInstance.prisma.envExamAttempt.findMany(); + expect(examAttemptsAfter).toHaveLength(0); + }); }); describe('/account/reset-progress', () => {