diff --git a/test/integration/chains/abc/psf-slp-indexer-integration.js b/test/integration/chains/abc/psf-slp-indexer-integration.js deleted file mode 100644 index 520c851..0000000 --- a/test/integration/chains/abc/psf-slp-indexer-integration.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - Integration tests for the psf-slp-indexer.js library, specific to the eCash - blockchain. -*/ - -// Global npm libraries -import chai from 'chai' - -// Local libraries -import BCHJS from '../../../../src/bch-js.js' -const { assert } = chai -let bchjs - -describe('#psf-slp-indexer', () => { - beforeEach(async () => { - // Introduce a delay so that the BVT doesn't trip the rate limits. - if (process.env.IS_USING_FREE_TIER) await sleep(3000) - - bchjs = new BCHJS() - }) - - describe('#balance', () => { - it('should get token balance for an ecash address', async () => { - const addr = 'ecash:qr5c4hfy52zn87484cucvzle5pljz0gtr5vhtw9z09' - - const result = await bchjs.PsfSlpIndexer.balance(addr) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.property(result.balance, 'utxos') - assert.property(result.balance, 'txs') - assert.property(result.balance, 'balances') - }) - }) -}) - -// Promise-based sleep function -function sleep (ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -} diff --git a/test/integration/chains/abc/rawtransaction.js b/test/integration/chains/abc/rawtransaction.js deleted file mode 100644 index cbd3dc9..0000000 --- a/test/integration/chains/abc/rawtransaction.js +++ /dev/null @@ -1,73 +0,0 @@ -/* - Integration tests for the bchjs. Only covers calls made to - rest.bitcoin.com. - - TODO -*/ - -import chai from 'chai' -import BCHJS from '../../../../src/bch-js.js' - -// Inspect utility used for debugging. -import util from 'util' -const assert = chai.assert -const bchjs = new BCHJS({ restURL: process.env.RESTURL }) -util.inspect.defaultOptions = { - showHidden: true, - colors: true, - depth: 3 -} - -describe('#rawtransaction', () => { - beforeEach(async () => { - if (process.env.IS_USING_FREE_TIER) await sleep(1500) - }) - - /* - Testing sentRawTransaction isn't really possible with an integration test, - as the endpoint really needs an e2e test to be properly tested. The tests - below expect error messages returned from the server, but at least test - that the server is responding on those endpoints, and responds consistently. - */ - describe('sendRawTransaction', () => { - it('should send a single transaction hex', async () => { - try { - const hex = - '01000000013ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000006a4730440220540986d1c58d6e76f8f05501c520c38ce55393d0ed7ed3c3a82c69af04221232022058ea43ed6c05fec0eccce749a63332ed4525460105346f11108b9c26df93cd72012103083dfc5a0254613941ddc91af39ff90cd711cdcde03a87b144b883b524660c39ffffffff01807c814a000000001976a914d7e7c4e0b70eaa67ceff9d2823d1bbb9f6df9a5188ac00000000' - - await bchjs.RawTransactions.sendRawTransaction(hex) - // console.log(`result ${JSON.stringify(result, null, 2)}`) - - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - // console.log(`err: ${util.inspect(err)}`) - - assert.hasAllKeys(err, ['error']) - assert.include(err.error, 'bad-txns-inputs-missingorspent') - // assert.include(err.error, 'Missing inputs') - } - }) - - it('should send an array of tx hexes', async () => { - try { - const hexes = [ - '01000000013ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000006a4730440220540986d1c58d6e76f8f05501c520c38ce55393d0ed7ed3c3a82c69af04221232022058ea43ed6c05fec0eccce749a63332ed4525460105346f11108b9c26df93cd72012103083dfc5a0254613941ddc91af39ff90cd711cdcde03a87b144b883b524660c39ffffffff01807c814a000000001976a914d7e7c4e0b70eaa67ceff9d2823d1bbb9f6df9a5188ac00000000', - '01000000013ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000006a4730440220540986d1c58d6e76f8f05501c520c38ce55393d0ed7ed3c3a82c69af04221232022058ea43ed6c05fec0eccce749a63332ed4525460105346f11108b9c26df93cd72012103083dfc5a0254613941ddc91af39ff90cd711cdcde03a87b144b883b524660c39ffffffff01807c814a000000001976a914d7e7c4e0b70eaa67ceff9d2823d1bbb9f6df9a5188ac00000000' - ] - - const result = await bchjs.RawTransactions.sendRawTransaction(hexes) - console.log(`result ${JSON.stringify(result, null, 2)}`) - } catch (err) { - // console.log(`err: ${util.inspect(err)}`) - - assert.hasAllKeys(err, ['error']) - assert.include(err.error, 'bad-txns-inputs-missingorspent') - // assert.include(err.error, 'Missing inputs') - } - }) - }) -}) - -function sleep (ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -} diff --git a/test/integration/chains/abc/utxo-integration.js b/test/integration/chains/abc/utxo-integration.js deleted file mode 100644 index 1b3afbe..0000000 --- a/test/integration/chains/abc/utxo-integration.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - Integration tests for the utxo.js library. -*/ - -import chai from 'chai' - -import BCHJS from '../../../../src/bch-js.js' -const { assert } = chai -const bchjs = new BCHJS() - -describe('#UTXO', () => { - beforeEach(async () => { - // sandbox = sinon.createSandbox() - - if (process.env.IS_USING_FREE_TIER) await sleep(1500) - }) - - describe('#get', () => { - it('should get hydrated and filtered UTXOs for an address', async () => { - const addr = 'ecash:qr5c4hfy52zn87484cucvzle5pljz0gtr5vhtw9z09' - // const addr = 'simpleledger:qzv3zz2trz0xgp6a96lu4m6vp2nkwag0kvyucjzqt9' - - const result = await bchjs.Utxo.get(addr) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - // assert.isArray(result) - assert.property(result, 'address') - assert.property(result, 'bchUtxos') - assert.property(result, 'nullUtxos') - assert.property(result, 'slpUtxos') - assert.isArray(result.bchUtxos) - assert.isArray(result.nullUtxos) - }) - }) -}) - -function sleep (ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -} diff --git a/test/integration/chains/testnet/blockchain.js b/test/integration/chains/testnet/blockchain.js deleted file mode 100644 index e72d3e2..0000000 --- a/test/integration/chains/testnet/blockchain.js +++ /dev/null @@ -1,260 +0,0 @@ -/* - Integration tests for the bchjs. Only covers calls made to - rest.bitcoin.com. - - TODO - - getMempoolEntry() only works on TXs in the mempool, so it needs to be part - of an e2e test to be properly tested. -*/ - -import chai from 'chai' -// if (process.env.RESTURL) RESTURL = process.env.RESTURL - -import BCHJS from '../../../../src/bch-js.js' - -// Inspect utility used for debugging. -import util from 'util' -const assert = chai.assert - -const RESTURL = process.env.RESTURL - ? process.env.RESTURL - : 'https://testnet3.fullstack.cash/v5/' -// const bchjs = new BCHJS({ restURL: `https://testnet.bchjs.cash/v5/` }) -const bchjs = new BCHJS({ restURL: RESTURL, apiToken: process.env.BCHJSTOKEN }) -util.inspect.defaultOptions = { - showHidden: true, - colors: true, - depth: 3 -} - -describe('#blockchain', () => { - beforeEach(async () => { - if (process.env.IS_USING_FREE_TIER) await sleep(1500) - }) - - describe('#getBestBlockHash', () => { - it('should GET best block hash', async () => { - const result = await bchjs.Blockchain.getBestBlockHash() - // console.log(`result: ${util.inspect(result)}`) - - assert.isString(result) - assert.equal(result.length, 64, 'Specific hash length') - }) - }) - - describe('#getBlockHeader', () => { - it('should GET block header for a single hash', async () => { - const hash = - '000000000000c57178ace90210289e6b5383134c5b5306e1cdd8395176e10aaf' - - const result = await bchjs.Blockchain.getBlockHeader(hash) - - assert.hasAllKeys(result, [ - 'hash', - 'confirmations', - 'height', - 'version', - 'versionHex', - 'merkleroot', - 'time', - 'mediantime', - 'nonce', - 'bits', - 'difficulty', - 'chainwork', - 'previousblockhash', - 'nextblockhash', - 'nTx' - ]) - }) - - it('should GET block headers for an array of hashes', async () => { - const hash = [ - '000000000000c57178ace90210289e6b5383134c5b5306e1cdd8395176e10aaf', - '00000000000b7db4cbae48d852fcbef32f728014582094ad613fe12af6600ff2' - ] - - const result = await bchjs.Blockchain.getBlockHeader(hash) - - assert.isArray(result) - assert.hasAllKeys(result[0], [ - 'hash', - 'confirmations', - 'height', - 'version', - 'versionHex', - 'merkleroot', - 'time', - 'mediantime', - 'nonce', - 'bits', - 'difficulty', - 'chainwork', - 'previousblockhash', - 'nextblockhash', - 'nTx' - ]) - }) - - it('should throw error on array size rate limit', async () => { - try { - const data = [] - for (let i = 0; i < 25; i++) { - data.push( - '00000000000b7db4cbae48d852fcbef32f728014582094ad613fe12af6600ff2' - ) - } - - await bchjs.Blockchain.getBlockHeader(data) - - // console.log(`result: ${util.inspect(result)}`) - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - assert.hasAnyKeys(err, ['error']) - assert.include(err.error, 'Array too large') - } - }) - }) - - describe('#getMempoolEntry', () => { - /* - // To run this test, the txid must be unconfirmed. - const txid = - "defea04c38ee00cf73ad402984714ed22dc0dd99b2ae5cb50d791d94343ba79b" - - it(`should GET single mempool entry`, async () => { - const result = await bchjs.Blockchain.getMempoolEntry(txid) - //console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.hasAnyKeys(result, [ - "size", - "fee", - "modifiedfee", - "time", - "height", - "startingpriority", - "currentpriority", - "descendantcount", - "descendantsize", - "descendantfees", - "ancestorcount", - "ancestorsize", - "ancestorfees", - "depends" - ]) - }) - - it(`should get an array of mempool entries`, async () => { - const result = await bchjs.Blockchain.getMempoolEntry([txid, txid]) - console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.isArray(result) - assert.hasAnyKeys(result[0], [ - "size", - "fee", - "modifiedfee", - "time", - "height", - "startingpriority", - "currentpriority", - "descendantcount", - "descendantsize", - "descendantfees", - "ancestorcount", - "ancestorsize", - "ancestorfees", - "depends" - ]) - }) - */ - - it('should throw an error if txid is not in mempool', async () => { - try { - const txid = - '1f121fb6a33f48cd426dde06aa20ce589dd97becabb835a8d33071cbf40c7d04' - - await bchjs.Blockchain.getMempoolEntry(txid) - - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - // console.log(`err: ${util.inspect(err)}`) - assert.hasAnyKeys(err, ['error']) - assert.include(err.error, 'Transaction not in mempool') - } - }) - }) - - describe('#getTxOutProof', () => { - it('should get single tx out proof', async () => { - const txid = - '1f121fb6a33f48cd426dde06aa20ce589dd97becabb835a8d33071cbf40c7d04' - - const result = await bchjs.Blockchain.getTxOutProof(txid) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.isString(result) - }) - - it('should get an array of tx out proofs', async () => { - const txid = [ - '1f121fb6a33f48cd426dde06aa20ce589dd97becabb835a8d33071cbf40c7d04', - 'fc4f696c0ebb3d0994b3975f57d85be75ef752b9fd52c17e361ec3be2fa3e752' - ] - - const result = await bchjs.Blockchain.getTxOutProof(txid) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.isArray(result) - assert.isString(result[0]) - }) - }) - - describe('#verifyTxOutProof', () => { - const mockTxOutProof = - '00000020ac86ce8f2bda235c0dc135d18f6a777c44b121e8f41db8a51ca65000000000000cd4de3c49337712f3a1092c47c3bf73ec2f9b1cfd289ee991ede0b6eab4df229d5b8c5dffff001d82ce005b0700000003ec55d9142eac2c1d2229e5af24898b2590c111b62e2787fa1998d3d713fd432fd557124ed758fa156a6cdc6d317d5575aec2b86dfb159c62ecb4743f28bef1cb52e7a32fbec31e367ec152fdb952f75ee75bd8575f97b394093dbb0e6c694ffc0135' - - it('should verify a single proof', async () => { - const result = await bchjs.Blockchain.verifyTxOutProof(mockTxOutProof) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.isArray(result) - assert.isString(result[0]) - assert.equal( - result[0], - 'fc4f696c0ebb3d0994b3975f57d85be75ef752b9fd52c17e361ec3be2fa3e752' - ) - }) - - it('should verify an array of proofs', async () => { - const proofs = [mockTxOutProof, mockTxOutProof] - const result = await bchjs.Blockchain.verifyTxOutProof(proofs) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.isArray(result) - assert.isString(result[0]) - assert.equal( - result[0], - 'fc4f696c0ebb3d0994b3975f57d85be75ef752b9fd52c17e361ec3be2fa3e752' - ) - }) - - it('should throw error on array size rate limit', async () => { - try { - const data = [] - for (let i = 0; i < 25; i++) data.push(mockTxOutProof) - - const result = await bchjs.Blockchain.verifyTxOutProof(data) - - console.log(`result: ${util.inspect(result)}`) - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - assert.hasAnyKeys(err, ['error']) - assert.include(err.error, 'Array too large') - } - }) - }) -}) - -function sleep (ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -} diff --git a/test/integration/chains/testnet/control.js b/test/integration/chains/testnet/control.js deleted file mode 100644 index dab57b7..0000000 --- a/test/integration/chains/testnet/control.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - Integration tests for bchjs control library. -*/ - -import chai from 'chai' - -import BCHJS from '../../../../src/bch-js.js' -const assert = chai.assert - -const RESTURL = process.env.RESTURL - ? process.env.RESTURL - : 'https://testnet3.fullstack.cash/v5/' -const bchjs = new BCHJS({ restURL: RESTURL, apiToken: process.env.BCHJSTOKEN }) - -describe('#control', () => { - beforeEach(async () => { - if (process.env.IS_USING_FREE_TIER) await sleep(1500) - }) - - describe('#getNetworkInfo', () => { - it('should get info on the full node', async () => { - const result = await bchjs.Control.getNetworkInfo() - console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.property(result, 'version') - }) - }) -}) - -function sleep (ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -} diff --git a/test/integration/chains/testnet/electrumx.js b/test/integration/chains/testnet/electrumx.js deleted file mode 100644 index 2857556..0000000 --- a/test/integration/chains/testnet/electrumx.js +++ /dev/null @@ -1,376 +0,0 @@ -import chai from 'chai' -import sinon from 'sinon' -import util from 'util' - -import BCHJS from '../../../../src/bch-js.js' -const assert = chai.assert - -const RESTURL = process.env.RESTURL - ? process.env.RESTURL - : 'https://testnet3.fullstack.cash/v5/' -const bchjs = new BCHJS({ restURL: RESTURL, apiToken: process.env.BCHJSTOKEN }) - -describe('#ElectrumX', () => { - let sandbox - - beforeEach(async () => { - sandbox = sinon.createSandbox() - - if (process.env.IS_USING_FREE_TIER) await sleep(1500) - }) - - afterEach(() => sandbox.restore()) - - describe('#utxo', () => { - it('should GET utxos for a single address', async () => { - const addr = 'bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2' - - const result = await bchjs.Electrumx.utxo(addr) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.property(result, 'success') - assert.equal(result.success, true) - - assert.property(result, 'utxos') - assert.isArray(result.utxos) - - assert.property(result.utxos[0], 'height') - assert.property(result.utxos[0], 'tx_hash') - assert.property(result.utxos[0], 'tx_pos') - assert.property(result.utxos[0], 'value') - }) - - it('should POST utxo details for an array of addresses', async () => { - const addr = [ - 'bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2', - 'bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2' - ] - - const result = await bchjs.Electrumx.utxo(addr) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.property(result, 'success') - assert.equal(result.success, true) - - assert.property(result, 'utxos') - assert.isArray(result.utxos) - - assert.property(result.utxos[0], 'utxos') - assert.isArray(result.utxos[0].utxos) - assert.property(result.utxos[0], 'address') - - assert.property(result.utxos[0].utxos[0], 'height') - assert.property(result.utxos[0].utxos[0], 'tx_hash') - assert.property(result.utxos[0].utxos[0], 'tx_pos') - assert.property(result.utxos[0].utxos[0], 'value') - }) - - it('should throw error on array size rate limit', async () => { - try { - const addr = [] - for (let i = 0; i < 25; i++) { - addr.push('bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2') - } - - // const result = await bchjs.Electrumx.utxo(addr) - // console.log(`result: ${util.inspect(result)}`) - await bchjs.Electrumx.utxo(addr) - - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - assert.hasAnyKeys(err, ['error']) - assert.include(err.error, 'Array too large') - } - }) - }) - - describe('#balance', () => { - it('should GET balance for a single address', async () => { - const addr = 'bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2' - - const result = await bchjs.Electrumx.balance(addr) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.property(result, 'success') - assert.equal(result.success, true) - - assert.property(result, 'balance') - assert.property(result.balance, 'confirmed') - assert.property(result.balance, 'unconfirmed') - }) - - it('should POST request for balances for an array of addresses', async () => { - const addr = [ - 'bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2', - 'bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2' - ] - - const result = await bchjs.Electrumx.balance(addr) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.property(result, 'success') - assert.equal(result.success, true) - - assert.property(result, 'balances') - assert.isArray(result.balances) - - assert.property(result.balances[0], 'address') - assert.property(result.balances[0], 'balance') - assert.property(result.balances[0].balance, 'confirmed') - assert.property(result.balances[0].balance, 'unconfirmed') - }) - - it('should throw error on array size rate limit', async () => { - try { - const addr = [] - for (let i = 0; i < 25; i++) { - addr.push('bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2') - } - - const result = await bchjs.Electrumx.balance(addr) - - console.log(`result: ${util.inspect(result)}`) - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - assert.hasAnyKeys(err, ['error']) - assert.include(err.error, 'Array too large') - } - }) - }) - - describe('#transactions', () => { - it('should GET transaction history for a single address', async () => { - const addr = 'bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2' - - const result = await bchjs.Electrumx.transactions(addr) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.property(result, 'success') - assert.equal(result.success, true) - - assert.property(result, 'transactions') - assert.isArray(result.transactions) - assert.property(result.transactions[0], 'height') - assert.property(result.transactions[0], 'tx_hash') - }) - - it('should POST request for transaction history for an array of addresses', async () => { - const addr = [ - 'bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2', - 'bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2' - ] - - const result = await bchjs.Electrumx.transactions(addr) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.property(result, 'success') - assert.equal(result.success, true) - - assert.property(result, 'transactions') - assert.isArray(result.transactions) - - assert.property(result.transactions[0], 'address') - assert.property(result.transactions[0], 'transactions') - assert.isArray(result.transactions[0].transactions) - assert.property(result.transactions[0].transactions[0], 'height') - assert.property(result.transactions[0].transactions[0], 'tx_hash') - }) - - it('should throw error on array size rate limit', async () => { - try { - const addr = [] - for (let i = 0; i < 25; i++) { - addr.push('bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2') - } - - const result = await bchjs.Electrumx.transactions(addr) - - console.log(`result: ${util.inspect(result)}`) - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - assert.hasAnyKeys(err, ['error']) - assert.include(err.error, 'Array too large') - } - }) - }) - - describe('#unconfirmed', () => { - // These tests won't work because unconfirmed transactions are transient in nature. - /* - it(`should GET unconfirmed UTXOs (mempool) for a single address`, async () => { - const addr = "bchtest:qp25k20dgcljrz4hkdz43partam3j5httyprjp23qd" - - const result = await bchjs.Electrumx.unconfirmed(addr) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.property(result, "success") - assert.equal(result.success, true) - - assert.property(result, "utxos") - assert.isArray(result.utxos) - - assert.property(result.utxos[0], "height") - assert.property(result.utxos[0], "tx_hash") - assert.property(result.utxos[0], "fee") - }) - - it(`should POST unconfirmed UTXO details for an array of addresses`, async () => { - const addr = [ - "bchtest:qp25k20dgcljrz4hkdz43partam3j5httyprjp23qd", - "bchtest:qpkl3xylrjx4jup6m66e7zg7whlaucsxeudxeqawdj" - ] - - const result = await bchjs.Electrumx.unconfirmed(addr) - //console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.property(result, "success") - assert.equal(result.success, true) - - assert.property(result, "utxos") - assert.isArray(result.utxos) - - assert.property(result.utxos[0], "utxos") - assert.isArray(result.utxos[0].utxos) - assert.property(result.utxos[0], "address") - - assert.property(result.utxos[0].utxos[0], "height") - assert.property(result.utxos[0].utxos[0], "tx_hash") - assert.property(result.utxos[0].utxos[0], "fee") - }) - */ - - it('should throw error on array size rate limit', async () => { - try { - const addr = [] - for (let i = 0; i < 25; i++) { - addr.push('bchtest:qrvn2n228aa39xupcw9jw0d3fj8axxky656e4j62z2') - } - - await bchjs.Electrumx.unconfirmed(addr) - // console.log(`result: ${util.inspect(result)}`) - - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - assert.hasAnyKeys(err, ['error']) - assert.include(err.error, 'Array too large') - } - }) - }) - - describe('#blockHeader', () => { - it('should GET block headers for given height and count', async () => { - const height = 42 - const count = 2 - - const result = await bchjs.Electrumx.blockHeader(height, count) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - assert.property(result, 'success') - assert.equal(result.success, true) - - assert.property(result, 'headers') - assert.isArray(result.headers) - assert.equal(result.headers.length, 2) - }) - - it('should GET block headers for given height with default count = 1', async () => { - const height = 42 - - const result = await bchjs.Electrumx.blockHeader(height) - assert.property(result, 'success') - assert.equal(result.success, true) - - assert.property(result, 'headers') - assert.isArray(result.headers) - assert.equal(result.headers.length, 1) - }) - }) - - describe('#txData', () => { - it('should GET details for a single transaction', async () => { - const txid = - '76d2ee0ebd8b978742f6478ff9a12f478c34e4cee0a2b919059101d961bd01ee' - - const result = await bchjs.Electrumx.txData(txid) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.property(result, 'success') - assert.equal(result.success, true) - - assert.property(result, 'details') - assert.isObject(result.details) - - assert.property(result.details, 'blockhash') - assert.property(result.details, 'hash') - assert.property(result.details, 'hex') - assert.property(result.details, 'vin') - assert.property(result.details, 'vout') - assert.equal(result.details.hash, txid) - }) - - it('should POST details for an array of transactions', async () => { - const txids = [ - '76d2ee0ebd8b978742f6478ff9a12f478c34e4cee0a2b919059101d961bd01ee', - '76d2ee0ebd8b978742f6478ff9a12f478c34e4cee0a2b919059101d961bd01ee' - ] - - const result = await bchjs.Electrumx.txData(txids) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.property(result, 'success') - assert.equal(result.success, true) - - assert.property(result, 'transactions') - assert.isArray(result.transactions) - - assert.property(result.transactions[0], 'txid') - assert.property(result.transactions[0], 'details') - - assert.property(result.transactions[0].details, 'blockhash') - assert.property(result.transactions[0].details, 'hash') - assert.property(result.transactions[0].details, 'hex') - assert.property(result.transactions[0].details, 'vin') - assert.property(result.transactions[0].details, 'vout') - }) - - it('should throw error on array size rate limit', async () => { - try { - const txids = [] - for (let i = 0; i < 25; i++) { - txids.push( - '76d2ee0ebd8b978742f6478ff9a12f478c34e4cee0a2b919059101d961bd01ee' - ) - } - - await bchjs.Electrumx.txData(txids) - - // console.log(`result: ${util.inspect(result)}`) - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - assert.hasAnyKeys(err, ['error']) - assert.include(err.error, 'Array too large') - } - }) - }) - - describe('#broadcast', () => { - it('should broadcast a single transaction', async () => { - const txHex = - '020000000265d13ef402840c8a51f39779afb7ae4d49e4b0a3c24a3d0e7742038f2c679667010000006441dd1dd72770cadede1a7fd0363574846c48468a398ddfa41a9677c74cac8d2652b682743725a3b08c6c2021a629011e11a264d9036e9d5311e35b5f4937ca7b4e4121020797d8fd4d2fa6fd7cdeabe2526bfea2b90525d6e8ad506ec4ee3c53885aa309ffffffff65d13ef402840c8a51f39779afb7ae4d49e4b0a3c24a3d0e7742038f2c679667000000006441347d7f218c11c04487c1ad8baac28928fb10e5054cd4494b94d078cfa04ccf68e064fb188127ff656c0b98e9ce87f036d183925d0d0860605877d61e90375f774121028a53f95eb631b460854fc836b2e5d31cad16364b4dc3d970babfbdcc3f2e4954ffffffff035ac355000000000017a914189ce02e332548f4804bac65cba68202c9dbf822878dfd0800000000001976a914285bb350881b21ac89724c6fb6dc914d096cd53b88acf9ef3100000000001976a91445f1f1c4a9b9419a5088a3e9c24a293d7a150e6488ac00000000' - - try { - await bchjs.Electrumx.broadcast(txHex) - } catch (err) { - assert.property(err, 'success') - assert.equal(err.success, false) - assert.include( - err.error.error, - 'the transaction was rejected by network rules' - ) - } - }) - }) -}) - -function sleep (ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -} diff --git a/test/integration/chains/testnet/rawtransaction.js b/test/integration/chains/testnet/rawtransaction.js deleted file mode 100644 index ca88fd1..0000000 --- a/test/integration/chains/testnet/rawtransaction.js +++ /dev/null @@ -1,296 +0,0 @@ -/* - Integration tests for the bchjs. Only covers calls made to - rest.bitcoin.com. - - TODO -*/ - -import chai from 'chai' -// if (process.env.RESTURL) RESTURL = process.env.RESTURL - -import BCHJS from '../../../../src/bch-js.js' - -// Inspect utility used for debugging. -import util from 'util' -const assert = chai.assert - -const RESTURL = process.env.RESTURL - ? process.env.RESTURL - : 'https://testnet3.fullstack.cash/v5/' -// const bchjs = new BCHJS({ restURL: `https://testnet.bchjs.cash/v5/` }) -const bchjs = new BCHJS({ restURL: RESTURL, apiToken: process.env.BCHJSTOKEN }) -util.inspect.defaultOptions = { - showHidden: true, - colors: true, - depth: 3 -} - -describe('#rawtransaction', () => { - beforeEach(async () => { - if (process.env.IS_USING_FREE_TIER) await sleep(1500) - }) - - describe('#decodeRawTransaction', () => { - it('should decode tx for a single hex', async () => { - const hex = - '0200000001b9b598d7d6d72fc486b2b3a3c03c79b5bade6ec9a77ced850515ab5e64edcc21010000006b483045022100a7b1b08956abb8d6f322aa709d8583c8ea492ba0585f1a6f4f9983520af74a5a0220411aee4a9a54effab617b0508c504c31681b15f9b187179b4874257badd4139041210360cfc66fdacb650bc4c83b4e351805181ee696b7d5ab4667c57b2786f51c413dffffffff0210270000000000001976a914eb4b180def88e3f5625b2d8ae2c098ff7d85f66488ac786e9800000000001976a914eb4b180def88e3f5625b2d8ae2c098ff7d85f66488ac00000000' - - const result = await bchjs.RawTransactions.decodeRawTransaction(hex) - // console.log(`result ${JSON.stringify(result, null, 2)}`) - - assert.hasAnyKeys(result, [ - 'txid', - 'hash', - 'size', - 'version', - 'locktime', - 'vin', - 'vout' - ]) - assert.isArray(result.vin) - assert.isArray(result.vout) - }) - - it('should decode an array of tx hexes', async () => { - const hexes = [ - '0200000001b9b598d7d6d72fc486b2b3a3c03c79b5bade6ec9a77ced850515ab5e64edcc21010000006b483045022100a7b1b08956abb8d6f322aa709d8583c8ea492ba0585f1a6f4f9983520af74a5a0220411aee4a9a54effab617b0508c504c31681b15f9b187179b4874257badd4139041210360cfc66fdacb650bc4c83b4e351805181ee696b7d5ab4667c57b2786f51c413dffffffff0210270000000000001976a914eb4b180def88e3f5625b2d8ae2c098ff7d85f66488ac786e9800000000001976a914eb4b180def88e3f5625b2d8ae2c098ff7d85f66488ac00000000', - '0200000001b9b598d7d6d72fc486b2b3a3c03c79b5bade6ec9a77ced850515ab5e64edcc21010000006b483045022100a7b1b08956abb8d6f322aa709d8583c8ea492ba0585f1a6f4f9983520af74a5a0220411aee4a9a54effab617b0508c504c31681b15f9b187179b4874257badd4139041210360cfc66fdacb650bc4c83b4e351805181ee696b7d5ab4667c57b2786f51c413dffffffff0210270000000000001976a914eb4b180def88e3f5625b2d8ae2c098ff7d85f66488ac786e9800000000001976a914eb4b180def88e3f5625b2d8ae2c098ff7d85f66488ac00000000' - ] - - const result = await bchjs.RawTransactions.decodeRawTransaction(hexes) - // console.log(`result ${JSON.stringify(result, null, 2)}`) - - assert.isArray(result) - assert.hasAnyKeys(result[0], [ - 'txid', - 'hash', - 'size', - 'version', - 'locktime', - 'vin', - 'vout' - ]) - assert.isArray(result[0].vin) - assert.isArray(result[0].vout) - }) - - it('should throw error on array size rate limit', async () => { - try { - const data = [] - for (let i = 0; i < 25; i++) { - data.push( - '0200000001b9b598d7d6d72fc486b2b3a3c03c79b5bade6ec9a77ced850515ab5e64edcc21010000006b483045022100a7b1b08956abb8d6f322aa709d8583c8ea492ba0585f1a6f4f9983520af74a5a0220411aee4a9a54effab617b0508c504c31681b15f9b187179b4874257badd4139041210360cfc66fdacb650bc4c83b4e351805181ee696b7d5ab4667c57b2786f51c413dffffffff0210270000000000001976a914eb4b180def88e3f5625b2d8ae2c098ff7d85f66488ac786e9800000000001976a914eb4b180def88e3f5625b2d8ae2c098ff7d85f66488ac00000000' - ) - } - - const result = await bchjs.RawTransactions.decodeRawTransaction(data) - - console.log(`result: ${util.inspect(result)}`) - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - assert.hasAnyKeys(err, ['error']) - assert.include(err.error, 'Array too large') - } - }) - }) - - describe('#getRawTransaction', () => { - it('should decode a single txid, with concise output', async () => { - const txid = - '1f121fb6a33f48cd426dde06aa20ce589dd97becabb835a8d33071cbf40c7d04' - const verbose = false - - const result = await bchjs.RawTransactions.getRawTransaction( - txid, - verbose - ) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.isString(result) - }) - - it('should decode a single txid, with verbose output', async () => { - const txid = - '1f121fb6a33f48cd426dde06aa20ce589dd97becabb835a8d33071cbf40c7d04' - const verbose = true - - const result = await bchjs.RawTransactions.getRawTransaction( - txid, - verbose - ) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.hasAnyKeys(result, [ - 'hex', - 'txid', - 'hash', - 'size', - 'version', - 'locktime', - 'vin', - 'vout', - 'blockhash', - 'confirmations', - 'time', - 'blocktime' - ]) - assert.isArray(result.vin) - assert.isArray(result.vout) - }) - - it('should decode an array of txids, with a concise output', async () => { - const txid = [ - '1f121fb6a33f48cd426dde06aa20ce589dd97becabb835a8d33071cbf40c7d04', - '1f121fb6a33f48cd426dde06aa20ce589dd97becabb835a8d33071cbf40c7d04' - ] - const verbose = false - - const result = await bchjs.RawTransactions.getRawTransaction( - txid, - verbose - ) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.isArray(result) - assert.isString(result[0]) - }) - - it('should decode an array of txids, with a verbose output', async () => { - const txid = [ - '1f121fb6a33f48cd426dde06aa20ce589dd97becabb835a8d33071cbf40c7d04', - '1f121fb6a33f48cd426dde06aa20ce589dd97becabb835a8d33071cbf40c7d04' - ] - const verbose = true - - const result = await bchjs.RawTransactions.getRawTransaction( - txid, - verbose - ) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.isArray(result) - assert.hasAnyKeys(result[0], [ - 'hex', - 'txid', - 'hash', - 'size', - 'version', - 'locktime', - 'vin', - 'vout', - 'blockhash', - 'confirmations', - 'time', - 'blocktime' - ]) - assert.isArray(result[0].vin) - assert.isArray(result[0].vout) - }) - - it('should throw error on array size limit', async () => { - try { - const dataMock = - '1f121fb6a33f48cd426dde06aa20ce589dd97becabb835a8d33071cbf40c7d04' - const data = [] - for (let i = 0; i < 25; i++) data.push(dataMock) - - const result = await bchjs.RawTransactions.getRawTransaction(data) - - console.log(`result: ${util.inspect(result)}`) - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - assert.hasAnyKeys(err, ['error']) - assert.include(err.error, 'Array too large') - } - }) - }) - - describe('#decodeScript', () => { - it('should decode script for a single hex', async () => { - const hex = - '4830450221009a51e00ec3524a7389592bc27bea4af5104a59510f5f0cfafa64bbd5c164ca2e02206c2a8bbb47eabdeed52f17d7df668d521600286406930426e3a9415fe10ed592012102e6e1423f7abde8b70bca3e78a7d030e5efabd3eb35c19302542b5fe7879c1a16' - - const result = await bchjs.RawTransactions.decodeScript(hex) - // console.log(`result ${JSON.stringify(result, null, 2)}`) - - assert.hasAllKeys(result, ['asm', 'type', 'p2sh']) - }) - - // CT 2/20/19 - Waiting for this PR to be merged complete the test: - // https://github.com/Bitcoin-com/rest.bitcoin.com/pull/312 - /* - it("should decode an array of tx hexes", async () => { - const hexes = [ - "4830450221009a51e00ec3524a7389592bc27bea4af5104a59510f5f0cfafa64bbd5c164ca2e02206c2a8bbb47eabdeed52f17d7df668d521600286406930426e3a9415fe10ed592012102e6e1423f7abde8b70bca3e78a7d030e5efabd3eb35c19302542b5fe7879c1a16", - "4830450221009a51e00ec3524a7389592bc27bea4af5104a59510f5f0cfafa64bbd5c164ca2e02206c2a8bbb47eabdeed52f17d7df668d521600286406930426e3a9415fe10ed592012102e6e1423f7abde8b70bca3e78a7d030e5efabd3eb35c19302542b5fe7879c1a16" - ] - - const result = await bchjs.RawTransactions.decodeScript(hexes) - console.log(`result ${JSON.stringify(result, null, 2)}`) - }) -*/ - }) - - /* - Testing sentRawTransaction isn't really possible with an integration test, - as the endpoint really needs an e2e test to be properly tested. The tests - below expect error messages returned from the server, but at least test - that the server is responding on those endpoints, and responds consistently. - */ - describe('sendRawTransaction', () => { - it('should send a single transaction hex', async () => { - try { - const hex = - '01000000013ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000006a4730440220540986d1c58d6e76f8f05501c520c38ce55393d0ed7ed3c3a82c69af04221232022058ea43ed6c05fec0eccce749a63332ed4525460105346f11108b9c26df93cd72012103083dfc5a0254613941ddc91af39ff90cd711cdcde03a87b144b883b524660c39ffffffff01807c814a000000001976a914d7e7c4e0b70eaa67ceff9d2823d1bbb9f6df9a5188ac00000000' - - await bchjs.RawTransactions.sendRawTransaction(hex) - // console.log(`result ${JSON.stringify(result, null, 2)}`) - - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - // console.log(`err: ${util.inspect(err)}`) - - assert.hasAllKeys(err, ['error']) - assert.include(err.error, 'Missing inputs') - } - }) - - it('should send an array of tx hexes', async () => { - try { - const hexes = [ - '01000000013ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000006a4730440220540986d1c58d6e76f8f05501c520c38ce55393d0ed7ed3c3a82c69af04221232022058ea43ed6c05fec0eccce749a63332ed4525460105346f11108b9c26df93cd72012103083dfc5a0254613941ddc91af39ff90cd711cdcde03a87b144b883b524660c39ffffffff01807c814a000000001976a914d7e7c4e0b70eaa67ceff9d2823d1bbb9f6df9a5188ac00000000', - '01000000013ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000006a4730440220540986d1c58d6e76f8f05501c520c38ce55393d0ed7ed3c3a82c69af04221232022058ea43ed6c05fec0eccce749a63332ed4525460105346f11108b9c26df93cd72012103083dfc5a0254613941ddc91af39ff90cd711cdcde03a87b144b883b524660c39ffffffff01807c814a000000001976a914d7e7c4e0b70eaa67ceff9d2823d1bbb9f6df9a5188ac00000000' - ] - - const result = await bchjs.RawTransactions.sendRawTransaction(hexes) - console.log(`result ${JSON.stringify(result, null, 2)}`) - } catch (err) { - // console.log(`err: ${util.inspect(err)}`) - - assert.hasAllKeys(err, ['error']) - assert.include(err.error, 'Missing inputs') - } - }) - - it('should throw error on array size rate limit', async () => { - try { - const dataMock = - '01000000013ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000006a4730440220540986d1c58d6e76f8f05501c520c38ce55393d0ed7ed3c3a82c69af04221232022058ea43ed6c05fec0eccce749a63332ed4525460105346f11108b9c26df93cd72012103083dfc5a0254613941ddc91af39ff90cd711cdcde03a87b144b883b524660c39ffffffff01807c814a000000001976a914d7e7c4e0b70eaa67ceff9d2823d1bbb9f6df9a5188ac00000000' - const data = [] - for (let i = 0; i < 25; i++) data.push(dataMock) - - const result = await bchjs.RawTransactions.sendRawTransaction(data) - - console.log(`result: ${util.inspect(result)}`) - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - assert.hasAnyKeys(err, ['error']) - assert.include(err.error, 'Array too large') - } - }) - }) -}) - -function sleep (ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -} diff --git a/test/integration/chains/testnet/slp.js b/test/integration/chains/testnet/slp.js deleted file mode 100644 index 4e5c925..0000000 --- a/test/integration/chains/testnet/slp.js +++ /dev/null @@ -1,172 +0,0 @@ -/* - Integration tests for the bchjs covering SLP tokens. -*/ - -import chai from 'chai' -// if (process.env.RESTURL) RESTURL = process.env.RESTURL - -import BCHJS from '../../../../src/bch-js.js' - -// Inspect utility used for debugging. -import util from 'util' -const assert = chai.assert - -const RESTURL = process.env.RESTURL - ? process.env.RESTURL - : 'https://testnet3.fullstack.cash/v5/' -// const bchjs = new BCHJS({ restURL: `https://testnet.bchjs.cash/v5/` }) -const bchjs = new BCHJS({ restURL: RESTURL, apiToken: process.env.BCHJSTOKEN }) -util.inspect.defaultOptions = { - showHidden: true, - colors: true, - depth: 1 -} - -describe('#SLP', () => { - beforeEach(async () => { - // Introduce a delay so that the BVT doesn't trip the rate limits. - if (process.env.IS_USING_FREE_TIER) await sleep(1500) - }) - - describe('#util', () => { - it('should get information on the Oasis token', async () => { - const tokenId = - 'a371e9934c7695d08a5eb7f31d3bceb4f3644860cc67520cda1e149423b9ec39' - - const result = await bchjs.SLP.Utils.list(tokenId) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.hasAnyKeys(result, [ - 'decimals', - 'timestamp', - 'timestamp_unix', - 'versionType', - 'documentUri', - 'symbol', - 'name', - 'containsBaton', - 'id', - 'documentHash', - 'initialTokenQty', - 'blockCreated', - 'blockLastActiveSend', - 'blockLastActiveMint', - 'txnsSinceGenesis', - 'validAddress', - 'totalMinted', - 'totalBurned', - 'circulatingSupply', - 'mintingBatonStatus' - ]) - }) - }) - - describe('#decodeOpReturn', () => { - it('should decode the OP_RETURN for a SEND txid', async () => { - const txid = - 'ad28116e0818339342dddfc5f58ca8a5379ceb9679b4e4cbd72f4de905415ec1' - - const result = await bchjs.SLP.Utils.decodeOpReturn(txid) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.hasAllKeys(result, ['amounts', 'tokenType', 'tokenId', 'txType']) - }) - }) - - describe('#balancesForAddress', () => { - it('should fetch all balances for address: slptest:qz0kc67pm4emjyr3gaaa2wstdaykg9m4yqwlzpj3w9', async () => { - const balances = await bchjs.SLP.Utils.balancesForAddress( - 'slptest:qz0kc67pm4emjyr3gaaa2wstdaykg9m4yqwlzpj3w9' - ) - // console.log(`balances: ${JSON.stringify(balances, null, 2)}`) - - assert.isArray(balances) - assert.hasAllKeys(balances[0], [ - 'tokenId', - 'balanceString', - 'balance', - 'decimalCount', - 'slpAddress' - ]) - }) - - it('should fetch balances for multiple addresses', async () => { - const addresses = [ - 'slptest:qz0kc67pm4emjyr3gaaa2wstdaykg9m4yqwlzpj3w9', - 'slptest:qr5uy4h8ysyhwkp9s245scckdnc7teyjqc5ft2z43h' - ] - - const balances = await bchjs.SLP.Utils.balancesForAddress(addresses) - // console.log(`balances: ${JSON.stringify(balances, null, 2)}`) - - assert.isArray(balances) - assert.isArray(balances[0]) - assert.hasAllKeys(balances[0][0], [ - 'tokenId', - 'balanceString', - 'balance', - 'decimalCount', - 'slpAddress' - ]) - }) - }) - - describe('#tokenUtxoDetails', () => { - it('should hydrate UTXOs', async () => { - const bchAddr = bchjs.SLP.Address.toCashAddress( - 'slptest:qz0kc67pm4emjyr3gaaa2wstdaykg9m4yqwlzpj3w9' - ) - - const utxos = await bchjs.Electrumx.utxo([bchAddr]) - // console.log(`utxos: ${JSON.stringify(utxos, null, 2)}`) - - const utxoInfo = await bchjs.SLP.Utils.tokenUtxoDetails( - utxos.utxos[0].utxos - ) - // console.log(`utxoInfo: ${JSON.stringify(utxoInfo, null, 2)}`) - - assert.isArray(utxoInfo) - - // first UTXO should be a PSF test token. - assert.equal(utxoInfo[0].isValid, true) - }) - }) - - describe('#hydrateUtxos', () => { - // This test will error out if the LOCAL_RESTURL settings is not set properly - // in bch-api. - it('should hydrate UTXOs', async () => { - const bchAddr = bchjs.SLP.Address.toCashAddress( - 'slptest:qz0kc67pm4emjyr3gaaa2wstdaykg9m4yqwlzpj3w9' - ) - - const utxos = await bchjs.Electrumx.utxo([bchAddr]) - // console.log(`utxos: ${JSON.stringify(utxos, null, 2)}`) - - const utxoInfo = await bchjs.SLP.Utils.hydrateUtxos(utxos.utxos) - // console.log(`utxoInfo: ${JSON.stringify(utxoInfo, null, 2)}`) - - assert.isArray(utxoInfo.slpUtxos[0].utxos) - - // first UTXO should be a PSF test token. - assert.equal(utxoInfo.slpUtxos[0].utxos[0].isValid, true) - }) - }) - - describe('#validateTxid2', () => { - it('should validate a token txid', async () => { - const txid = - 'ad28116e0818339342dddfc5f58ca8a5379ceb9679b4e4cbd72f4de905415ec1' - - const validated = await bchjs.SLP.Utils.validateTxid(txid) - // console.log(validated) - - assert.equal(validated[0].valid, true) - }) - }) -}) - -// Promise-based sleep function -function sleep (ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -} diff --git a/test/integration/chains/testnet/test-free-tier.sh b/test/integration/chains/testnet/test-free-tier.sh deleted file mode 100755 index 78ade62..0000000 --- a/test/integration/chains/testnet/test-free-tier.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -export RESTURL=https://free-test.fullstack.cash/v5/ -export NETWORK=testnet -export IS_USING_FREE_TIER=true - -cd test/integration/testnet/ -mocha --timeout 30000 blockchain.js control.js electrumx.js rawtransaction.js slp.js util.js -#mocha --timeout 30000 blockchain.js diff --git a/test/integration/chains/testnet/util.js b/test/integration/chains/testnet/util.js deleted file mode 100644 index 330b2b4..0000000 --- a/test/integration/chains/testnet/util.js +++ /dev/null @@ -1,109 +0,0 @@ -/* - Integration tests for the bchjs. Only covers calls made to - rest.bitcoin.com. -*/ - -import chai from 'chai' -// if (process.env.RESTURL) RESTURL = process.env.RESTURL - -import BCHJS from '../../../../src/bch-js.js' - -// Inspect utility used for debugging. -import util from 'util' -const assert = chai.assert - -const RESTURL = process.env.RESTURL - ? process.env.RESTURL - : 'https://testnet3.fullstack.cash/v5/' -// const bchjs = new BCHJS({ restURL: `https://testnet.bchjs.cash/v5/` }) -const bchjs = new BCHJS({ restURL: RESTURL, apiToken: process.env.BCHJSTOKEN }) -util.inspect.defaultOptions = { - showHidden: true, - colors: true, - depth: 3 -} - -describe('#util', () => { - beforeEach(async () => { - if (process.env.IS_USING_FREE_TIER) await sleep(1500) - }) - - describe('#validateAddress', () => { - it('should return false for testnet addr on mainnet', async () => { - const address = 'bitcoincash:qp4k8fjtgunhdr7yq30ha4peu' - - const result = await bchjs.Util.validateAddress(address) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.hasAllKeys(result, ['isvalid']) - assert.equal(result.isvalid, false) - }) - - it('should return false for bad address', async () => { - const address = 'bchtest:qqqk4y6lsl5da64sg53xezmplyu5kmpyz2ysaa5y' - - const result = await bchjs.Util.validateAddress(address) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.hasAllKeys(result, ['isvalid']) - assert.equal(result.isvalid, false) - }) - - it('should validate valid address', async () => { - const address = 'bchtest:qqqk4y6lsl5da64sg5qc3xezmplyu5kmpyz2ysaa5y' - - const result = await bchjs.Util.validateAddress(address) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.hasAnyKeys(result, [ - 'isvalid', - 'address', - 'scriptPubKey', - // "ismine", - // "iswatchonly", - 'isscript' - ]) - assert.equal(result.isvalid, true) - }) - - it('should validate an array of addresses', async () => { - const address = [ - 'bchtest:qqqk4y6lsl5da64sg5qc3xezmplyu5kmpyz2ysaa5y', - 'bchtest:pq6k9969f6v6sg7a75jkru4n7wn9sknv5cztcp0dnh' - ] - - const result = await bchjs.Util.validateAddress(address) - // console.log(`result: ${JSON.stringify(result, null, 2)}`) - - assert.isArray(result) - assert.hasAnyKeys(result[0], [ - 'isvalid', - 'address', - 'scriptPubKey', - // "ismine", - // "iswatchonly", - 'isscript' - ]) - }) - - it('should throw error on array size rate limit', async () => { - try { - const dataMock = 'bchtest:pq6k9969f6v6sg7a75jkru4n7wn9sknv5cztcp0dnh' - const data = [] - for (let i = 0; i < 25; i++) data.push(dataMock) - - const result = await bchjs.Util.validateAddress(data) - - console.log(`result: ${util.inspect(result)}`) - assert.equal(true, false, 'Unexpected result!') - } catch (err) { - assert.hasAnyKeys(err, ['error']) - assert.include(err.error, 'Array too large') - } - }) - }) -}) - -function sleep (ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -}