diff --git a/graphql/resolvers/userDataCrud.test.js b/graphql/resolvers/userDataCrud.test.js index 1fc6f0fe1..0356e9683 100644 --- a/graphql/resolvers/userDataCrud.test.js +++ b/graphql/resolvers/userDataCrud.test.js @@ -18,6 +18,7 @@ describe('User Data CRUD resolvers', () => { } prismaMock.user.update.mockResolvedValueOnce(userMock) + prismaMock.user.findFirst.mockResolvedValueOnce(null) expect( updateUserNames( @@ -27,4 +28,24 @@ describe('User Data CRUD resolvers', () => { ) ).resolves.toStrictEqual(userMock) }) + + it('Should not update the user username and name if username already used', async () => { + expect.assertions(1) + + const userMock = { + username: mockUsername, + name: mockName + } + + prismaMock.user.update.mockResolvedValueOnce(userMock) + prismaMock.user.findFirst.mockResolvedValueOnce(userMock) + + expect( + updateUserNames( + null, + { username: mockUsername, mockName }, + { req: { user: { id: 1 } } } + ) + ).rejects.toEqual(Error('Username is already used')) + }) }) diff --git a/graphql/resolvers/userDataCrud.ts b/graphql/resolvers/userDataCrud.ts index ac3e78bfa..b4acac503 100644 --- a/graphql/resolvers/userDataCrud.ts +++ b/graphql/resolvers/userDataCrud.ts @@ -9,6 +9,16 @@ export const updateUserNames = withUserContainer< >(async (_, args, { req }) => { const { username, name } = args + const usernameAlreadyUsed = await prisma.user.findFirst({ + where: { + username + } + }) + + if (usernameAlreadyUsed) { + throw new Error('Username is already used') + } + const user = await prisma.user.update({ where: { id: req.user!.id