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
				
			
		|  | @ -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}`); | ||||
|  |  | |||
		Reference in a new issue
	
	 Gerald Schmittinger
						Gerald Schmittinger