fix(backend): Foute entity-structuur van leerpaden verbeterd.
Ook testen geschreven voor LearningPathRepository en LearningObjectRepository.
This commit is contained in:
		
							parent
							
								
									4d999c78ba
								
							
						
					
					
						commit
						1417907933
					
				
					 24 changed files with 474 additions and 64 deletions
				
			
		
							
								
								
									
										62
									
								
								backend/tests/test-utils/expect-to-be-correct-entity.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								backend/tests/test-utils/expect-to-be-correct-entity.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,62 @@ | |||
| import {AssertionError} from "node:assert"; | ||||
| 
 | ||||
| // Ignored properties because they belang for example to the class, not to the entity itself.
 | ||||
| const IGNORE_PROPERTIES = ["parent"]; | ||||
| 
 | ||||
| /** | ||||
|  * Checks if the actual entity from the database conforms to the entity that was added previously. | ||||
|  * @param actual The actual entity retrieved from the database | ||||
|  * @param expected The (previously added) entity we would expect to retrieve | ||||
|  */ | ||||
| export function expectToBeCorrectEntity<T extends object>( | ||||
|     actual: {entity: T, name?: string}, | ||||
|     expected: {entity: T, name?: string} | ||||
| ): void { | ||||
|     if (!actual.name) { | ||||
|         actual.name = "actual"; | ||||
|     } | ||||
|     if (!expected.name) { | ||||
|         expected.name = "expected"; | ||||
|     } | ||||
|     for (let property in expected.entity) { | ||||
|         if ( | ||||
|             property !in IGNORE_PROPERTIES | ||||
|             && expected.entity[property] !== undefined // If we don't expect a certain value for a property, we assume it can be filled in by the database however it wants.
 | ||||
|             && typeof expected.entity[property] !== "function" // Functions obviously are not persisted via the database
 | ||||
|         ) { | ||||
|             if (!actual.entity.hasOwnProperty(property)) { | ||||
|                 throw new AssertionError({ | ||||
|                     message: `${expected.name} has defined property ${property}, but ${actual.name} is missing it.` | ||||
|                 }); | ||||
|             } | ||||
|             if (typeof expected.entity[property] === "boolean") { // Sometimes, booleans get represented by numbers 0 and 1 in the objects actual from the database.
 | ||||
|                 if (!!expected.entity[property] !== !!actual.entity[property]) { | ||||
|                     throw new AssertionError({ | ||||
|                         message: `${property} was ${expected.entity[property]} in ${expected.name},
 | ||||
|                         but ${actual.entity[property]} (${!!expected.entity[property]}) in ${actual.name}` | ||||
|                     }); | ||||
|                 } | ||||
|             } else if (typeof expected.entity[property] !== typeof actual.entity[property]) { | ||||
|                 throw new AssertionError({ | ||||
|                     message: `${property} has type ${typeof expected.entity[property]} in ${expected.name}, but type ${typeof actual.entity[property]} in ${actual.name}.` | ||||
|                 }); | ||||
|             } else if (typeof expected.entity[property] === "object") { | ||||
|                 expectToBeCorrectEntity( | ||||
|                     { | ||||
|                         name: actual.name + "." + property, | ||||
|                         entity: actual.entity[property] as object | ||||
|                     }, { | ||||
|                         name: expected.name + "." + property, | ||||
|                         entity: expected.entity[property] as object | ||||
|                     } | ||||
|                 ); | ||||
|             } else { | ||||
|                 if (expected.entity[property] !== actual.entity[property]) { | ||||
|                     throw new AssertionError({ | ||||
|                         message: `${property} was ${expected.entity[property]} in ${expected.name}, but ${actual.entity[property]} in ${actual.name}` | ||||
|                     }); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										10
									
								
								backend/tests/test-utils/load-test-asset.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								backend/tests/test-utils/load-test-asset.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| import fs from "fs"; | ||||
| import path from "node:path"; | ||||
| 
 | ||||
| /** | ||||
|  * Load the asset at the given path. | ||||
|  * @param relPath Path of the asset relative to the test-assets folder. | ||||
|  */ | ||||
| export function loadTestAsset(relPath: string): Buffer { | ||||
|     return fs.readFileSync(path.resolve(__dirname, `../test-assets/${relPath}`)); | ||||
| } | ||||
		Reference in a new issue
	
	 Gerald Schmittinger
						Gerald Schmittinger