Improved tests for electrumx lib

This commit is contained in:
Chris Troutner
2020-04-12 19:15:45 -07:00
parent 4eadea6d88
commit d43cf6cb80
3 changed files with 86 additions and 14 deletions
+1 -1
View File
@@ -16,7 +16,7 @@
"dev": "nodemon ./dist/app.js",
"test": "npm run lint && npm run test-v3",
"lint": "standard --env mocha --fix",
"test-v3": "export NETWORK=mainnet && nyc --reporter=text mocha --timeout 60000 test/v3/electrumx.js",
"test-v3": "export NETWORK=mainnet && nyc --reporter=text mocha --timeout 60000 test/v3/",
"test:temp": "export NETWORK=mainnet && mocha --timeout 25000 test/v3/blockchain.js",
"test:integration": "mocha test/v3/integration",
"coverage": "nyc report --reporter=text-lcov | coveralls",
+5 -3
View File
@@ -120,7 +120,7 @@ class Electrum {
// Returns a promise that resolves to UTXO data for an address. Expects input
// to be a cash address, and input validation to have already been done by
// calling function.
// parent, calling function.
async _utxosFromElectrumx (address) {
try {
// Convert the address to a scripthash.
@@ -143,8 +143,10 @@ class Electrum {
return electrumResponse
} catch (err) {
// console.log('err: ', err)
// Write out error to error log.
wlogger.error('Error in elecrumx.js/_utxosFromElectrumx().')
wlogger.error('Error in elecrumx.js/_utxosFromElectrumx(): ', err)
throw err
}
}
@@ -191,7 +193,7 @@ class Electrum {
// Get data from ElectrumX server.
const electrumResponse = await _this._utxosFromElectrumx(cashAddr)
console.log(`electrumResponse: ${JSON.stringify(electrumResponse, null, 2)}`)
// console.log(`electrumResponse: ${JSON.stringify(electrumResponse, null, 2)}`)
// Pass the error message if ElectrumX reports an error.
if (Object.prototype.hasOwnProperty.call(electrumResponse, 'code')) {
+80 -10
View File
@@ -163,22 +163,31 @@ describe('#ElectrumX Router', () => {
assert.property(result, 'success')
assert.equal(result.success, false)
})
})
describe('#_utxosFromElectrumx', () => {
// Unit test only.
if (process.env.TEST === 'unit') {
it('should pass errors from ElectrumX to user', async () => {
req.params.address =
'bitcoincash:qrdka2205f4hyukutc2g0s6lykperc8nsu5u2ddpqf'
it('should pass errors from ElectrumX to user', async () => {
// Address has invalid checksum.
req.params.address =
'bitcoincash:qr69kyzha07dcecrsvjwsj4s6slnlq4r8c30lxnur2'
// Mock unit tests to prevent live network calls.
if (process.env.TEST === 'unit') {
electrumxRoute.isReady = true // Force flag.
sandbox
.stub(electrumxRoute.electrumx, 'request')
.resolves(mockData.utxos)
})
}
}
// Call the details API.
const result = await electrumxRoute.getUtxos(req, res)
// console.log(`result: ${JSON.stringify(result, null, 2)}`)
assert.property(result, 'success')
assert.equal(result.success, false)
assert.property(result, 'error')
assert.include(result.error, 'Unsupported address format')
})
it('should get balance for a single address', async () => {
req.params.address =
@@ -195,7 +204,7 @@ describe('#ElectrumX Router', () => {
// Call the details API.
const result = await electrumxRoute.getUtxos(req, res)
console.log(`result: ${JSON.stringify(result, null, 2)}`)
// console.log(`result: ${JSON.stringify(result, null, 2)}`)
assert.property(result, 'success')
assert.equal(result.success, true)
@@ -209,4 +218,65 @@ describe('#ElectrumX Router', () => {
assert.property(result.utxos[0], 'value')
})
})
describe('#_utxosFromElectrumx', () => {
it('should throw error for invalid address', async () => {
try {
// Address has invalid checksum.
const address = 'bitcoincash:qr69kyzha07dcecrsvjwsj4s6slnlq4r8c30lxnur2'
// Call the details API.
await electrumxRoute._utxosFromElectrumx(address)
assert.equal(true, false, 'Unexpected code path')
} catch (err) {
assert.include(err.message, 'Invalid checksum')
}
})
it('should return empty array for address with no utxos', async () => {
// Address has invalid checksum.
const address =
'bchtest:qqtmlpspjakqlvywae226esrcdrj9auynuwadh55uf'
// Mock unit tests to prevent live network calls.
if (process.env.TEST === 'unit') {
electrumxRoute.isReady = true // Force flag.
sandbox
.stub(electrumxRoute.electrumx, 'request')
.resolves([])
}
// Call the details API.
const result = await electrumxRoute._utxosFromElectrumx(address)
// console.log(`result: ${JSON.stringify(result, null, 2)}`)
assert.isArray(result)
assert.equal(result.length, 0)
})
it('should get balance for a single address', async () => {
const address = 'bitcoincash:qrdka2205f4hyukutc2g0s6lykperc8nsu5u2ddpqf'
// Mock unit tests to prevent live network calls.
if (process.env.TEST === 'unit') {
electrumxRoute.isReady = true // Force flag.
sandbox
.stub(electrumxRoute.electrumx, 'request')
.resolves(mockData.utxos)
}
// Call the details API.
const result = await electrumxRoute._utxosFromElectrumx(address)
// console.log(`result: ${JSON.stringify(result, null, 2)}`)
assert.isArray(result)
assert.property(result[0], 'height')
assert.property(result[0], 'tx_hash')
assert.property(result[0], 'tx_pos')
assert.property(result[0], 'value')
})
})
})