diff --git a/src/features/user/repositories/user-repository/user-repository.test.ts b/src/features/user/repositories/user-repository/user-repository.test.ts index 32fbf3d..66155b8 100644 --- a/src/features/user/repositories/user-repository/user-repository.test.ts +++ b/src/features/user/repositories/user-repository/user-repository.test.ts @@ -17,8 +17,10 @@ describe('[Repositories] UserRepository', () => { await repository.create(user); + const { id, ...userWithoutId } = user; + expect(prisma.user.create).toHaveBeenCalledWith({ - data: user, + data: userWithoutId, }); }); @@ -36,4 +38,53 @@ describe('[Repositories] UserRepository', () => { await expect(response).rejects.toThrowError(); }); }); + + describe('findById', () => { + it('return user if found', async () => { + const { repository } = makeSut(); + + const user = UserMock.create(); + + const expectedResult = { + createdAt: new Date(), + deletedAt: null, + email: user.email, + id: user.id, + name: user.name, + password: user.password, + updatedAt: new Date(), + username: user.username, + }; + + prisma.user.findUnique.mockResolvedValue(expectedResult); + + const result = await repository.findById(user.id); + + expect(prisma.user.findUnique).toHaveBeenCalledWith({ + select: expect.anything(), + where: { + id: user.id, + }, + }); + + expect(result).toEqual(expectedResult); + }); + + it('return null if user is not found', async () => { + const { repository } = makeSut(); + + prisma.user.findUnique.mockResolvedValue(null); + + const result = await repository.findById('non_existent_id'); + + expect(prisma.user.findUnique).toHaveBeenCalledWith({ + select: expect.anything(), + where: { + id: 'non_existent_id', + }, + }); + + expect(result).toBeNull(); + }); + }); }); diff --git a/src/features/user/repositories/user-repository/user-repository.ts b/src/features/user/repositories/user-repository/user-repository.ts index 0cffab1..ab173fd 100644 --- a/src/features/user/repositories/user-repository/user-repository.ts +++ b/src/features/user/repositories/user-repository/user-repository.ts @@ -14,4 +14,20 @@ export class UserRepository { }, }); } + + async findById(id: string) { + const user = await database.user.findUnique({ + select: { + email: true, + id: true, + name: true, + username: true, + }, + where: { + id, + }, + }); + + return user; + } } diff --git a/src/shared/test-helpers/mocks/user.mock.ts b/src/shared/test-helpers/mocks/user.mock.ts index f61b639..437a88e 100644 --- a/src/shared/test-helpers/mocks/user.mock.ts +++ b/src/shared/test-helpers/mocks/user.mock.ts @@ -4,6 +4,7 @@ export class UserMock { public static create() { return { email: faker.internet.email(), + id: faker.string.numeric(), name: faker.person.firstName(), password: faker.internet.password(), username: faker.internet.userName(),