Skip to content

Commit 88e2ff6

Browse files
fix(api): delete user's exam attempts with account (freeCodeCamp#57079)
1 parent 85fc9c3 commit 88e2ff6

File tree

4 files changed

+40
-4
lines changed

4 files changed

+40
-4
lines changed

api/__mocks__/env-exam.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,9 +343,7 @@ export const exam: EnvExam = {
343343
};
344344

345345
export async function seedEnvExam() {
346-
await fastifyTestInstance.prisma.envExamAttempt.deleteMany({});
347-
await fastifyTestInstance.prisma.envGeneratedExam.deleteMany({});
348-
await fastifyTestInstance.prisma.envExam.deleteMany({});
346+
await clearEnvExam();
349347

350348
await fastifyTestInstance.prisma.envExam.create({
351349
data: exam
@@ -369,3 +367,15 @@ export async function seedEnvExam() {
369367
// }
370368
// }
371369
}
370+
371+
export async function clearEnvExam() {
372+
await fastifyTestInstance.prisma.envExamAttempt.deleteMany({});
373+
await fastifyTestInstance.prisma.envGeneratedExam.deleteMany({});
374+
await fastifyTestInstance.prisma.envExam.deleteMany({});
375+
}
376+
377+
export async function seedEnvExamAttempt() {
378+
await fastifyTestInstance.prisma.envExamAttempt.create({
379+
data: examAttempt
380+
});
381+
}

api/prisma/schema.prisma

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ model EnvExamAttempt {
277277
needsRetake Boolean
278278
279279
// Relations
280-
user user @relation(fields: [userId], references: [id])
280+
user user @relation(fields: [userId], references: [id], onDelete: Cascade)
281281
exam EnvExam @relation(fields: [examId], references: [id])
282282
generatedExam EnvGeneratedExam @relation(fields: [generatedExamId], references: [id])
283283
}

api/src/exam-environment/routes/exam-environment.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ describe('/exam-environment/', () => {
4242
res.body.examEnvironmentAuthorizationToken;
4343
});
4444

45+
afterAll(async () => {
46+
await mock.clearEnvExam();
47+
});
48+
4549
describe('POST /exam-environment/exam/attempt', () => {
4650
afterEach(async () => {
4751
await fastifyTestInstance.prisma.envExamAttempt.deleteMany();

api/src/routes/protected/user.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ import {
1616
createSuperRequest
1717
} from '../../../jest.utils';
1818
import { JWT_SECRET } from '../../utils/env';
19+
import {
20+
clearEnvExam,
21+
seedEnvExam,
22+
seedEnvExamAttempt
23+
} from '../../../__mocks__/env-exam';
1924
import { getMsTranscriptApiUrl } from './user';
2025

2126
const mockedFetch = jest.fn();
@@ -336,13 +341,18 @@ describe('userRoutes', () => {
336341
});
337342

338343
describe('/account/delete', () => {
344+
beforeEach(async () => {
345+
await seedEnvExam();
346+
await seedEnvExamAttempt();
347+
});
339348
afterEach(async () => {
340349
await fastifyTestInstance.prisma.userToken.deleteMany({
341350
where: { OR: [{ userId: defaultUserId }, { userId: otherUserId }] }
342351
});
343352
await fastifyTestInstance.prisma.msUsername.deleteMany({
344353
where: { OR: [{ userId: defaultUserId }, { userId: otherUserId }] }
345354
});
355+
await clearEnvExam();
346356
});
347357

348358
test('POST returns 200 status code with empty object', async () => {
@@ -398,6 +408,18 @@ describe('userRoutes', () => {
398408
);
399409
expect(setCookie).toHaveLength(3);
400410
});
411+
412+
test("POST deletes all the user's exam attempts", async () => {
413+
const examAttempts =
414+
await fastifyTestInstance.prisma.envExamAttempt.findMany();
415+
expect(examAttempts).toHaveLength(1);
416+
417+
await superPost('/account/delete');
418+
419+
const examAttemptsAfter =
420+
await fastifyTestInstance.prisma.envExamAttempt.findMany();
421+
expect(examAttemptsAfter).toHaveLength(0);
422+
});
401423
});
402424

403425
describe('/account/reset-progress', () => {

0 commit comments

Comments
 (0)