Fleshing out user JSON RPC unit tests

This commit is contained in:
Chris Troutner
2021-04-08 09:31:38 -07:00
parent 1877873892
commit 313e054f55
2 changed files with 158 additions and 8 deletions
+61 -6
View File
@@ -37,7 +37,8 @@ class UserRPC {
return await this.getAll(rpcData)
case 'getUser':
return await this.getUser(rpcData)
user = await this.validators.ensureUser(rpcData)
return await this.getUser(rpcData, user)
case 'deleteUser':
user = await this.validators.ensureTargetUserOrAdmin(rpcData)
@@ -56,12 +57,24 @@ class UserRPC {
const retObj = await this.userLib.createUser(rpcData.payload.params)
// Add generic JSON RPC properties that every entry gets.
retObj.endpoint = 'createUser'
retObj.success = true
retObj.status = 200
retObj.message = ''
return retObj
} catch (err) {
console.error('Error in createUser()')
throw err
// console.error('Error in createUser()')
// throw err
// Return an error response
return {
success: false,
status: 422,
message: err.message,
endpoint: 'createUser'
}
}
}
@@ -71,12 +84,54 @@ class UserRPC {
const users = await this.userLib.getAllUsers()
return {
users,
endpoint: 'getAllUsers',
users
success: true,
status: 200,
message: ''
}
} catch (err) {
console.error('Error in getAll()')
throw err
// console.error('Error in getAll()')
// throw err
// Return an error response
return {
success: false,
status: 422,
message: err.message,
endpoint: 'getAllUsers'
}
}
}
// Get a specific user.
async getUser (rpcData, userModel) {
try {
// console.log('getUser rpcData: ', rpcData)
// Throw error if rpcData does not include 'userId' property for target user.
const userId = rpcData.payload.params.userId
const user = await this.userLib.getUser({ id: userId })
return {
user,
endpoint: 'getUser',
success: true,
status: 200,
message: ''
}
} catch (err) {
// console.error('Error in getUser()')
// throw err
// Return an error response
return {
success: false,
status: 422,
message: err.message,
endpoint: 'getUser'
}
}
}
+97 -2
View File
@@ -65,16 +65,48 @@ describe('#UserRPC', () => {
const result = await uut.createUser(rpcData)
// console.log('result: ', result)
assert.equal(result.endpoint, 'createUser')
// CreateUser() specific return values.
assert.equal(result.userData.type, 'user')
assert.equal(result.userData.email, 'test973@test.com')
assert.equal(result.userData.name, 'test973')
assert.property(result.userData, '_id')
assert.property(result, 'token')
// Generic JSON RPC return values
assert.equal(result.endpoint, 'createUser')
assert.equal(result.success, true)
assert.equal(result.status, 200)
assert.equal(result.message, '')
// Save the user ID for future tests.
testUser = result
})
it('should return error data if biz logic throws an error', async () => {
// Force an error
sandbox.stub(uut.userLib, 'createUser').rejects(new Error('test error'))
// Generate the parsed data that the main router would pass to this
// endpoint.
const id = uid()
const userCall = jsonrpc.request(id, 'users', {
endpoint: 'createUser',
email: 'test973@test.com',
name: 'test973',
password: 'password'
})
const jsonStr = JSON.stringify(userCall, null, 2)
const rpcData = jsonrpc.parse(jsonStr)
const result = await uut.createUser(rpcData)
// console.log('result: ', result)
// Generic JSON RPC return values
assert.equal(result.endpoint, 'createUser')
assert.equal(result.success, false)
assert.equal(result.status, 422)
assert.equal(result.message, 'test error')
})
})
describe('#userRouter', () => {
@@ -140,8 +172,71 @@ describe('#UserRPC', () => {
const result = await uut.getAll()
// console.log('result: ', result)
assert.equal(result.endpoint, 'getAllUsers')
// Endpoint specific properties
assert.property(result, 'users')
assert.isArray(result.users)
// Generic JSON RPC return values
assert.equal(result.endpoint, 'getAllUsers')
assert.equal(result.success, true)
assert.equal(result.status, 200)
assert.equal(result.message, '')
})
it('should return error data if biz logic throws an error', async () => {
// Force an error
sandbox.stub(uut.userLib, 'getAllUsers').rejects(new Error('test error'))
const result = await uut.getAll()
// console.log('result: ', result)
// Generic JSON RPC return values
assert.equal(result.endpoint, 'getAllUsers')
assert.equal(result.success, false)
assert.equal(result.status, 422)
assert.equal(result.message, 'test error')
})
})
describe('#getUser', () => {
it('should return a specific user', async () => {
// Generate the parsed data that the main router would pass to this
// endpoint.
const id = uid()
const userCall = jsonrpc.request(id, 'users', {
endpoint: 'getUser',
userId: testUser.userData._id.toString()
})
const jsonStr = JSON.stringify(userCall, null, 2)
const rpcData = jsonrpc.parse(jsonStr)
const result = await uut.getUser(rpcData)
// console.log('result: ', result)
// Endpoint specific properties
assert.property(result, 'user')
assert.property(result.user, 'type')
assert.property(result.user, '_id')
assert.property(result.user, 'email')
assert.property(result.user, 'name')
// Generic JSON RPC return values
assert.equal(result.endpoint, 'getUser')
assert.equal(result.success, true)
assert.equal(result.status, 200)
assert.equal(result.message, '')
})
it('should return error data if biz logic throws an error', async () => {
// Force an error by not specifying an user ID.
const result = await uut.getUser()
// console.log('result: ', result)
// Generic JSON RPC return values
assert.equal(result.endpoint, 'getUser')
assert.equal(result.success, false)
assert.equal(result.status, 422)
assert.include(result.message, 'Cannot read property')
})
})