git.delta.rocks / unique-network / refs/commits / 3fd1cbdba689

difftreelog

Connection test now detects disconnection and added transfer test.

sotmorskiy2020-09-11parent: #297a2ab.patch.diff
in: master

11 files changed

modifiedtests/.vscode/launch.jsondiffbeforeafterboth
--- a/tests/.vscode/launch.json
+++ b/tests/.vscode/launch.json
@@ -1,23 +1,42 @@
 {
-    // Use IntelliSense to learn about possible attributes.
-    // Hover to view descriptions of existing attributes.
-    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
-    "version": "0.2.0",
-    "configurations": [
-        {
-            "type": "node",
-            "request": "launch",
-            "name": "Mocha Current File",
-            "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
-            "args": [
-                "--timeout", "999999",
-                "--colors",
-                "--recursive",
-                "--require", "ts-node/register",
-                "./**/*.test.ts"
-            ],
-            "console": "integratedTerminal",
-            "internalConsoleOptions": "neverOpen"
-      }
-    ]
+  // Use IntelliSense to learn about possible attributes.
+  // Hover to view descriptions of existing attributes.
+  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+  "version": "0.2.0",
+  "configurations": [
+    {
+      "type": "node",
+      "request": "launch",
+      "name": "Mocha Current File",
+      "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
+      "args": [
+        "--timeout",
+        "9999999",
+        "--colors",
+        "--recursive",
+        "--require",
+        "ts-node/register",
+        "${file}"
+      ],
+      "console": "integratedTerminal",
+      "internalConsoleOptions": "neverOpen"
+    },
+    {
+      "type": "node",
+      "request": "launch",
+      "name": "Mocha All tests",
+      "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
+      "args": [
+        "--timeout",
+        "9999999",
+        "--colors",
+        "--recursive",
+        "--require",
+        "ts-node/register",
+        "./**/*.test.ts"
+      ],
+      "console": "integratedTerminal",
+      "internalConsoleOptions": "neverOpen"
+    }
+  ]
 }
\ No newline at end of file
modifiedtests/package-lock.jsondiffbeforeafterboth
--- a/tests/package-lock.json
+++ b/tests/package-lock.json
@@ -3916,25 +3916,64 @@
       }
     },
     "@polkadot/api": {
-      "version": "1.32.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-1.32.1.tgz",
-      "integrity": "sha512-YwqvD7lmH18xPFggwqpXAQHH0DmwQcePVGLHb5c9JjX9QxYqPS5r+Ed6lFPqTBTTiYhb1ep8QZrY7TrgceP41g==",
+      "version": "1.31.2",
+      "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-1.31.2.tgz",
+      "integrity": "sha512-5nMraRQYFt+xeInQi5i7c00fwOiSeZgU3Y1LJWz+z+Vnxep7xzjVBMLgBi4fe7g2eWKUYB79ApFNV8r2thsQZg==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/api-derive": "1.32.1",
+        "@polkadot/api-derive": "1.31.2",
         "@polkadot/keyring": "^3.4.1",
-        "@polkadot/metadata": "1.32.1",
-        "@polkadot/rpc-core": "1.32.1",
-        "@polkadot/rpc-provider": "1.32.1",
-        "@polkadot/types": "1.32.1",
-        "@polkadot/types-known": "1.32.1",
+        "@polkadot/metadata": "1.31.2",
+        "@polkadot/rpc-core": "1.31.2",
+        "@polkadot/rpc-provider": "1.31.2",
+        "@polkadot/types": "1.31.2",
+        "@polkadot/types-known": "1.31.2",
         "@polkadot/util": "^3.4.1",
         "@polkadot/util-crypto": "^3.4.1",
         "bn.js": "^5.1.3",
-        "eventemitter3": "^4.0.7",
+        "eventemitter3": "^4.0.6",
         "rxjs": "^6.6.2"
       },
       "dependencies": {
+        "@polkadot/metadata": {
+          "version": "1.31.2",
+          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.31.2.tgz",
+          "integrity": "sha512-UAcZLxh6QFwhF2Ccmax6LUYa99NntBZrAe8oUN92UJlHbtAutd5sq322P+liG2EHfyhUZs5T5v8jLD79pMTjdA==",
+          "requires": {
+            "@babel/runtime": "^7.11.2",
+            "@polkadot/types": "1.31.2",
+            "@polkadot/types-known": "1.31.2",
+            "@polkadot/util": "^3.4.1",
+            "@polkadot/util-crypto": "^3.4.1",
+            "bn.js": "^5.1.3"
+          }
+        },
+        "@polkadot/types": {
+          "version": "1.31.2",
+          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.31.2.tgz",
+          "integrity": "sha512-eJsWdMzBlkYYrowR7tl9LYvGW3Za05esDQPxPxc1z2kkwzU2IoX2qijhUb6J9ViESY/h0jWFyEbV/1mBn4uupg==",
+          "requires": {
+            "@babel/runtime": "^7.11.2",
+            "@polkadot/metadata": "1.31.2",
+            "@polkadot/util": "^3.4.1",
+            "@polkadot/util-crypto": "^3.4.1",
+            "@types/bn.js": "^4.11.6",
+            "bn.js": "^5.1.3",
+            "memoizee": "^0.4.14",
+            "rxjs": "^6.6.2"
+          }
+        },
+        "@polkadot/types-known": {
+          "version": "1.31.2",
+          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.31.2.tgz",
+          "integrity": "sha512-sA9IEwYNCsN+Z4eZklxOluJA5OBN2eGNvLz0uUQ6TFvqbi9Z8Mba+h+RZU1iFO6+yq2U7ECvdWzET6RN7zv+oQ==",
+          "requires": {
+            "@babel/runtime": "^7.11.2",
+            "@polkadot/types": "1.31.2",
+            "@polkadot/util": "^3.4.1",
+            "bn.js": "^5.1.3"
+          }
+        },
         "@polkadot/util": {
           "version": "3.4.1",
           "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
@@ -3951,15 +3990,15 @@
       }
     },
     "@polkadot/api-derive": {
-      "version": "1.32.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-1.32.1.tgz",
-      "integrity": "sha512-i7kz2v8tHRl9RHKzvwc8OwjRyZVCwiP40CEpq0ZIgSl4wl2MpWcSMLrhbZdvRtBiVIfaogNb6esAZ1AFrtSDMQ==",
+      "version": "1.31.2",
+      "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-1.31.2.tgz",
+      "integrity": "sha512-j33elEBZpY7/ucsBRYdUxeWHID8vlvPKm7k9dWgaH8txYuzms0SFfkMHyECgo15SL+RTNhu/VxzSRWryk6dvTA==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/api": "1.32.1",
-        "@polkadot/rpc-core": "1.32.1",
-        "@polkadot/rpc-provider": "1.32.1",
-        "@polkadot/types": "1.32.1",
+        "@polkadot/api": "1.31.2",
+        "@polkadot/rpc-core": "1.31.2",
+        "@polkadot/rpc-provider": "1.31.2",
+        "@polkadot/types": "1.31.2",
         "@polkadot/util": "^3.4.1",
         "@polkadot/util-crypto": "^3.4.1",
         "bn.js": "^5.1.3",
@@ -3967,6 +4006,45 @@
         "rxjs": "^6.6.2"
       },
       "dependencies": {
+        "@polkadot/metadata": {
+          "version": "1.31.2",
+          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.31.2.tgz",
+          "integrity": "sha512-UAcZLxh6QFwhF2Ccmax6LUYa99NntBZrAe8oUN92UJlHbtAutd5sq322P+liG2EHfyhUZs5T5v8jLD79pMTjdA==",
+          "requires": {
+            "@babel/runtime": "^7.11.2",
+            "@polkadot/types": "1.31.2",
+            "@polkadot/types-known": "1.31.2",
+            "@polkadot/util": "^3.4.1",
+            "@polkadot/util-crypto": "^3.4.1",
+            "bn.js": "^5.1.3"
+          }
+        },
+        "@polkadot/types": {
+          "version": "1.31.2",
+          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.31.2.tgz",
+          "integrity": "sha512-eJsWdMzBlkYYrowR7tl9LYvGW3Za05esDQPxPxc1z2kkwzU2IoX2qijhUb6J9ViESY/h0jWFyEbV/1mBn4uupg==",
+          "requires": {
+            "@babel/runtime": "^7.11.2",
+            "@polkadot/metadata": "1.31.2",
+            "@polkadot/util": "^3.4.1",
+            "@polkadot/util-crypto": "^3.4.1",
+            "@types/bn.js": "^4.11.6",
+            "bn.js": "^5.1.3",
+            "memoizee": "^0.4.14",
+            "rxjs": "^6.6.2"
+          }
+        },
+        "@polkadot/types-known": {
+          "version": "1.31.2",
+          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.31.2.tgz",
+          "integrity": "sha512-sA9IEwYNCsN+Z4eZklxOluJA5OBN2eGNvLz0uUQ6TFvqbi9Z8Mba+h+RZU1iFO6+yq2U7ECvdWzET6RN7zv+oQ==",
+          "requires": {
+            "@babel/runtime": "^7.11.2",
+            "@polkadot/types": "1.31.2",
+            "@polkadot/util": "^3.4.1",
+            "bn.js": "^5.1.3"
+          }
+        },
         "@polkadot/util": {
           "version": "3.4.1",
           "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
@@ -4117,19 +4195,58 @@
       }
     },
     "@polkadot/rpc-core": {
-      "version": "1.32.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-1.32.1.tgz",
-      "integrity": "sha512-pre6aUVCQZqsoffGewyFzjM3MQ+kPn18n2L+B9EKqVBBd3+9v05X6aNmbm1aXb6laa0DzcuxO3EQmOT21CdbNQ==",
+      "version": "1.31.2",
+      "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-1.31.2.tgz",
+      "integrity": "sha512-amFN0UtxB94TnXVuL9oBSQDFheCrxUN6C/lmVlOBqnWj6ZA1RDAuPPJBNIjhSxNlGmJxS2yIexaCVKgF8kS8Cg==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/metadata": "1.32.1",
-        "@polkadot/rpc-provider": "1.32.1",
-        "@polkadot/types": "1.32.1",
+        "@polkadot/metadata": "1.31.2",
+        "@polkadot/rpc-provider": "1.31.2",
+        "@polkadot/types": "1.31.2",
         "@polkadot/util": "^3.4.1",
         "memoizee": "^0.4.14",
         "rxjs": "^6.6.2"
       },
       "dependencies": {
+        "@polkadot/metadata": {
+          "version": "1.31.2",
+          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.31.2.tgz",
+          "integrity": "sha512-UAcZLxh6QFwhF2Ccmax6LUYa99NntBZrAe8oUN92UJlHbtAutd5sq322P+liG2EHfyhUZs5T5v8jLD79pMTjdA==",
+          "requires": {
+            "@babel/runtime": "^7.11.2",
+            "@polkadot/types": "1.31.2",
+            "@polkadot/types-known": "1.31.2",
+            "@polkadot/util": "^3.4.1",
+            "@polkadot/util-crypto": "^3.4.1",
+            "bn.js": "^5.1.3"
+          }
+        },
+        "@polkadot/types": {
+          "version": "1.31.2",
+          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.31.2.tgz",
+          "integrity": "sha512-eJsWdMzBlkYYrowR7tl9LYvGW3Za05esDQPxPxc1z2kkwzU2IoX2qijhUb6J9ViESY/h0jWFyEbV/1mBn4uupg==",
+          "requires": {
+            "@babel/runtime": "^7.11.2",
+            "@polkadot/metadata": "1.31.2",
+            "@polkadot/util": "^3.4.1",
+            "@polkadot/util-crypto": "^3.4.1",
+            "@types/bn.js": "^4.11.6",
+            "bn.js": "^5.1.3",
+            "memoizee": "^0.4.14",
+            "rxjs": "^6.6.2"
+          }
+        },
+        "@polkadot/types-known": {
+          "version": "1.31.2",
+          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.31.2.tgz",
+          "integrity": "sha512-sA9IEwYNCsN+Z4eZklxOluJA5OBN2eGNvLz0uUQ6TFvqbi9Z8Mba+h+RZU1iFO6+yq2U7ECvdWzET6RN7zv+oQ==",
+          "requires": {
+            "@babel/runtime": "^7.11.2",
+            "@polkadot/types": "1.31.2",
+            "@polkadot/util": "^3.4.1",
+            "bn.js": "^5.1.3"
+          }
+        },
         "@polkadot/util": {
           "version": "3.4.1",
           "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
@@ -4146,21 +4263,60 @@
       }
     },
     "@polkadot/rpc-provider": {
-      "version": "1.32.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-1.32.1.tgz",
-      "integrity": "sha512-m3Vk7somPLrAfNM/z24XFQUD7lYrOZxa647uaCSGqGUNsszrcotBDBU3bE6WL5qOaR3EpLXs0Lhq6RpgowOqJg==",
+      "version": "1.31.2",
+      "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-1.31.2.tgz",
+      "integrity": "sha512-vqS1lsk/BBGSuklGKJhJxduKXOyXjc/kZzPWmmH8B92Zh59LqlzoJ8a4gQIjDr0CFjeJZbaaL1yRhE6qwaEe2A==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/metadata": "1.32.1",
-        "@polkadot/types": "1.32.1",
+        "@polkadot/metadata": "1.31.2",
+        "@polkadot/types": "1.31.2",
         "@polkadot/util": "^3.4.1",
         "@polkadot/util-crypto": "^3.4.1",
         "bn.js": "^5.1.3",
-        "eventemitter3": "^4.0.7",
+        "eventemitter3": "^4.0.6",
         "isomorphic-fetch": "^2.2.1",
-        "websocket": "^1.0.32"
+        "websocket": "^1.0.31"
       },
       "dependencies": {
+        "@polkadot/metadata": {
+          "version": "1.31.2",
+          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.31.2.tgz",
+          "integrity": "sha512-UAcZLxh6QFwhF2Ccmax6LUYa99NntBZrAe8oUN92UJlHbtAutd5sq322P+liG2EHfyhUZs5T5v8jLD79pMTjdA==",
+          "requires": {
+            "@babel/runtime": "^7.11.2",
+            "@polkadot/types": "1.31.2",
+            "@polkadot/types-known": "1.31.2",
+            "@polkadot/util": "^3.4.1",
+            "@polkadot/util-crypto": "^3.4.1",
+            "bn.js": "^5.1.3"
+          }
+        },
+        "@polkadot/types": {
+          "version": "1.31.2",
+          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.31.2.tgz",
+          "integrity": "sha512-eJsWdMzBlkYYrowR7tl9LYvGW3Za05esDQPxPxc1z2kkwzU2IoX2qijhUb6J9ViESY/h0jWFyEbV/1mBn4uupg==",
+          "requires": {
+            "@babel/runtime": "^7.11.2",
+            "@polkadot/metadata": "1.31.2",
+            "@polkadot/util": "^3.4.1",
+            "@polkadot/util-crypto": "^3.4.1",
+            "@types/bn.js": "^4.11.6",
+            "bn.js": "^5.1.3",
+            "memoizee": "^0.4.14",
+            "rxjs": "^6.6.2"
+          }
+        },
+        "@polkadot/types-known": {
+          "version": "1.31.2",
+          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.31.2.tgz",
+          "integrity": "sha512-sA9IEwYNCsN+Z4eZklxOluJA5OBN2eGNvLz0uUQ6TFvqbi9Z8Mba+h+RZU1iFO6+yq2U7ECvdWzET6RN7zv+oQ==",
+          "requires": {
+            "@babel/runtime": "^7.11.2",
+            "@polkadot/types": "1.31.2",
+            "@polkadot/util": "^3.4.1",
+            "bn.js": "^5.1.3"
+          }
+        },
         "@polkadot/util": {
           "version": "3.4.1",
           "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
modifiedtests/package.jsondiffbeforeafterboth
--- a/tests/package.json
+++ b/tests/package.json
@@ -16,7 +16,7 @@
     "typescript": "^3.9.7"
   },
   "scripts": {
-    "test": "mocha -r ts-node/register ./**/*.test.ts"
+    "test": "mocha --timeout 9999999 -r ts-node/register ./**/*.test.ts"
   },
   "author": "",
   "license": "Apache 2.0",
modifiedtests/src/config.tsdiffbeforeafterboth
--- a/tests/src/config.ts
+++ b/tests/src/config.ts
@@ -1,7 +1,71 @@
 import process from 'process';
 
 const config = {
-  substrateUrl: process.env.substrateUrl || 'ws://127.0.0.1:9944'
+  substrateUrl: process.env.substrateUrl || 'ws://127.0.0.1:9944',
+  customTypes: process.env.customTypes || `{
+    "Schedule": {
+      "version": "u32",
+      "put_code_per_byte_cost": "Gas",
+      "grow_mem_cost": "Gas",
+      "regular_op_cost": "Gas",
+      "return_data_per_byte_cost": "Gas",
+      "event_data_per_byte_cost": "Gas",
+      "event_per_topic_cost": "Gas",
+      "event_base_cost": "Gas",
+      "call_base_cost": "Gas",
+      "instantiate_base_cost": "Gas",
+      "dispatch_base_cost": "Gas",
+      "sandbox_data_read_cost": "Gas",
+      "sandbox_data_write_cost": "Gas",
+      "transfer_cost": "Gas",
+      "instantiate_cost": "Gas",
+      "max_event_topics": "u32",
+      "max_stack_height": "u32",
+      "max_memory_pages": "u32",
+      "max_table_size": "u32",
+      "enable_println": "bool",
+      "max_subject_len": "u32"
+    },
+    "CollectionMode": {
+      "_enum": {
+        "Invalid": null,
+        "NFT": "u32",
+        "Fungible": "u32",
+        "ReFungible": "(u32, u32)"
+      }
+    },
+    "NftItemType": {
+      "Collection": "u64",
+      "Owner": "AccountId",
+      "Data": "Vec<u8>"
+    },
+    "Ownership": {
+      "owner": "AccountId",
+      "fraction": "u128"
+    },
+    "ReFungibleItemType": {
+      "Collection": "u64",
+      "Owner": "Vec<Ownership<AccountId>>",
+      "Data": "Vec<u8>"
+    },
+    "CollectionType": {
+      "Owner": "AccountId",
+      "Mode": "CollectionMode",
+      "Access": "u8",
+      "DecimalPoints": "u32",
+      "Name": "Vec<u16>",
+      "Description": "Vec<u16>",
+      "TokenPrefix": "Vec<u8>",
+      "CustomDataSize": "u32",
+      "OffchainSchema": "Vec<u8>",
+      "Sponsor": "AccountId",
+      "UnconfirmedSponsor": "AccountId"
+    },
+    "RawData": "Vec<u8>",
+    "Address": "AccountId",
+    "LookupSource": "AccountId",
+    "Weight": "u64"
+  }`
 }
 
 export default config;
\ No newline at end of file
modifiedtests/src/connection.test.tsdiffbeforeafterboth
--- a/tests/src/connection.test.ts
+++ b/tests/src/connection.test.ts
@@ -1,10 +1,11 @@
-import createSubstrateApi from "./substrate-api";
 import {expect} from 'chai';
+import usingApi from "./substrate/substrate-api";
 
 describe('Connection', () => {
   it('Connection can be established', async () => {
-    const api = await createSubstrateApi();
-    const health = await api.rpc.system.health();
-    expect(health).to.be.not.empty;
+    await usingApi(async api => {
+      const health = await api.rpc.system.health();
+      expect(health).to.be.not.empty;
+    });
   });
 });
\ No newline at end of file
deletedtests/src/substrate-api.tsdiffbeforeafterboth
--- a/tests/src/substrate-api.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { WsProvider, ApiPromise } from "@polkadot/api";
-import config from "./config";
-
-const wsProvider = new WsProvider(config.substrateUrl);
-const settings = { provider: wsProvider };
-
-
-export default function createSubstrateApi(): Promise<ApiPromise> {
-  return new ApiPromise(settings).isReady;
-}
\ No newline at end of file
addedtests/src/substrate/promisify-substrate.tsdiffbeforeafterboth

no changes

addedtests/src/substrate/substrate-api.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/substrate/substrate-api.ts
@@ -0,0 +1,18 @@
+import { WsProvider, ApiPromise } from "@polkadot/api";
+import config from "../config";
+import promisifySubstrate from "./promisify-substrate";
+import { ApiOptions } from "@polkadot/api/types";
+
+export default async function usingApi(action: (api: ApiPromise) => Promise<void>): Promise<void> {
+  const wsProvider = new WsProvider(config.substrateUrl);
+  const settings: ApiOptions = { provider: wsProvider, types: JSON.parse(config.customTypes) };
+  let api: ApiPromise | undefined = undefined;
+
+  try {
+    api = await ApiPromise.create(settings);
+    await promisifySubstrate(api, () => api && api.isReady)();
+    await action(api);
+  } finally {
+    api && api.disconnect();
+  }
+}
\ No newline at end of file
addedtests/src/substrate/wait-new-blocks.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/substrate/wait-new-blocks.ts
@@ -0,0 +1,17 @@
+import { ApiPromise } from "@polkadot/api";
+
+export default function waitNewBlocks(api: ApiPromise, blocksCount: number = 1): Promise<void> {
+  const promise = new Promise<void>(async (resolve, reject) => {
+    
+    const unsubscribe = await api.rpc.chain.subscribeNewHeads(head => {
+      if(blocksCount > 0) {
+        blocksCount--;
+      }else {
+        unsubscribe();
+        resolve();
+      }
+    });
+  });
+
+  return promise;
+}
\ No newline at end of file
addedtests/src/transfer.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/transfer.test.ts
@@ -0,0 +1,38 @@
+import createSubstrateApi from "./substrate/substrate-api";
+import { Keyring, ApiPromise } from "@polkadot/api";
+import {AccountInfo} from "@polkadot/types/interfaces/system";
+import { expect } from "chai";
+import usingApi from "./substrate/substrate-api";
+import promisifySubstrate from "./substrate/promisify-substrate";
+import waitNewBlocks from "./substrate/wait-new-blocks";
+
+async function getBalance(api: ApiPromise, accounts: string[]): Promise<bigint[]> {
+  const balance = promisifySubstrate(api, (accounts: string[]) => api.query.system.account.multi(accounts));
+  const responce = await balance(accounts) as unknown as AccountInfo[];
+  return responce.map(r => r.data.free.toBigInt().valueOf());
+}
+
+describe('Transfer', () => {
+  it('Balance transfers', async () => {
+    const bobsPublicKey = '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty';
+    const alicesPublicKey = '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY';
+    await usingApi(async api => {
+      const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);
+
+      const keyring = new Keyring({ type: 'sr25519' });
+      
+      const alicePrivateKey = keyring.addFromUri('//Alice');
+      
+      const transfer = api.tx.balances.transfer(bobsPublicKey, 1n);
+      
+      const hash = await transfer.signAndSend(alicePrivateKey);
+
+      await waitNewBlocks(api);
+  
+      const [alicesBalanceAfter, bobsBalanceAfter]  = await getBalance(api, [alicesPublicKey, bobsPublicKey]);
+
+      expect(alicesBalanceAfter < alicesBalanceBefore).to.be.true;
+      expect(bobsBalanceAfter > bobsBalanceBefore).to.be.true;
+    });
+  });
+});
modifiedtests/tsconfig.jsondiffbeforeafterboth
--- a/tests/tsconfig.json
+++ b/tests/tsconfig.json
@@ -5,7 +5,7 @@
     "**/node_modules/**/*"
   ],
   "compilerOptions": {
-    "target": "es6",
+    "target": "ES2020",
     "moduleResolution": "node",
     "esModuleInterop": true,
     "resolveJsonModule": true,
@@ -18,5 +18,5 @@
   "include": [
     "src/**/*"
   ],
-  "lib": ["es2015"]
+  "lib": ["es2017"]
 }