Created and connected index.js files for use-cases, adapters, and controllers

This commit is contained in:
Chris Troutner
2021-07-06 17:17:26 -07:00
parent 574e4a3d90
commit fd2cfe0b2f
15 changed files with 3635 additions and 311 deletions
+88 -9
View File
@@ -3,29 +3,108 @@
*/
// Public npm libraries
const assert = require('chai').assert
const jsonrpc = require('jsonrpc-lite')
const sinon = require('sinon')
const { v4: uid } = require('uuid')
// Set the environment variable to signal this is a test.
process.env.SVC_ENV = 'test'
// Local libraries.
const JSONRPC = require('../../../src/controllers/json-rpc')
const adapters = require('../mocks/adapters')
const UseCasesMock = require('../mocks/use-cases')
describe('#JSON RPC', () => {
let uut
let sandbox
beforeEach(() => {
uut = new JSONRPC()
sandbox = sinon.createSandbox()
const useCases = new UseCasesMock()
uut = new JSONRPC({ adapters, useCases })
})
afterEach(() => sandbox.restore())
describe('#router', () => {
it('should do something', async () => {
// const request = {
// 'users', // id
// 'getAll', // method
// {}
// }
const json = jsonrpc.request('users', 'getAll', {})
it('should exit quietly if given a random string', async () => {
const str = 'random string message'
await uut.router(str)
assert.isOk('Not throwing an error is a pass.')
})
it('should exit quietly if invalid JSON RPC message received', async () => {
const malformedRpc = '{"jsonrpc":"2.0"}'
await uut.router(malformedRpc, 'peerA')
assert.isOk('Not throwing an error is a pass.')
})
it('should return default response if routing is not possible', async () => {
const id = uid()
const json = jsonrpc.request(id, 'unknownMethod', {})
const str = JSON.stringify(json)
await uut.router(str)
const result = await uut.router(str, 'peerA')
// console.log('result: ', result)
const jsonObj = jsonrpc.parse(result.retStr)
// console.log(`jsonObj: ${JSON.stringify(jsonObj, null, 2)}`)
// Assert the expected properties exist on the returned object.
assert.property(jsonObj, 'payload')
assert.property(jsonObj, 'type')
assert.property(jsonObj.payload, 'jsonrpc')
assert.property(jsonObj.payload, 'id')
assert.property(jsonObj.payload, 'result')
assert.property(jsonObj.payload.result, 'reciever')
assert.property(jsonObj.payload.result.value, 'success')
assert.property(jsonObj.payload.result.value, 'message')
// Assert the expected values exist.
assert.equal(jsonObj.payload.id, id)
assert.equal(jsonObj.payload.result.value.success, false)
assert.equal(jsonObj.payload.result.value.status, 422)
assert.equal(
jsonObj.payload.result.value.message,
'Input does not match routing rules.'
)
})
it('should catch and handle errors', async () => {
// Force an error
sandbox.stub(uut.jsonrpc, 'parse').throws(new Error('test error'))
const malformedRpc = '{"jsonrpc":"2.0"}'
await uut.router(malformedRpc, 'peerA')
assert.isOk('Not throwing an error is a pass.')
})
it('should route to users handler', async () => {
const id = uid()
const userCall = jsonrpc.request(id, 'users', { endpoint: 'getAll' })
const jsonStr = JSON.stringify(userCall, null, 2)
// Mock the users controller.
sandbox.stub(uut.userController, 'userRouter').resolves('true')
const result = await uut.router(jsonStr, 'peerA')
// console.log(result)
const obj = JSON.parse(result.retStr)
// console.log('obj: ', obj)
assert.equal(obj.result.value, 'true')
assert.equal(obj.result.method, 'users')
assert.equal(obj.id, id)
})
})
})
+4 -1
View File
@@ -13,6 +13,8 @@ process.env.SVC_ENV = 'test'
// Local libraries.
const JSONRPC = require('../../../src/controllers/json-rpc')
const adapters = require('../mocks/adapters')
const UseCasesMock = require('../mocks/use-cases')
describe('#JSON RPC', () => {
let uut
@@ -21,7 +23,8 @@ describe('#JSON RPC', () => {
beforeEach(() => {
sandbox = sinon.createSandbox()
uut = new JSONRPC()
const useCases = new UseCasesMock()
uut = new JSONRPC({ adapters, useCases })
})
afterEach(() => sandbox.restore())
+14
View File
@@ -0,0 +1,14 @@
/*
Mocks for the Adapter library.
*/
const ipfs = {
ipfsAdapter: {
ipfs: {}
},
ipfsCoordAdapter: {
ipfsCoord: {}
}
}
module.exports = { ipfs }
+7
View File
@@ -0,0 +1,7 @@
/*
Mocks for the use cases.
*/
class UseCasesMock {}
module.exports = UseCasesMock