Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions src/controller/registry-user.controller/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const router = express.Router()
const mw = require('../../middleware/middleware')
const { param, query } = require('express-validator')
const controller = require('./registry-user.controller')
const { parseGetParams, parsePostParams, parseDeleteParams } = require('./registry-user.middleware')
const { parseGetParams, parsePostParams, parseDeleteParams, parseError } = require('./registry-user.middleware')
const getConstants = require('../../constants').getConstants
const CONSTANTS = getConstants()

Expand Down Expand Up @@ -69,7 +69,7 @@ router.get('/registryUser',
mw.onlySecretariat,
query(['page']).optional().isInt({ min: CONSTANTS.PAGINATOR_PAGE }),
query(['page']).custom((val) => { return mw.containsNoInvalidCharacters(val) }),
// parseError,
parseError,
parseGetParams,
controller.ALL_USERS
)
Expand Down Expand Up @@ -140,7 +140,7 @@ router.get('/registryUser/:identifier',
mw.validateUser,
mw.onlySecretariat,
param(['identifier']).isString().trim(),
// parseError,
parseError,
parseGetParams,
controller.SINGLE_USER
)
Expand Down Expand Up @@ -212,6 +212,8 @@ router.post('/registryUser/:shortname',
*/
mw.validateUser,
mw.onlySecretariat,
param(['shortname']).isString().trim(),
parseError,
parsePostParams,
controller.CREATE_USER
)
Expand Down Expand Up @@ -299,7 +301,7 @@ router.put('/registryUser/:identifier',
mw.onlySecretariat,
param(['identifier']).isString().trim(),
// TODO: do more validation here
// parseError,
parseError,
parsePostParams,
controller.UPDATE_USER
)
Expand Down Expand Up @@ -387,7 +389,7 @@ router.delete(
mw.validateUser,
mw.onlySecretariat,
param(['identifier']).isString().trim(),
// parseError,
parseError,
parseDeleteParams,
controller.DELETE_USER
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
const utils = require('../../utils/utils')
const { validationResult } = require('express-validator')
const errors = require('../registry-org.controller/error')
const error = new errors.RegistryOrgControllerError()

function parsePostParams (req, res, next) {
utils.reqCtxMapping(req, 'body', [])
utils.reqCtxMapping(req, 'params', ['identifier'])
utils.reqCtxMapping(req, 'params', ['identifier', 'shortname'])
utils.reqCtxMapping(req, 'query', [
'new_username',
'name.first', 'name.last', 'name.middle', 'name.suffix',
Expand All @@ -23,8 +26,19 @@ function parseDeleteParams (req, res, next) {
next()
}

function parseError (req, res, next) {
const err = validationResult(req).formatWith(({ location, msg, param, value, nestedErrors }) => {
return { msg: msg, param: param, location: location }
})
if (!err.isEmpty()) {
return res.status(400).json(error.badInput(err.array()))
}
next()
}

module.exports = {
parsePostParams,
parseGetParams,
parseDeleteParams
parseDeleteParams,
parseError
}
64 changes: 64 additions & 0 deletions test/integration-tests/registry-user/registryUserCRUDTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
const chai = require('chai')
const expect = chai.expect
chai.use(require('chai-http'))

const constants = require('../constants.js')
const app = require('../../../src/index.js')

const secretariatHeaders = { ...constants.headers, 'content-type': 'application/json' }

describe('Testing /registryUser endpoints', () => {
context('Positive Tests', () => {
// TODO
})
context('Negative Tests', () => {
it('Fails when page query parameter is not an integer', async () => {
await chai.request(app)
.get('/api/registryUser')
.set(secretariatHeaders) // Must be secretariat to reach validation
.query({ page: 'not-a-number' }) // Invalid data
.then((res) => {
expect(res).to.have.status(400)
expect(res.body.message).to.equal('Parameters were invalid')
})
})

it('Fails when page query parameter is below the minimum', async () => {
await chai.request(app)
.get('/api/registryUser')
.set(secretariatHeaders)
.query({ page: 0 }) // Assuming min is 1
.then((res) => {
expect(res).to.have.status(400)
})
})

it('Fails when identifier contains invalid characters', async () => {
await chai.request(app)
.get('/api/registryUser/uuid<script>') // violates containsNoInvalidCharacters if applied
.set(secretariatHeaders)
.then((res) => {
expect(res).to.have.status(400)
})
})

it('Fails when creating a user with an invalid username', async () => {
await chai.request(app)
.post('/api/registryUser/win_5')
.set(secretariatHeaders)
.send({ username: 'ab' }) // Too short (minLength is 3)
.then((res) => {
expect(res).to.have.status(400)
})
})

it('Fails when deleting a user that doesn\'t exist', async () => {
await chai.request(app)
.delete('/api/registryUser/user_with_!') // Invalid string/trim logic
.set(secretariatHeaders)
.then((res) => {
expect(res).to.have.status(404)
})
})
})
})
Loading