test(backend): Testen DatabaseLearningObjectProvider.getLearningObject[Id]sFromPath toegevoegd
This commit is contained in:
parent
a30c4d0d32
commit
49f15c50d8
4 changed files with 65 additions and 15 deletions
|
@ -10,6 +10,7 @@ import {LearningObject} from "../../entities/content/learning-object.entity";
|
|||
import {getUrlStringForLearningObject} from "../../util/links";
|
||||
import processingService from "./processing/processing-service";
|
||||
import {NotFoundError} from "@mikro-orm/core";
|
||||
import learningObjectService from "./learning-object-service";
|
||||
|
||||
|
||||
function convertLearningObject(learningObject: LearningObject | null): FilteredLearningObject | null {
|
||||
|
@ -90,7 +91,7 @@ const databaseLearningObjectProvider: LearningObjectProvider = {
|
|||
if (!learningPath) {
|
||||
throw new NotFoundError("The learning path with the given ID could not be found.");
|
||||
}
|
||||
return learningPath.nodes.map(it => it.learningObjectHruid); // TODO: Determine this based on the submissions of the user.
|
||||
return learningPath.nodes.map(it => it.learningObjectHruid);
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -105,7 +106,7 @@ const databaseLearningObjectProvider: LearningObjectProvider = {
|
|||
}
|
||||
const learningObjects = await Promise.all(
|
||||
learningPath.nodes.map(it => {
|
||||
const learningObject = this.getLearningObjectById({
|
||||
const learningObject = learningObjectService.getLearningObjectById({
|
||||
hruid: it.learningObjectHruid,
|
||||
language: it.language,
|
||||
version: it.version
|
||||
|
@ -116,7 +117,7 @@ const databaseLearningObjectProvider: LearningObjectProvider = {
|
|||
return learningObject;
|
||||
})
|
||||
);
|
||||
return learningObjects.filter(it => it !== null); // TODO: Determine this based on the submissions of the user.
|
||||
return learningObjects.filter(it => it !== null);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
1
backend/src/services/learning-paths/point-of-view.d.ts
vendored
Normal file
1
backend/src/services/learning-paths/point-of-view.d.ts
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
type PointOfView = {type: "student", student: Student} | {type: "group", group: Group};
|
|
@ -1,29 +1,37 @@
|
|||
import {beforeAll, describe, expect, it} from "vitest";
|
||||
import {setupTestApp} from "../../setup-tests";
|
||||
import {getLearningObjectRepository} from "../../../src/data/repositories";
|
||||
import {getLearningObjectRepository, getLearningPathRepository} 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";
|
||||
import learningObjectExample from "../../test-assets/learning-objects/pn-werkingnotebooks/pn-werkingnotebooks-example";
|
||||
import learningPathExample from "../../test-assets/learning-paths/pn-werking-example";
|
||||
import {LearningPath} from "../../../src/entities/content/learning-path.entity";
|
||||
|
||||
async function initExampleData(): Promise<LearningObject> {
|
||||
let learningObjectRepo = getLearningObjectRepository();
|
||||
let exampleLearningObject = createExampleLearningObjectWithAttachments(example);
|
||||
await learningObjectRepo.insert(exampleLearningObject);
|
||||
return exampleLearningObject;
|
||||
async function initExampleData(): Promise<{learningObject: LearningObject, learningPath: LearningPath}> {
|
||||
const learningObjectRepo = getLearningObjectRepository();
|
||||
const learningPathRepo = getLearningPathRepository();
|
||||
let learningObject = learningObjectExample.createLearningObject();
|
||||
let learningPath = learningPathExample.createLearningPath();
|
||||
await learningObjectRepo.save(learningObject);
|
||||
await learningPathRepo.save(learningPath);
|
||||
return { learningObject, learningPath };
|
||||
}
|
||||
|
||||
const EXPECTED_TITLE_FROM_DWENGO_LEARNING_OBJECT = "Notebook opslaan";
|
||||
|
||||
describe("DatabaseLearningObjectProvider", () => {
|
||||
let exampleLearningObject: LearningObject;
|
||||
let exampleLearningPath: LearningPath;
|
||||
|
||||
beforeAll(async () => {
|
||||
await setupTestApp();
|
||||
exampleLearningObject = await initExampleData();
|
||||
let exampleData = await initExampleData();
|
||||
exampleLearningObject = exampleData.learningObject;
|
||||
exampleLearningPath = exampleData.learningPath;
|
||||
});
|
||||
describe("getLearningObjectById", () => {
|
||||
it("should return the learning object when it is queried by its id", async () => {
|
||||
|
@ -54,5 +62,45 @@ describe("DatabaseLearningObjectProvider", () => {
|
|||
const result = await databaseLearningObjectProvider.getLearningObjectHTML(exampleLearningObject);
|
||||
expect(result).toEqual(example.getHTMLRendering());
|
||||
});
|
||||
it("should return null for a non-existing learning object", async () => {
|
||||
const result = await databaseLearningObjectProvider.getLearningObjectHTML({
|
||||
hruid: "non_existing_hruid",
|
||||
language: Language.Dutch
|
||||
});
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
});
|
||||
describe("getLearningObjectIdsFromPath", () => {
|
||||
it("should return all learning object IDs from a path", async () => {
|
||||
const result = await databaseLearningObjectProvider.getLearningObjectIdsFromPath(exampleLearningPath);
|
||||
expect(new Set(result))
|
||||
.toEqual(new Set(exampleLearningPath.nodes.map(it => it.learningObjectHruid)));
|
||||
});
|
||||
it("should throw an error if queried with a path identifier for which there is no learning path", async () => {
|
||||
await expect((async () => {
|
||||
await databaseLearningObjectProvider.getLearningObjectIdsFromPath({
|
||||
hruid: "non_existing_hruid",
|
||||
language: Language.Dutch
|
||||
});
|
||||
})()).rejects.toThrowError();
|
||||
});
|
||||
});
|
||||
describe("getLearningObjectsFromPath", () => {
|
||||
it("should correctly return all learning objects which are on the path, even those who are not in the database", async () => {
|
||||
const result = await databaseLearningObjectProvider.getLearningObjectsFromPath(exampleLearningPath);
|
||||
expect(result.length).toBe(exampleLearningPath.nodes.length);
|
||||
expect(new Set(result.map(it => it.key)))
|
||||
.toEqual(new Set(exampleLearningPath.nodes.map(it => it.learningObjectHruid)));
|
||||
|
||||
expect(result.map(it => it.title)).toContainEqual(EXPECTED_TITLE_FROM_DWENGO_LEARNING_OBJECT);
|
||||
});
|
||||
it("should throw an error if queried with a path identifier for which there is no learning path", async () => {
|
||||
await expect((async () => {
|
||||
await databaseLearningObjectProvider.getLearningObjectsFromPath({
|
||||
hruid: "non_existing_hruid",
|
||||
language: Language.Dutch
|
||||
});
|
||||
})()).rejects.toThrowError();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -78,7 +78,7 @@ export function expectToBeCorrectFilteredLearningObject(filtered: FilteredLearni
|
|||
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.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);
|
||||
|
@ -87,7 +87,7 @@ export function expectToBeCorrectFilteredLearningObject(filtered: FilteredLearni
|
|||
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.contentLocation || null).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