mirror of
https://github.com/Permissionless-Software-Foundation/ipfs-bch-wallet-service.git
synced 2026-09-21 16:52:03 -07:00
188 lines
5.8 KiB
JavaScript
188 lines
5.8 KiB
JavaScript
/*
|
|||
|
|
Unit tests for the rpc/auth/index.js file.
|
||
|
|
*/
|
||
|
|
|
||
|
|
// Public npm libraries
|
||
|
|
const jsonrpc = require('jsonrpc-lite')
|
||
|
|
const mongoose = require('mongoose')
|
||
|
|
const sinon = require('sinon')
|
||
|
|
const assert = require('chai').assert
|
||
|
|
const { v4: uid } = require('uuid')
|
||
|
|
|
||
|
|
// Set the environment variable to signal this is a test.
|
||
|
|
process.env.SVC_ENV = 'test'
|
||
|
|
|
||
|
|
// Local libraries
|
||
|
|
const config = require('../../../config')
|
||
|
|
const AuthRPC = require('../../../src/rpc/auth')
|
||
|
|
const UserLib = require('../../../src/lib/users')
|
||
|
|
const userLib = new UserLib()
|
||
|
|
|
||
|
|
describe('#AuthRPC', () => {
|
||
|
|
let uut
|
||
|
|
let sandbox
|
||
|
|
let testUser
|
||
|
|
|
||
|
|
before(async () => {
|
||
|
|
// Connect to the Mongo Database.
|
||
|
|
console.log(`Connecting to database: ${config.database}`)
|
||
|
|
mongoose.Promise = global.Promise
|
||
|
|
mongoose.set('useCreateIndex', true) // Stop deprecation warning.
|
||
|
|
await mongoose.connect(
|
||
|
|
config.database,
|
||
|
|
{
|
||
|
|
useUnifiedTopology: true,
|
||
|
|
useNewUrlParser: true
|
||
|
|
}
|
||
|
|
)
|
||
|
|
|
||
|
|
// Create a test user.
|
||
|
|
testUser = await userLib.createUser({
|
||
|
|
email: 'test543@test.com',
|
||
|
|
name: 'tester543',
|
||
|
|
password: 'password'
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
beforeEach(() => {
|
||
|
|
sandbox = sinon.createSandbox()
|
||
|
|
|
||
|
|
uut = new AuthRPC()
|
||
|
|
})
|
||
|
|
|
||
|
|
afterEach(() => sandbox.restore())
|
||
|
|
|
||
|
|
after(async () => {
|
||
|
|
// Delete the test user.
|
||
|
|
testUser = await userLib.getUser({ id: testUser.userData._id })
|
||
|
|
await userLib.deleteUser(testUser)
|
||
|
|
|
||
|
|
mongoose.connection.close()
|
||
|
|
})
|
||
|
|
|
||
|
|
describe('#authRouter', () => {
|
||
|
|
it('should route to the authUser method', async () => {
|
||
|
|
// Mock dependencies
|
||
|
|
sandbox.stub(uut, 'authUser').resolves(true)
|
||
|
|
|
||
|
|
// Generate the parsed data that the main router would pass to this
|
||
|
|
// endpoint.
|
||
|
|
const id = uid()
|
||
|
|
const authCall = jsonrpc.request(id, 'auth', { endpoint: 'authUser' })
|
||
|
|
const jsonStr = JSON.stringify(authCall, null, 2)
|
||
|
|
const rpcData = jsonrpc.parse(jsonStr)
|
||
|
|
|
||
|
|
const result = await uut.authRouter(rpcData)
|
||
|
|
|
||
|
|
assert.equal(result, true)
|
||
|
|
})
|
||
|
|
|
||
|
|
it('should return 500 status on routing issue', async () => {
|
||
|
|
// Mock dependencies
|
||
|
|
sandbox.stub(uut, 'authUser').rejects(new Error('test error'))
|
||
|
|
|
||
|
|
// Generate the parsed data that the main router would pass to this
|
||
|
|
// endpoint.
|
||
|
|
const id = uid()
|
||
|
|
const authCall = jsonrpc.request(id, 'auth', { endpoint: 'authUser' })
|
||
|
|
const jsonStr = JSON.stringify(authCall, null, 2)
|
||
|
|
const rpcData = jsonrpc.parse(jsonStr)
|
||
|
|
|
||
|
|
const result = await uut.authRouter(rpcData)
|
||
|
|
|
||
|
|
assert.equal(result.success, false)
|
||
|
|
assert.equal(result.status, 500)
|
||
|
|
assert.equal(result.message, 'test error')
|
||
|
|
assert.equal(result.endpoint, 'authUser')
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
describe('#authUser', () => {
|
||
|
|
it('should return a JWT token if user successfully authenticates', async () => {
|
||
|
|
// Generate the parsed data that the main router would pass to this
|
||
|
|
// endpoint.
|
||
|
|
const id = uid()
|
||
|
|
const authCall = jsonrpc.request(id, 'auth', {
|
||
|
|
endpoint: 'authUser',
|
||
|
|
login: 'test543@test.com',
|
||
|
|
password: 'password'
|
||
|
|
})
|
||
|
|
const jsonStr = JSON.stringify(authCall, null, 2)
|
||
|
|
const rpcData = jsonrpc.parse(jsonStr)
|
||
|
|
|
||
|
|
const response = await uut.authUser(rpcData)
|
||
|
|
// console.log('response: ', response)
|
||
|
|
|
||
|
|
assert.equal(response.endpoint, 'authUser')
|
||
|
|
assert.property(response, 'userId')
|
||
|
|
assert.equal(response.userType, 'user')
|
||
|
|
assert.property(response, 'userName')
|
||
|
|
assert.property(response, 'userEmail')
|
||
|
|
assert.property(response, 'apiToken')
|
||
|
|
assert.equal(response.status, 200)
|
||
|
|
assert.equal(response.success, true)
|
||
|
|
assert.property(response, 'message')
|
||
|
|
})
|
||
|
|
|
||
|
|
it('should return an error for invalid credentials', async () => {
|
||
|
|
// Generate the parsed data that the main router would pass to this
|
||
|
|
// endpoint.
|
||
|
|
const id = uid()
|
||
|
|
const authCall = jsonrpc.request(id, 'auth', {
|
||
|
|
endpoint: 'authUser',
|
||
|
|
login: 'test543@test.com',
|
||
|
|
password: 'badpassword'
|
||
|
|
})
|
||
|
|
const jsonStr = JSON.stringify(authCall, null, 2)
|
||
|
|
const rpcData = jsonrpc.parse(jsonStr)
|
||
|
|
|
||
|
|
const response = await uut.authUser(rpcData)
|
||
|
|
// console.log('response: ', response)
|
||
|
|
|
||
|
|
assert.equal(response.success, false)
|
||
|
|
assert.equal(response.status, 422)
|
||
|
|
assert.equal(response.message, 'Login credential do not match')
|
||
|
|
assert.equal(response.endpoint, 'authUser')
|
||
|
|
})
|
||
|
|
|
||
|
|
it('should throw an error if login is not provided', async () => {
|
||
|
|
// Generate the parsed data that the main router would pass to this
|
||
|
|
// endpoint.
|
||
|
|
const id = uid()
|
||
|
|
const authCall = jsonrpc.request(id, 'auth', {
|
||
|
|
endpoint: 'authUser'
|
||
|
|
})
|
||
|
|
const jsonStr = JSON.stringify(authCall, null, 2)
|
||
|
|
const rpcData = jsonrpc.parse(jsonStr)
|
||
|
|
|
||
|
|
const response = await uut.authUser(rpcData)
|
||
|
|
// console.log('response: ', response)
|
||
|
|
|
||
|
|
assert.equal(response.success, false)
|
||
|
|
assert.equal(response.status, 422)
|
||
|
|
assert.equal(response.message, 'login must be specified')
|
||
|
|
assert.equal(response.endpoint, 'authUser')
|
||
|
|
})
|
||
|
|
|
||
|
|
it('should throw an error if password is not provided', async () => {
|
||
|
|
// Generate the parsed data that the main router would pass to this
|
||
|
|
// endpoint.
|
||
|
|
const id = uid()
|
||
|
|
const authCall = jsonrpc.request(id, 'auth', {
|
||
|
|
endpoint: 'authUser',
|
||
|
|
login: 'test543@test.com'
|
||
|
|
})
|
||
|
|
const jsonStr = JSON.stringify(authCall, null, 2)
|
||
|
|
const rpcData = jsonrpc.parse(jsonStr)
|
||
|
|
|
||
|
|
const response = await uut.authUser(rpcData)
|
||
|
|
// console.log('response: ', response)
|
||
|
|
|
||
|
|
assert.equal(response.success, false)
|
||
|
|
assert.equal(response.status, 422)
|
||
|
|
assert.equal(response.message, 'password must be specified')
|
||
|
|
assert.equal(response.endpoint, 'authUser')
|
||
|
|
})
|
||
|
|
})
|
||
|
|
})
|