eth-provider
Version:
A Universal Ethereum Provider
116 lines (110 loc) • 3.26 kB
JavaScript
/* globals describe it */
const assert = require('assert')
const Web3 = require('web3')
const provider = require('../')
const getPresets = require('../presets')
const presetOpts = {
infuraId: '76cced0cada04535b47c5605d12989ea',
alchemyId: 'NBms1eV9i16RFHpFqQxod56OLdlucIq0'
}
const presets = Object.keys(getPresets(presetOpts)).filter(
(name) => !['injected', 'frame', 'direct'].includes(name)
)
const netIdMap = {
infura: '1',
alchemy: '1',
infuraPolygon: '137',
infuraArbitrum: '42161',
infuraOptimism: '10',
infuraSepolia: '11155111',
gnosis: '100',
optimism: '10'
}
describe('Test web3 is v0.x', () => {
it('major version should be 0', () => {
assert(new Web3().version.api[0] === '0')
}).timeout(45 * 1000)
})
describe('WebSocket Provider', () => {
const wsProvider = provider('wss://sepolia.infura.io/ws/v3/76cced0cada04535b47c5605d12989ea')
const web3ws = new Web3(wsProvider)
describe('Get accounts via WS', () => {
it('should return array', (done) => {
web3ws.eth.getAccounts((err, accounts) => {
if (err) throw err
assert(Array.isArray(accounts))
wsProvider.close()
done()
})
}).timeout(45 * 1000)
it('should error due to being closed', (done) => {
web3ws.eth.getAccounts((err) => {
assert(err.message === 'Not connected')
done()
})
}).timeout(45 * 1000)
})
})
describe('HTTP Provider', () => {
const httpProvider = provider('https://sepolia.infura.io/v3/76cced0cada04535b47c5605d12989ea')
const web3http = new Web3(httpProvider)
// v0.x specific
describe('Batch requests', () => {
it('process batch requests', (done) => {
let count = 0
const batch = web3http.createBatch()
batch.add(
web3http.eth.getAccounts.request((err, accounts) => {
if (err) throw err
assert(Array.isArray(accounts))
if (++count >= 3) done()
})
)
batch.add(
web3http.eth.getAccounts.request((err, accounts) => {
if (err) throw err
assert(Array.isArray(accounts))
if (++count >= 3) done()
})
)
batch.add(
web3http.eth.getAccounts.request((err, accounts) => {
if (err) throw err
assert(Array.isArray(accounts))
if (++count >= 3) done()
})
)
batch.execute()
}).timeout(45 * 1000)
})
describe('Get accounts via HTTP', () => {
it('should return array', (done) => {
web3http.eth.getAccounts((err, accounts) => {
if (err) throw err
assert(Array.isArray(accounts))
httpProvider.close()
done()
})
}).timeout(45 * 1000)
it('should error due to being closed', (done) => {
web3http.eth.getAccounts((err) => {
assert(err.message === 'Not connected')
done()
})
}).timeout(45 * 1000)
})
})
describe('Presets', () => {
presets.forEach((name) => {
it(`${name} - net_version`, (done) => {
const p = provider(name, presetOpts)
const web3 = new Web3(p)
web3.version.getNetwork((err, netId) => {
if (err) throw err
assert(netId === netIdMap[name])
p.close()
done()
})
}).timeout(45 * 1000)
})
})