mirror of
https://github.com/Permissionless-Software-Foundation/psf-bch-api-base.git
synced 2026-09-21 16:52:00 -07:00
feat(price): Adding price endpoints
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
/*
|
||||
Unit tests for PriceRESTController.
|
||||
*/
|
||||
|
||||
import { assert } from 'chai'
|
||||
import sinon from 'sinon'
|
||||
|
||||
import PriceRESTController from '../../../src/controllers/rest-api/price/controller.js'
|
||||
import { createMockRequest, createMockResponse } from '../mocks/controller-mocks.js'
|
||||
|
||||
describe('#price-controller.js', () => {
|
||||
let sandbox
|
||||
let mockAdapters
|
||||
let mockUseCases
|
||||
let uut
|
||||
|
||||
beforeEach(() => {
|
||||
sandbox = sinon.createSandbox()
|
||||
mockAdapters = {}
|
||||
mockUseCases = {
|
||||
price: {
|
||||
getBCHUSD: sandbox.stub().resolves(250.5),
|
||||
getPsffppWritePrice: sandbox.stub().resolves(0.08335233)
|
||||
}
|
||||
}
|
||||
|
||||
uut = new PriceRESTController({
|
||||
adapters: mockAdapters,
|
||||
useCases: mockUseCases
|
||||
})
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
sandbox.restore()
|
||||
})
|
||||
|
||||
describe('#constructor()', () => {
|
||||
it('should require adapters', () => {
|
||||
assert.throws(() => {
|
||||
// eslint-disable-next-line no-new
|
||||
new PriceRESTController({ useCases: mockUseCases })
|
||||
}, /Adapters library required/)
|
||||
})
|
||||
|
||||
it('should require price use cases', () => {
|
||||
assert.throws(() => {
|
||||
// eslint-disable-next-line no-new
|
||||
new PriceRESTController({ adapters: mockAdapters, useCases: {} })
|
||||
}, /Price use cases required/)
|
||||
})
|
||||
})
|
||||
|
||||
describe('#root()', () => {
|
||||
it('should return price status', async () => {
|
||||
const req = createMockRequest()
|
||||
const res = createMockResponse()
|
||||
|
||||
await uut.root(req, res)
|
||||
|
||||
assert.equal(res.statusValue, 200)
|
||||
assert.deepEqual(res.jsonData, { status: 'price' })
|
||||
})
|
||||
})
|
||||
|
||||
describe('#getBCHUSD()', () => {
|
||||
it('should return BCH USD price on success', async () => {
|
||||
const req = createMockRequest()
|
||||
const res = createMockResponse()
|
||||
|
||||
await uut.getBCHUSD(req, res)
|
||||
|
||||
assert.equal(res.statusValue, 200)
|
||||
assert.deepEqual(res.jsonData, { usd: 250.5 })
|
||||
assert.isTrue(mockUseCases.price.getBCHUSD.calledOnce)
|
||||
})
|
||||
|
||||
it('should handle errors via handleError', async () => {
|
||||
const error = new Error('API failure')
|
||||
error.status = 503
|
||||
mockUseCases.price.getBCHUSD.rejects(error)
|
||||
const req = createMockRequest()
|
||||
const res = createMockResponse()
|
||||
|
||||
await uut.getBCHUSD(req, res)
|
||||
|
||||
assert.equal(res.statusValue, 503)
|
||||
assert.deepEqual(res.jsonData, { error: 'API failure' })
|
||||
})
|
||||
})
|
||||
|
||||
describe('#getPsffppWritePrice()', () => {
|
||||
it('should return PSFFPP write price on success', async () => {
|
||||
const req = createMockRequest()
|
||||
const res = createMockResponse()
|
||||
|
||||
await uut.getPsffppWritePrice(req, res)
|
||||
|
||||
assert.equal(res.statusValue, 200)
|
||||
assert.deepEqual(res.jsonData, { writePrice: 0.08335233 })
|
||||
assert.isTrue(mockUseCases.price.getPsffppWritePrice.calledOnce)
|
||||
})
|
||||
|
||||
it('should handle errors via handleError', async () => {
|
||||
const error = new Error('PSFFPP failure')
|
||||
error.status = 500
|
||||
mockUseCases.price.getPsffppWritePrice.rejects(error)
|
||||
const req = createMockRequest()
|
||||
const res = createMockResponse()
|
||||
|
||||
await uut.getPsffppWritePrice(req, res)
|
||||
|
||||
assert.equal(res.statusValue, 500)
|
||||
assert.deepEqual(res.jsonData, { error: 'PSFFPP failure' })
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -10,6 +10,7 @@ import BlockchainRouter from '../../../src/controllers/rest-api/full-node/blockc
|
||||
import ControlRouter from '../../../src/controllers/rest-api/full-node/control/router.js'
|
||||
import DSProofRouter from '../../../src/controllers/rest-api/full-node/dsproof/router.js'
|
||||
import MiningRouter from '../../../src/controllers/rest-api/full-node/mining/router.js'
|
||||
import PriceRouter from '../../../src/controllers/rest-api/price/router.js'
|
||||
import RawTransactionsRouter from '../../../src/controllers/rest-api/full-node/rawtransactions/router.js'
|
||||
import FulcrumRouter from '../../../src/controllers/rest-api/fulcrum/router.js'
|
||||
import SlpRouter from '../../../src/controllers/rest-api/slp/router.js'
|
||||
@@ -75,6 +76,10 @@ describe('#controllers/rest-api/index.js', () => {
|
||||
getMiningInfo: () => {},
|
||||
getNetworkHashPS: () => {}
|
||||
},
|
||||
price: {
|
||||
getBCHUSD: () => {},
|
||||
getPsffppWritePrice: () => {}
|
||||
},
|
||||
rawtransactions: {
|
||||
decodeRawTransaction: () => {},
|
||||
decodeRawTransactions: () => {},
|
||||
@@ -126,6 +131,7 @@ describe('#controllers/rest-api/index.js', () => {
|
||||
const dsproofAttachStub = sandbox.stub(DSProofRouter.prototype, 'attach')
|
||||
const fulcrumAttachStub = sandbox.stub(FulcrumRouter.prototype, 'attach')
|
||||
const miningAttachStub = sandbox.stub(MiningRouter.prototype, 'attach')
|
||||
const priceAttachStub = sandbox.stub(PriceRouter.prototype, 'attach')
|
||||
const rawtransactionsAttachStub = sandbox.stub(RawTransactionsRouter.prototype, 'attach')
|
||||
const slpAttachStub = sandbox.stub(SlpRouter.prototype, 'attach')
|
||||
const restControllers = new RESTControllers({
|
||||
@@ -146,6 +152,8 @@ describe('#controllers/rest-api/index.js', () => {
|
||||
assert.equal(fulcrumAttachStub.getCall(0).args[0], app)
|
||||
assert.isTrue(miningAttachStub.calledOnce)
|
||||
assert.equal(miningAttachStub.getCall(0).args[0], app)
|
||||
assert.isTrue(priceAttachStub.calledOnce)
|
||||
assert.equal(priceAttachStub.getCall(0).args[0], app)
|
||||
assert.isTrue(rawtransactionsAttachStub.calledOnce)
|
||||
assert.equal(rawtransactionsAttachStub.getCall(0).args[0], app)
|
||||
assert.isTrue(slpAttachStub.calledOnce)
|
||||
|
||||
Reference in New Issue
Block a user