diff --git a/packages/api/src/repository/label.ts b/packages/api/src/repository/label.ts index baaac24bb..0faebd3db 100644 --- a/packages/api/src/repository/label.ts +++ b/packages/api/src/repository/label.ts @@ -46,9 +46,12 @@ export const labelRepository = appDataSource.getRepository(Label).extend({ return this.findOneBy({ id }) }, - findByName(name: string) { + findByName(name: string, userId: string) { return this.createQueryBuilder() - .where('LOWER(name) = LOWER(:name)', { name }) // case insensitive + .where('user_id = :userId AND LOWER(name) = LOWER(:name)', { + name, + userId, + }) // case insensitive .getOne() }, diff --git a/packages/api/src/resolvers/labels/index.ts b/packages/api/src/resolvers/labels/index.ts index 1da2f3053..cd5ec824b 100644 --- a/packages/api/src/resolvers/labels/index.ts +++ b/packages/api/src/resolvers/labels/index.ts @@ -90,7 +90,7 @@ export const createLabelResolver = authorized< CreateLabelError, MutationCreateLabelArgs >(async (_, { input }, { authTrx, uid }) => { - const existingLabel = await labelRepository.findByName(input.name) + const existingLabel = await labelRepository.findByName(input.name, uid) if (existingLabel) { return { errorCodes: [CreateLabelErrorCode.LabelAlreadyExists], diff --git a/packages/api/test/resolvers/labels.test.ts b/packages/api/test/resolvers/labels.test.ts index 8d1175c78..0dccc54d1 100644 --- a/packages/api/test/resolvers/labels.test.ts +++ b/packages/api/test/resolvers/labels.test.ts @@ -145,7 +145,7 @@ describe('Labels API', () => { }) }) - context('when name exists', () => { + context('when name exists in the user library', () => { let existingLabel: Label before(async () => { @@ -177,6 +177,32 @@ describe('Labels API', () => { }) }) + context('when name exists in the other user library', () => { + let existingLabel: Label + let otherUser: User + + before(async () => { + otherUser = await createTestUser('otherUser') + existingLabel = await createLabel('label3', '#ffffff', otherUser.id) + }) + + after(async () => { + // delete other user will also delete the label + await deleteUser(otherUser.id) + }) + + it('creates the label', async () => { + const res = await graphqlRequest(query, authToken, { + input: { name: existingLabel.name }, + }).expect(200) + const label = await findLabelById( + res.body.data.createLabel.label.id, + user.id + ) + expect(label).to.exist + }) + }) + it('responds status code 400 when invalid query', async () => { const invalidQuery = ` mutation {