From fb2d293b57cfae14e5a47ccbeca4f0178fa70174 Mon Sep 17 00:00:00 2001 From: Gerald Schmittinger Date: Sun, 9 Mar 2025 09:24:06 +0100 Subject: [PATCH] test(backend): Test voor AttachmentRepository toegevoegd. Ook bug in getter voor AttachmentRepository opgelost. --- backend/src/data/repositories.ts | 2 +- .../content/attachment-repository.test.ts | 87 +++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 backend/tests/data/content/attachment-repository.test.ts diff --git a/backend/src/data/repositories.ts b/backend/src/data/repositories.ts index 843eb1ac..800d5485 100644 --- a/backend/src/data/repositories.ts +++ b/backend/src/data/repositories.ts @@ -116,4 +116,4 @@ export const getLearningPathRepository = repositoryGetter< export const getAttachmentRepository = repositoryGetter< Attachment, AttachmentRepository ->(Assignment); +>(Attachment); diff --git a/backend/tests/data/content/attachment-repository.test.ts b/backend/tests/data/content/attachment-repository.test.ts new file mode 100644 index 00000000..02727460 --- /dev/null +++ b/backend/tests/data/content/attachment-repository.test.ts @@ -0,0 +1,87 @@ +import {beforeAll, describe, expect, it} from "vitest"; +import {setupTestApp} from "../../setup-tests"; +import {getAttachmentRepository, getLearningObjectRepository} from "../../../src/data/repositories"; +import {AttachmentRepository} from "../../../src/data/content/attachment-repository"; +import {LearningObjectRepository} from "../../../src/data/content/learning-object-repository"; +import example from "../../test-assets/learning-objects/pn_werkingnotebooks/pn-werkingnotebooks-example"; +import {LearningObject} from "../../../src/entities/content/learning-object.entity"; +import {Attachment} from "../../../src/entities/content/attachment.entity"; +import {LearningObjectIdentifier} from "../../../src/entities/content/learning-object-identifier"; + +const NEWER_TEST_SUFFIX = "nEweR"; + +function createTestLearningObjects(learningObjectRepo: LearningObjectRepository): {older: LearningObject, newer: LearningObject} { + let olderExample = example.createLearningObject(); + learningObjectRepo.save(olderExample); + + let newerExample = example.createLearningObject(); + newerExample.title = "Newer example"; + newerExample.version = 100; + + return { + older: olderExample, + newer: newerExample, + }; +} + +describe("AttachmentRepository", () => { + let attachmentRepo: AttachmentRepository; + let exampleLearningObjects: {older: LearningObject, newer: LearningObject}; + let attachmentsOlderLearningObject: Attachment[]; + + beforeAll(async () => { + await setupTestApp(); + attachmentRepo = getAttachmentRepository(); + exampleLearningObjects = createTestLearningObjects(getLearningObjectRepository()); + }); + + it("can add attachments to learning objects without throwing an error", () => { + attachmentsOlderLearningObject = Object + .values(example.createAttachment) + .map(fn => fn(exampleLearningObjects.older)); + + for (let attachment of attachmentsOlderLearningObject) { + attachmentRepo.save(attachment); + } + }); + + let attachmentOnlyNewer: Attachment; + it("allows us to add attachments with the same name to a different learning object without throwing an error", () => { + attachmentOnlyNewer = Object.values(example.createAttachment)[0](exampleLearningObjects.newer); + attachmentOnlyNewer.content.write(NEWER_TEST_SUFFIX); + + attachmentRepo.save(attachmentOnlyNewer); + }); + + let olderLearningObjectId: LearningObjectIdentifier; + it("returns the correct attachment when queried by learningObjectId and attachment name", async () => { + olderLearningObjectId = { + hruid: exampleLearningObjects.older.hruid, + language: exampleLearningObjects.older.language, + version: exampleLearningObjects.older.version + }; + + const result = await attachmentRepo.findByLearningObjectIdAndName( + olderLearningObjectId, + attachmentsOlderLearningObject[0].name + ); + expect(result).toBe(attachmentsOlderLearningObject[0]); + }); + + it("returns null when queried by learningObjectId and non-existing attachment name", async () => { + const result = await attachmentRepo.findByLearningObjectIdAndName( + olderLearningObjectId, + "non-existing name" + ); + expect(result).toBe(null); + }); + + it("returns the newer version of the attachment when only queried by hruid, language and attachment name (but not version)", async () => { + const result = await attachmentRepo.findByMostRecentVersionOfLearningObjectAndName( + exampleLearningObjects.older.hruid, + exampleLearningObjects.older.language, + attachmentOnlyNewer.name + ); + expect(result).toBe(attachmentOnlyNewer); + }); +});