test(backend): Testen voor DatabaseLearningObjectProvider.getLearningObjectById toegevoegd.
This commit is contained in:
parent
fb2d293b57
commit
a3b995393b
7 changed files with 102 additions and 11 deletions
|
@ -7,13 +7,13 @@ import {
|
|||
Transition
|
||||
} from "../../interfaces/learning-content";
|
||||
import {
|
||||
LearningPath as LearningPathEntity,
|
||||
LearningPathNode,
|
||||
LearningPathTransition
|
||||
LearningPath as LearningPathEntity
|
||||
} from "../../entities/content/learning-path.entity"
|
||||
import {getLearningPathRepository} from "../../data/repositories";
|
||||
import {Language} from "../../entities/content/language";
|
||||
import learningObjectService from "../learning-objects/learning-object-service";
|
||||
import { LearningPathNode } from "../../entities/content/learning-path-node.entity";
|
||||
import {LearningPathTransition} from "../../entities/content/learning-path-transition.entity";
|
||||
|
||||
/**
|
||||
* Fetches the corresponding learning object for each of the nodes and creates a map that maps each node to its
|
||||
|
@ -55,13 +55,15 @@ async function convertLearningPath(learningPath: LearningPathEntity, order: numb
|
|||
const keywords =
|
||||
nodesToLearningObjects.values().flatMap(it => it.keywords || []).toArray();
|
||||
|
||||
const image = learningPath.image ? learningPath.image.toString("base64") : undefined;
|
||||
|
||||
return {
|
||||
_id: `${learningPath.hruid}/${learningPath.language}`, // for backwards compatibility with the original Dwengo API.
|
||||
__order: order,
|
||||
hruid: learningPath.hruid,
|
||||
language: learningPath.language,
|
||||
description: learningPath.description,
|
||||
image: learningPath.image,
|
||||
image: image,
|
||||
title: learningPath.title,
|
||||
nodes: convertNodes(nodesToLearningObjects),
|
||||
num_nodes: learningPath.nodes.length,
|
||||
|
|
|
@ -4,7 +4,7 @@ import {setupTestApp} from "../../setup-tests";
|
|||
import {getLearningObjectRepository} from "../../../src/data/repositories";
|
||||
import example from "../../test-assets/learning-objects/pn_werkingnotebooks/pn-werkingnotebooks-example.js"
|
||||
import {LearningObject} from "../../../src/entities/content/learning-object.entity";
|
||||
import {expectToBeCorrectEntity} from "../../test-utils/expect-to-be-correct-entity";
|
||||
import {expectToBeCorrectEntity} from "../../test-utils/expectations";
|
||||
|
||||
describe("LearningObjectRepository", () => {
|
||||
let learningObjectRepository: LearningObjectRepository;
|
||||
|
@ -28,7 +28,6 @@ describe("LearningObjectRepository", () => {
|
|||
version: exampleLearningObject.version
|
||||
});
|
||||
expect(result).toBeInstanceOf(LearningObject);
|
||||
console.log(result);
|
||||
expectToBeCorrectEntity({
|
||||
name: "actual",
|
||||
entity: result!
|
||||
|
|
|
@ -4,7 +4,7 @@ import {getLearningPathRepository} from "../../../src/data/repositories";
|
|||
import {LearningPathRepository} from "../../../src/data/content/learning-path-repository";
|
||||
import example from "../../test-assets/learning-paths/pn-werking-example";
|
||||
import {LearningPath} from "../../../src/entities/content/learning-path.entity";
|
||||
import {expectToBeCorrectEntity} from "../../test-utils/expect-to-be-correct-entity";
|
||||
import {expectToBeCorrectEntity} from "../../test-utils/expectations";
|
||||
import {Language} from "../../../src/entities/content/language";
|
||||
|
||||
function expectToHaveFoundPrecisely(expected: LearningPath, result: LearningPath[]): void {
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
import {beforeAll, describe, expect, it} from "vitest";
|
||||
import {setupTestApp} from "../../setup-tests";
|
||||
import {getLearningObjectRepository} from "../../../src/data/repositories";
|
||||
import example from "../../test-assets/learning-objects/pn_werkingnotebooks/pn-werkingnotebooks-example";
|
||||
import {LearningObject} from "../../../src/entities/content/learning-object.entity";
|
||||
import databaseLearningObjectProvider from "../../../src/services/learning-objects/database-learning-object-provider";
|
||||
import {
|
||||
createExampleLearningObjectWithAttachments
|
||||
} from "../../test-assets/learning-objects/create-example-learning-object-with-attachments";
|
||||
import {expectToBeCorrectFilteredLearningObject} from "../../test-utils/expectations";
|
||||
import {FilteredLearningObject} from "../../../src/interfaces/learning-content";
|
||||
import {Language} from "../../../src/entities/content/language";
|
||||
|
||||
async function initExampleData(): Promise<LearningObject> {
|
||||
let learningObjectRepo = getLearningObjectRepository();
|
||||
let exampleLearningObject = createExampleLearningObjectWithAttachments(example);
|
||||
await learningObjectRepo.insert(exampleLearningObject);
|
||||
return exampleLearningObject;
|
||||
}
|
||||
|
||||
describe("DatabaseLearningObjectProvider", () => {
|
||||
let exampleLearningObject: LearningObject;
|
||||
|
||||
beforeAll(async () => {
|
||||
await setupTestApp();
|
||||
exampleLearningObject = await initExampleData();
|
||||
});
|
||||
|
||||
it("should return the learning object when it is queried by its id", async () => {
|
||||
const result: FilteredLearningObject | null = await databaseLearningObjectProvider.getLearningObjectById(exampleLearningObject);
|
||||
expect(result).toBeTruthy();
|
||||
expectToBeCorrectFilteredLearningObject(result!, exampleLearningObject);
|
||||
});
|
||||
|
||||
it("should return the learning object when it is queried by only hruid and language (but not version)", async () => {
|
||||
const result: FilteredLearningObject | null = await databaseLearningObjectProvider.getLearningObjectById({
|
||||
hruid: exampleLearningObject.hruid,
|
||||
language: exampleLearningObject.language
|
||||
});
|
||||
expect(result).toBeTruthy();
|
||||
expectToBeCorrectFilteredLearningObject(result!, exampleLearningObject);
|
||||
});
|
||||
|
||||
it("should return null when queried with an id that does not exist", async () => {
|
||||
const result: FilteredLearningObject | null = await databaseLearningObjectProvider.getLearningObjectById({
|
||||
hruid: "non_existing_hruid",
|
||||
language: Language.Dutch
|
||||
});
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
});
|
|
@ -0,0 +1,10 @@
|
|||
import {LearningObjectExample} from "./learning-object-example";
|
||||
import {LearningObject} from "../../../src/entities/content/learning-object.entity";
|
||||
|
||||
export function createExampleLearningObjectWithAttachments(example: LearningObjectExample): LearningObject {
|
||||
let learningObject = example.createLearningObject();
|
||||
for (let creationFn of Object.values(example.createAttachment)) {
|
||||
learningObject.attachments.push(creationFn(learningObject));
|
||||
}
|
||||
return learningObject;
|
||||
}
|
|
@ -41,10 +41,7 @@ const example: LearningObjectExample = {
|
|||
|
||||
let returnValue = new ReturnValue();
|
||||
returnValue.callbackUrl = "callback_url_example";
|
||||
returnValue.callbackSchema = `{
|
||||
att: "test",
|
||||
att2: "test2"
|
||||
}`;
|
||||
returnValue.callbackSchema = '{"att": "test", "att2": "test2"}';
|
||||
|
||||
learningObject.returnValue = returnValue;
|
||||
learningObject.available = true;
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
import {AssertionError} from "node:assert";
|
||||
import {LearningObject} from "../../src/entities/content/learning-object.entity";
|
||||
import {FilteredLearningObject} from "../../src/interfaces/learning-content";
|
||||
import { expect } from "vitest";
|
||||
|
||||
// Ignored properties because they belang for example to the class, not to the entity itself.
|
||||
const IGNORE_PROPERTIES = ["parent"];
|
||||
|
@ -60,3 +63,31 @@ export function expectToBeCorrectEntity<T extends object>(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that filtered is the correct representation of original as FilteredLearningObject.
|
||||
* @param filtered the representation as FilteredLearningObject
|
||||
* @param original the original entity added to the database
|
||||
*/
|
||||
export function expectToBeCorrectFilteredLearningObject(filtered: FilteredLearningObject, original: LearningObject) {
|
||||
expect(filtered.uuid).toEqual(original.uuid);
|
||||
expect(filtered.version).toEqual(original.version);
|
||||
expect(filtered.language).toEqual(original.language);
|
||||
expect(filtered.keywords).toEqual(original.keywords);
|
||||
expect(filtered.key).toEqual(original.hruid);
|
||||
expect(filtered.targetAges).toEqual(original.targetAges);
|
||||
expect(filtered.title).toEqual(original.title);
|
||||
expect(!!filtered.teacherExclusive).toEqual(original.teacherExclusive) // !!: Workaround: MikroORM with SQLite returns 0 and 1 instead of booleans.
|
||||
expect(filtered.skosConcepts).toEqual(original.skosConcepts);
|
||||
expect(filtered.estimatedTime).toEqual(original.estimatedTime);
|
||||
expect(filtered.educationalGoals).toEqual(original.educationalGoals);
|
||||
expect(filtered.difficulty).toEqual(original.difficulty || 1);
|
||||
expect(filtered.description).toEqual(original.description);
|
||||
expect(filtered.returnValue?.callback_url).toEqual(original.returnValue.callbackUrl);
|
||||
expect(filtered.returnValue?.callback_schema).toEqual(JSON.parse(original.returnValue.callbackSchema));
|
||||
expect(filtered.contentType).toEqual(original.contentType);
|
||||
expect(filtered.contentLocation).toEqual(original.contentLocation || null);
|
||||
expect(filtered.htmlUrl).toContain(`/${original.hruid}/html`);
|
||||
expect(filtered.htmlUrl).toContain(`language=${original.language}`);
|
||||
expect(filtered.htmlUrl).toContain(`version=${original.version}`);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue