--- a/tests/package-lock.json +++ b/tests/package-lock.json @@ -4538,6 +4538,15 @@ "integrity": "sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ==", "dev": true }, + "@types/chai-as-promised": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.3.tgz", + "integrity": "sha512-FQnh1ohPXJELpKhzjuDkPLR2BZCAqed+a6xV4MI/T3XzHfd2FlarfUGUdZYgqYe8oxkYn0fchHEeHfHqdZ96sg==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, "@types/chrome": { "version": "0.0.122", "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.122.tgz", @@ -6952,6 +6961,14 @@ "type-detect": "^4.0.5" } }, + "chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "requires": { + "check-error": "^1.0.2" + } + }, "chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", @@ -6976,8 +6993,7 @@ "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" }, "chokidar": { "version": "2.1.8", --- a/tests/package.json +++ b/tests/package.json @@ -8,6 +8,7 @@ "@polkadot/ts": "^0.3.41", "@types/bn.js": "^4.11.6", "@types/chai": "^4.2.12", + "@types/chai-as-promised": "^7.1.3", "@types/mocha": "^8.0.3", "chai": "^4.2.0", "mocha": "^8.1.1", @@ -25,7 +26,8 @@ "@polkadot/api": "^1.31.2", "@polkadot/types": "^1.31.2", "@polkadot/util": "^2.18.1", - "@types/bn.js": "^4.11.6" + "@types/bn.js": "^4.11.6", + "chai-as-promised": "^7.1.1" }, "standard": { "globals": [ --- a/tests/src/connection.test.ts +++ b/tests/src/connection.test.ts @@ -1,6 +1,12 @@ -import {expect} from 'chai'; import usingApi from "./substrate/substrate-api"; +import { WsProvider } from '@polkadot/api'; +import * as chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +chai.use(chaiAsPromised); + +const expect = chai.expect; + describe('Connection', () => { it('Connection can be established', async () => { await usingApi(async api => { @@ -8,4 +14,13 @@ expect(health).to.be.not.empty; }); }); + + it('Cannot connect to 0.0.0.0', () => { + const neverConnectProvider = new WsProvider('ws://0.0.0.0:9944'); + expect((async () => { + await usingApi(async api => { + const health = await api.rpc.system.health(); + }, { provider: neverConnectProvider }); + })()).to.be.eventually.rejected; + }); }); \ No newline at end of file --- a/tests/src/substrate/substrate-api.ts +++ b/tests/src/substrate/substrate-api.ts @@ -3,13 +3,17 @@ import promisifySubstrate from "./promisify-substrate"; import { ApiOptions } from "@polkadot/api/types"; -export default async function usingApi(action: (api: ApiPromise) => Promise): Promise { +function defaultApiOptions(): ApiOptions { const wsProvider = new WsProvider(config.substrateUrl); - const settings: ApiOptions = { provider: wsProvider, types: JSON.parse(config.customTypes) }; + return { provider: wsProvider, types: JSON.parse(config.customTypes) }; +} + +export default async function usingApi(action: (api: ApiPromise) => Promise, settings: ApiOptions | undefined = undefined): Promise { + settings = settings || defaultApiOptions(); let api: ApiPromise | undefined = undefined; try { - api = await ApiPromise.create(settings); + api = new ApiPromise(settings); await promisifySubstrate(api, () => api && api.isReady)(); await action(api); } finally {