Skip to content

Commit

Permalink
Merge pull request #556 from rfcx/bug/cannot-change-site-name-undersc…
Browse files Browse the repository at this point in the history
…ore-hyphen

Add escape char to _ to avoid sql pattern matching
  • Loading branch information
Tooseriuz authored Mar 6, 2024
2 parents b1a8ad6 + de90247 commit 5501e26
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 2 deletions.
40 changes: 40 additions & 0 deletions core/streams/create.int.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -519,4 +519,44 @@ describe('POST /streams', () => {
expect(projectAfterCreated.minLongitude).toBe(stream.longitude)
expect(projectAfterCreated.maxLongitude).toBe(stream.longitude)
})

test('Can create site with similar name (hyphen to underscore)', async () => {
const project = { id: 'p123p', createdById: seedValues.primaryUserId, name: 'Primary User Project' }
await models.Project.create(project)
await models.UserProjectRole.create({ user_id: seedValues.primaryUserId, project_id: project.id, role_id: seedValues.roleAdmin })
const stream1 = { id: 'jagu1', createdById: seedValues.primaryUserId, name: 'Jaguar-Station', latitude: null, longitude: -4.5, projectId: project.id }
await models.Stream.create(stream1)

const requestBody = {
name: 'Jaguar_Station',
project_id: project.id
}

const response = await request(app).post('/').send(requestBody)

expect(response.statusCode).toBe(201)
const id = response.header.location.replace('/streams/', '')
const stream = await models.Stream.findByPk(id)
expect(stream.name).toBe(requestBody.name)
})

test('Can create site with similar name (2 hyphen to 1 underscore)', async () => {
const project = { id: 'p123p', createdById: seedValues.primaryUserId, name: 'Primary User Project' }
await models.Project.create(project)
await models.UserProjectRole.create({ user_id: seedValues.primaryUserId, project_id: project.id, role_id: seedValues.roleAdmin })
const stream1 = { id: 'jagu1', createdById: seedValues.primaryUserId, name: 'Jaguar-Station-1', latitude: null, longitude: -4.5, projectId: project.id }
await models.Stream.create(stream1)

const requestBody = {
name: 'Jaguar_Station-1',
project_id: project.id
}

const response = await request(app).post('/').send(requestBody)

expect(response.statusCode).toBe(201)
const id = response.header.location.replace('/streams/', '')
const stream = await models.Stream.findByPk(id)
expect(stream.name).toBe(requestBody.name)
})
})
4 changes: 2 additions & 2 deletions core/streams/dao/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ async function query (filters, options = {}) {
if (filters.names) {
where.name = {
[Sequelize.Op.iLike]: {
[Sequelize.Op.any]: filters.names.map(n => `${n.replace(/^\*/, '%').replace(/\*$/, '%')}`)
[Sequelize.Op.any]: filters.names.map(n => `${n.replace(/(_|%|\\)/g, '\\$1').replace(/^\*/, '%').replace(/\*$/, '%')}`)
}
}
}
Expand All @@ -127,7 +127,7 @@ async function query (filters, options = {}) {
},
name: {
[Sequelize.Op.iLike]: {
[Sequelize.Op.any]: filters.namesOrIds.map(n => `${n.replace(/^\*/, '%').replace(/\*$/, '%')}`)
[Sequelize.Op.any]: filters.namesOrIds.map(n => `${n.replace(/(_|%|\\)/g, '\\$1').replace(/^\*/, '%').replace(/\*$/, '%')}`)
}
}
}
Expand Down
30 changes: 30 additions & 0 deletions core/streams/update.int.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -458,4 +458,34 @@ describe('PATCH /streams/:id', () => {
expect(projectAfterUpdated.minLongitude).toBe(stream2.longitude)
expect(projectAfterUpdated.maxLongitude).toBe(stream2.longitude)
})

test('Can update site with similar name (hyphen to underscore)', async () => {
const project = { id: 'p123p', createdById: seedValues.primaryUserId, name: 'Primary User Project' }
await models.Project.create(project)
await models.UserProjectRole.create({ user_id: seedValues.primaryUserId, project_id: project.id, role_id: seedValues.roleAdmin })
const stream1 = { id: 'jagu1', createdById: seedValues.primaryUserId, name: 'Jaguar-Station', latitude: null, longitude: -4.5, projectId: project.id }
await models.Stream.create(stream1)
const requestBody = { name: 'Jaguar_Station' }

const response = await request(app).patch(`/${stream1.id}`).send(requestBody)

expect(response.statusCode).toBe(204)
const stream = await models.Stream.findByPk(stream1.id)
expect(stream.name).toBe(requestBody.name)
})

test('Can update site with similar name (2 hyphen to 1 underscore)', async () => {
const project = { id: 'p123p', createdById: seedValues.primaryUserId, name: 'Primary User Project' }
await models.Project.create(project)
await models.UserProjectRole.create({ user_id: seedValues.primaryUserId, project_id: project.id, role_id: seedValues.roleAdmin })
const stream1 = { id: 'jagu1', createdById: seedValues.primaryUserId, name: 'Jaguar-Station-1', latitude: null, longitude: -4.5, projectId: project.id }
await models.Stream.create(stream1)
const requestBody = { name: 'Jaguar_Station-1' }

const response = await request(app).patch(`/${stream1.id}`).send(requestBody)

expect(response.statusCode).toBe(204)
const stream = await models.Stream.findByPk(stream1.id)
expect(stream.name).toBe(requestBody.name)
})
})

0 comments on commit 5501e26

Please sign in to comment.