fix: LABEL_ALREADY_EXIST bug occured during label creation

* comparing both user_id and label name when looking for an existing matching label
This commit is contained in:
Hongbo Wu
2024-04-16 09:56:57 +08:00
parent b1fb527ee9
commit a9779a51e8
3 changed files with 33 additions and 4 deletions

View File

@ -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()
},

View File

@ -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],

View File

@ -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 {