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