complete repository test
This commit is contained in:
		
							parent
							
								
									199906b4e7
								
							
						
					
					
						commit
						525a1b9f3c
					
				|  | @ -160,4 +160,24 @@ export abstract class PrismaRepository<T> implements IRepository<T> { | |||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   async deleteMany(where: any): Promise<void> { | ||||
|     try { | ||||
|       const entity = await this._prisma[this._model].deleteMany({ | ||||
|         where: where, | ||||
|       }); | ||||
| 
 | ||||
|       return entity; | ||||
|     } catch (e) { | ||||
|       if (e instanceof PrismaClientKnownRequestError) { | ||||
|         throw new DatabaseException( | ||||
|           PrismaClientKnownRequestError.name, | ||||
|           e.code, | ||||
|           e.message, | ||||
|         ); | ||||
|       } else { | ||||
|         throw new DatabaseException(); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -13,4 +13,5 @@ export interface IRepository<T> { | |||
|   update(uuid: string, entity: Partial<T>, include?: any): Promise<T>; | ||||
|   updateWhere(where: any, entity: Partial<T> | any, include?: any): Promise<T>; | ||||
|   delete(uuid: string): Promise<T>; | ||||
|   deleteMany(where: any): Promise<void>; | ||||
| } | ||||
|  |  | |||
|  | @ -184,6 +184,30 @@ const mockPrismaService = { | |||
|           throw new Error(); | ||||
|         } | ||||
|       }), | ||||
| 
 | ||||
|     deleteMany: jest | ||||
|       .fn() | ||||
|       // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | ||||
|       .mockImplementationOnce((params?: any) => { | ||||
|         throw new PrismaClientKnownRequestError('unknown request', { | ||||
|           code: 'code', | ||||
|           clientVersion: 'version', | ||||
|         }); | ||||
|       }) | ||||
|       .mockImplementation((params: any) => { | ||||
|         let found = false; | ||||
| 
 | ||||
|         fakeEntities.forEach((entity, index) => { | ||||
|           if (entity.uuid === params?.where?.uuid) { | ||||
|             found = true; | ||||
|             fakeEntities.splice(index, 1); | ||||
|           } | ||||
|         }); | ||||
| 
 | ||||
|         if (!found) { | ||||
|           throw new Error(); | ||||
|         } | ||||
|       }), | ||||
|   }, | ||||
| }; | ||||
| 
 | ||||
|  | @ -372,4 +396,30 @@ describe('PrismaRepository', () => { | |||
|       ); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('deleteMany', () => { | ||||
|     it('should throw a DatabaseException for client error', async () => { | ||||
|       await expect( | ||||
|         fakeRepository.deleteMany({ uuid: 'fake-uuid' }), | ||||
|       ).rejects.toBeInstanceOf(DatabaseException); | ||||
|     }); | ||||
| 
 | ||||
|     it('should delete entities based on their uuid', async () => { | ||||
|       const savedUuid = fakeEntities[0].uuid; | ||||
| 
 | ||||
|       // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | ||||
|       const res = await fakeRepository.deleteMany({ uuid: savedUuid }); | ||||
| 
 | ||||
|       const deletedEntity = fakeEntities.find( | ||||
|         (entity) => entity.uuid === savedUuid, | ||||
|       ); | ||||
|       expect(deletedEntity).toBeUndefined(); | ||||
|     }); | ||||
| 
 | ||||
|     it("should throw an exception if an entity doesn't exist", async () => { | ||||
|       await expect( | ||||
|         fakeRepository.deleteMany({ uuid: 'fake-uuid' }), | ||||
|       ).rejects.toBeInstanceOf(DatabaseException); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue