From 535a8e928ce8e5549741179f4bee7da7ce44aaf9 Mon Sep 17 00:00:00 2001 From: Fahrrader Date: Wed, 05 Oct 2022 08:06:31 +0000 Subject: [PATCH] tests: introduce feed alices + refactor tests to use the filename as donor key --- --- a/tests/package.json +++ b/tests/package.json @@ -26,24 +26,25 @@ "scripts": { "lint": "eslint --ext .ts,.js src/", "fix": "eslint --ext .ts,.js src/ --fix", - "test": "mocha --timeout 9999999 -r ts-node/register './src/**/*.test.ts'", - "testEth": "mocha --timeout 9999999 -r ts-node/register './**/eth/**/*.test.ts'", - "testEthMarketplace": "mocha --timeout 9999999 -r ts-node/register './**/eth/marketplace/**/*.test.ts'", - "testEthNesting": "mocha --timeout 9999999 -r ts-node/register './**/eth/nesting/**/*.test.ts'", - "testEthFractionalizer": "mocha --timeout 9999999 -r ts-node/register './**/eth/fractionalizer/**/*.test.ts'", + "feedAlices": "ts-node ./src/util/playgrounds/feedAlices.ts", + + "test": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register './src/**/*.test.ts'", + "testStructure": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register ./**/nesting/**.test.ts", + "testEth": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register './**/eth/**/*.test.ts'", + "testEthNesting": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register './**/eth/nesting/**/*.test.ts'", + "testEthFractionalizer": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register './**/eth/fractionalizer/**/*.test.ts'", + "testEthMarketplace": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register './**/eth/marketplace/**/*.test.ts'", + "testCollision": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts", + "testEvent": "yarn feedAlices && mocha --parallel --timeout 9999999 -r ts-node/register ./src/check-event/*.test.ts", + "testRmrk": "mocha --timeout 9999999 -r ts-node/register ./**/rmrk/**.test.ts", + "testEthPayable": "mocha --timeout 9999999 -r ts-node/register './**/eth/payable.test.ts'", - "load": "mocha --timeout 9999999 -r ts-node/register './**/*.load.ts'", - "loadTransfer": "ts-node src/transfer.nload.ts", - "testCollision": "mocha --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts", - "testEvent": "mocha --timeout 9999999 -r ts-node/register ./src/check-event/*.test.ts", + "testEthTokenProperties": "mocha --timeout 9999999 -r ts-node/register ./**/eth/tokenProperties.test.ts", "testNesting": "mocha --timeout 9999999 -r ts-node/register ./**/nest.test.ts", "testUnnesting": "mocha --timeout 9999999 -r ts-node/register ./**/unnest.test.ts", - "testStructure": "mocha --timeout 9999999 -r ts-node/register ./**/nesting/**.test.ts", "testProperties": "mocha --timeout 9999999 -r ts-node/register ./**/properties.test.ts ./**/getPropertiesRpc.test.ts", "testMigration": "mocha --timeout 9999999 -r ts-node/register ./**/nesting/migration-check.test.ts", - "testRmrk": "mocha --timeout 9999999 -r ts-node/register ./**/rmrk/**.test.ts", "testAddCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/addCollectionAdmin.test.ts", - "testSetSchemaVersion": "mocha --timeout 9999999 -r ts-node/register ./**/setSchemaVersion.test.ts", "testSetCollectionLimits": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionLimits.test.ts", "testChangeCollectionOwner": "mocha --timeout 9999999 -r ts-node/register ./**/change-collection-owner.test.ts", "testSetCollectionSponsor": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionSponsor.test.ts", @@ -96,6 +97,10 @@ "testEthFT": "mocha --timeout 9999999 -r ts-node/register ./**/eth/fungible.test.ts", "testRPC": "mocha --timeout 9999999 -r ts-node/register ./**/rpc.test.ts", "testPromotion": "mocha --timeout 9999999 -r ts-node/register ./**/app-promotion.test.ts", + + "load": "mocha --timeout 9999999 -r ts-node/register './**/*.load.ts'", + "loadTransfer": "ts-node src/transfer.nload.ts", + "polkadot-types-fetch-metadata": "curl -H 'Content-Type: application/json' -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_getMetadata\", \"params\":[]}' http://localhost:9933 > src/interfaces/metadata.json", "polkadot-types-from-defs": "ts-node ./node_modules/.bin/polkadot-types-from-defs --endpoint src/interfaces/metadata.json --input src/interfaces/ --package .", "polkadot-types-from-chain": "ts-node ./node_modules/.bin/polkadot-types-from-chain --endpoint src/interfaces/metadata.json --output src/interfaces/ --package .", --- a/tests/src/addCollectionAdmin.test.ts +++ b/tests/src/addCollectionAdmin.test.ts @@ -21,8 +21,8 @@ let donor: IKeyringPair; before(async () => { - await usingPlaygrounds(async (_, privateKeyWrapper) => { - donor = privateKeyWrapper('//Alice'); + await usingPlaygrounds(async (_, privateKey) => { + donor = await privateKey({filename: __filename}); }); }); @@ -44,8 +44,8 @@ let donor: IKeyringPair; before(async () => { - await usingPlaygrounds(async (_, privateKeyWrapper) => { - donor = privateKeyWrapper('//Alice'); + await usingPlaygrounds(async (_, privateKey) => { + donor = await privateKey({filename: __filename}); }); }); --- a/tests/src/adminTransferAndBurn.test.ts +++ b/tests/src/adminTransferAndBurn.test.ts @@ -24,7 +24,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); --- a/tests/src/allowLists.test.ts +++ b/tests/src/allowLists.test.ts @@ -25,7 +25,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([30n, 10n, 10n], donor); }); }); @@ -87,7 +87,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([30n, 10n, 10n], donor); }); }); @@ -163,7 +163,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([30n, 10n, 10n], donor); }); }); @@ -291,7 +291,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); --- a/tests/src/app-promotion.test.ts +++ b/tests/src/app-promotion.test.ts @@ -43,8 +43,8 @@ before(async function () { await usingPlaygrounds(async (helper, privateKey) => { if (!getModuleNames(helper.api!).includes(Pallets.AppPromotion)) this.skip(); - alice = privateKey('//Alice'); - palletAdmin = privateKey('//Charlie'); // TODO use custom address + alice = await privateKey({filename: __filename}); + [palletAdmin] = await helper.arrange.createAccounts([100n], alice); await helper.signTransaction(alice, helper.api!.tx.sudo.sudo(helper.api!.tx.appPromotion.setAdminAddress({Substrate: palletAdmin.address}))); nominal = helper.balance.getOneTokenNominal(); await helper.balance.transferToSubstrate(alice, palletAdmin.address, 1000n * nominal); --- a/tests/src/approve.test.ts +++ b/tests/src/approve.test.ts @@ -25,7 +25,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -104,7 +104,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -141,7 +141,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -184,7 +184,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -235,7 +235,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor); }); }); @@ -265,7 +265,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -320,7 +320,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -357,7 +357,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor); }); }); @@ -423,7 +423,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor); }); }); @@ -474,7 +474,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -495,7 +495,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); --- a/tests/src/burnItem.test.ts +++ b/tests/src/burnItem.test.ts @@ -25,7 +25,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); @@ -80,7 +80,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); @@ -123,7 +123,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); --- a/tests/src/change-collection-owner.test.ts +++ b/tests/src/change-collection-owner.test.ts @@ -23,7 +23,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); @@ -46,7 +46,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -108,7 +108,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); --- a/tests/src/check-event/burnItemEvent.test.ts +++ b/tests/src/check-event/burnItemEvent.test.ts @@ -24,7 +24,7 @@ let alice: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); --- a/tests/src/check-event/createCollectionEvent.test.ts +++ b/tests/src/check-event/createCollectionEvent.test.ts @@ -23,7 +23,7 @@ let alice: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); --- a/tests/src/check-event/createItemEvent.test.ts +++ b/tests/src/check-event/createItemEvent.test.ts @@ -23,7 +23,7 @@ let alice: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); --- a/tests/src/check-event/createMultipleItemsEvent.test.ts +++ b/tests/src/check-event/createMultipleItemsEvent.test.ts @@ -23,7 +23,7 @@ let alice: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); --- a/tests/src/check-event/destroyCollectionEvent.test.ts +++ b/tests/src/check-event/destroyCollectionEvent.test.ts @@ -23,7 +23,7 @@ let alice: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); --- a/tests/src/check-event/transferEvent.test.ts +++ b/tests/src/check-event/transferEvent.test.ts @@ -25,7 +25,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor); }); }); --- a/tests/src/check-event/transferFromEvent.test.ts +++ b/tests/src/check-event/transferFromEvent.test.ts @@ -24,7 +24,7 @@ let bob: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor); }); }); --- a/tests/src/confirmSponsorship.test.ts +++ b/tests/src/confirmSponsorship.test.ts @@ -37,7 +37,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie, zeroBalance] = await helper.arrange.createAccounts([100n, 100n, 100n, 0n], donor); }); }); @@ -183,7 +183,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie, ownerZeroBalance, senderZeroBalance] = await helper.arrange.createAccounts([100n, 100n, 100n, 0n, 0n], donor); }); }); --- a/tests/src/createCollection.test.ts +++ b/tests/src/createCollection.test.ts @@ -49,7 +49,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); @@ -110,7 +110,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); --- a/tests/src/createItem.test.ts +++ b/tests/src/createItem.test.ts @@ -50,7 +50,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); @@ -179,7 +179,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); --- a/tests/src/createMultipleItems.test.ts +++ b/tests/src/createMultipleItems.test.ts @@ -22,7 +22,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); @@ -168,7 +168,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); --- a/tests/src/createMultipleItemsEx.test.ts +++ b/tests/src/createMultipleItemsEx.test.ts @@ -25,7 +25,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -268,7 +268,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); --- a/tests/src/creditFeesToTreasury.test.ts +++ b/tests/src/creditFeesToTreasury.test.ts @@ -50,7 +50,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); --- a/tests/src/destroyCollection.test.ts +++ b/tests/src/destroyCollection.test.ts @@ -22,7 +22,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); @@ -62,7 +62,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); --- a/tests/src/enableDisableTransfer.test.ts +++ b/tests/src/enableDisableTransfer.test.ts @@ -23,7 +23,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); @@ -62,7 +62,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); --- a/tests/src/eth/allowlist.test.ts +++ b/tests/src/eth/allowlist.test.ts @@ -22,7 +22,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -70,7 +70,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); --- a/tests/src/eth/base.test.ts +++ b/tests/src/eth/base.test.ts @@ -29,7 +29,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -82,7 +82,7 @@ before(async () => { await usingEthPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); const [alice] = await helper.arrange.createAccounts([10n], donor); ({collectionId: collection} = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'})); minter = helper.eth.createAccount(); --- a/tests/src/eth/collectionAdmin.test.ts +++ b/tests/src/eth/collectionAdmin.test.ts @@ -32,7 +32,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -144,7 +144,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -272,7 +272,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -314,7 +314,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); --- a/tests/src/eth/collectionProperties.test.ts +++ b/tests/src/eth/collectionProperties.test.ts @@ -1,3 +1,19 @@ +// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. +// This file is part of Unique Network. + +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Unique Network is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Unique Network. If not, see . + import {itEth, usingEthPlaygrounds, expect} from './util/playgrounds'; import {IKeyringPair} from '@polkadot/types/types'; @@ -7,7 +23,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await _helper.arrange.createAccounts([10n], donor); }); }); --- a/tests/src/eth/createNFTCollection.test.ts +++ b/tests/src/eth/createNFTCollection.test.ts @@ -24,7 +24,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -150,7 +150,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); --- a/tests/src/eth/createRFTCollection.test.ts +++ b/tests/src/eth/createRFTCollection.test.ts @@ -26,7 +26,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -152,7 +152,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); --- a/tests/src/eth/crossTransfer.test.ts +++ b/tests/src/eth/crossTransfer.test.ts @@ -26,7 +26,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); @@ -69,7 +69,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); --- a/tests/src/eth/fractionalizer/fractionalizer.test.ts +++ b/tests/src/eth/fractionalizer/fractionalizer.test.ts @@ -85,7 +85,7 @@ before(async function() { await usingEthPlaygrounds(async (helper: EthUniqueHelper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -225,7 +225,7 @@ before(async function() { await usingEthPlaygrounds(async (helper: EthUniqueHelper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); --- a/tests/src/eth/fungible.test.ts +++ b/tests/src/eth/fungible.test.ts @@ -23,7 +23,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([20n], donor); }); }); @@ -55,7 +55,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([20n], donor); }); }); @@ -224,7 +224,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([20n], donor); }); }); @@ -277,7 +277,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([20n], donor); }); }); --- a/tests/src/eth/helpersSmoke.test.ts +++ b/tests/src/eth/helpersSmoke.test.ts @@ -22,7 +22,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); --- a/tests/src/eth/migration.test.ts +++ b/tests/src/eth/migration.test.ts @@ -22,7 +22,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - superuser = privateKey('//Alice'); + superuser = await privateKey('//Alice'); }); }); --- a/tests/src/eth/nesting/nest.test.ts +++ b/tests/src/eth/nesting/nest.test.ts @@ -21,7 +21,7 @@ before(async function() { await usingEthPlaygrounds(async (_, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); --- a/tests/src/eth/nonFungible.test.ts +++ b/tests/src/eth/nonFungible.test.ts @@ -25,7 +25,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); @@ -75,7 +75,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -137,7 +137,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); @@ -318,7 +318,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); @@ -371,7 +371,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([20n], donor); }); }); @@ -496,7 +496,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([20n], donor); }); }); --- a/tests/src/eth/payable.test.ts +++ b/tests/src/eth/payable.test.ts @@ -23,7 +23,7 @@ before(async function() { await usingEthPlaygrounds(async (_, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -68,7 +68,7 @@ expect(await contract.methods.getUnaccounted().call()).to.be.equal(weiCount.toString()); }); - itEth('Balance can be retrieved from evm contract', async({helper, privateKey}) => { + itEth('Balance can be retrieved from evm contract', async({helper}) => { const FEE_BALANCE = 10n * helper.balance.getOneTokenNominal(); const CONTRACT_BALANCE = 1n * helper.balance.getOneTokenNominal(); @@ -80,7 +80,7 @@ await web3.eth.sendTransaction({from: deployer, to: contract.options.address, value: CONTRACT_BALANCE.toString(), gas: helper.eth.DEFAULT_GAS}); - const receiver = privateKey(`//Receiver${Date.now()}`); + const [receiver] = await helper.arrange.createAccounts([0n], donor); // First receive balance on eth balance of bob { @@ -110,7 +110,7 @@ before(async function() { await usingEthPlaygrounds(async (_, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); --- a/tests/src/eth/proxy/fungibleProxy.test.ts +++ b/tests/src/eth/proxy/fungibleProxy.test.ts @@ -38,7 +38,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); @@ -77,7 +77,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); --- a/tests/src/eth/proxy/nonFungibleProxy.test.ts +++ b/tests/src/eth/proxy/nonFungibleProxy.test.ts @@ -38,7 +38,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); @@ -95,7 +95,7 @@ before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); @@ -139,7 +139,7 @@ }); //TODO: CORE-302 add eth methods - itWeb3.skip('Can perform mintBulk()', async ({web3, api, privateKeyWrapper}) => { + itWeb3.skip('Can perform mintBulk()', async () => { /* const collection = await createCollectionExpectSuccess({ mode: {type: 'NFT'}, --- a/tests/src/eth/reFungible.test.ts +++ b/tests/src/eth/reFungible.test.ts @@ -25,7 +25,7 @@ await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -117,7 +117,7 @@ await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -329,7 +329,7 @@ await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -370,7 +370,7 @@ await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([20n], donor); }); }); --- a/tests/src/eth/reFungibleToken.test.ts +++ b/tests/src/eth/reFungibleToken.test.ts @@ -28,7 +28,7 @@ await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([20n], donor); }); }); @@ -72,7 +72,7 @@ await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); @@ -136,7 +136,7 @@ await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([50n], donor); }); }); @@ -327,7 +327,7 @@ await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([50n], donor); }); }); @@ -382,7 +382,7 @@ await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([50n], donor); }); }); @@ -472,7 +472,7 @@ await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); --- a/tests/src/eth/tokenProperties.test.ts +++ b/tests/src/eth/tokenProperties.test.ts @@ -1,94 +1,116 @@ -import {addCollectionAdminExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess} from '../util/helpers'; -import {cartesian, collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3} from './util/helpers'; -import nonFungibleAbi from './nonFungibleAbi.json'; -import {expect} from 'chai'; -import {executeTransaction} from '../substrate/substrate-api'; +// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. +// This file is part of Unique Network. + +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Unique Network is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Unique Network. If not, see . + +import {itEth, usingEthPlaygrounds, expect, cartesian} from './util/playgrounds'; +import {IKeyringPair} from '@polkadot/types/types'; describe('EVM token properties', () => { - itWeb3('Can be reconfigured', async({web3, api, privateKeyWrapper}) => { - const alice = privateKeyWrapper('//Alice'); - const caller = await createEthAccountWithBalance(api, web3, privateKeyWrapper); + let donor: IKeyringPair; + let alice: IKeyringPair; + + before(async function() { + await usingEthPlaygrounds(async (helper, privateKey) => { + donor = await privateKey({filename: __filename}); + [alice] = await helper.arrange.createAccounts([100n], donor); + }); + }); + + itEth('Can be reconfigured', async({helper}) => { + const caller = await helper.eth.createAccountWithBalance(donor); for(const [mutable,collectionAdmin, tokenOwner] of cartesian([], [false, true], [false, true], [false, true])) { - const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}}); - await addCollectionAdminExpectSuccess(alice, collection, {Ethereum: caller}); + const collection = await helper.nft.mintCollection(alice); + await collection.addAdmin(alice, {Ethereum: caller}); - const address = collectionIdToAddress(collection); - const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}); + const address = helper.ethAddress.fromCollectionId(collection.collectionId); + const contract = helper.ethNativeContract.collection(address, 'nft', caller); await contract.methods.setTokenPropertyPermission('testKey', mutable, collectionAdmin, tokenOwner).send({from: caller}); - const state = (await api.query.common.collectionPropertyPermissions(collection)).toJSON(); - expect(state).to.be.deep.equal({ - [web3.utils.toHex('testKey')]: {mutable, collectionAdmin, tokenOwner}, - }); + expect(await collection.getPropertyPermissions()).to.be.deep.equal([{ + key: 'testKey', + permission: {mutable, collectionAdmin, tokenOwner}, + }]); } }); - itWeb3('Can be set', async({web3, api, privateKeyWrapper}) => { - const alice = privateKeyWrapper('//Alice'); - const caller = await createEthAccountWithBalance(api, web3, privateKeyWrapper); - const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}}); - const token = await createItemExpectSuccess(alice, collection, 'NFT'); - await executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, [{ + itEth('Can be set', async({helper}) => { + const caller = await helper.eth.createAccountWithBalance(donor); + const collection = await helper.nft.mintCollection(alice); + const token = await collection.mintToken(alice); + + await collection.setTokenPropertyPermissions(alice, [{ key: 'testKey', permission: { collectionAdmin: true, }, - }])); + }]); - await addCollectionAdminExpectSuccess(alice, collection, {Ethereum: caller}); + await collection.addAdmin(alice, {Ethereum: caller}); - const address = collectionIdToAddress(collection); - const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}); + const address = helper.ethAddress.fromCollectionId(collection.collectionId); + const contract = helper.ethNativeContract.collection(address, 'nft', caller); - await contract.methods.setProperty(token, 'testKey', Buffer.from('testValue')).send({from: caller}); + await contract.methods.setProperty(token.tokenId, 'testKey', Buffer.from('testValue')).send({from: caller}); - const [{value}] = (await api.rpc.unique.tokenProperties(collection, token, ['testKey'])).toHuman()! as any; + const [{value}] = await token.getProperties(['testKey']); expect(value).to.equal('testValue'); }); - itWeb3('Can be deleted', async({web3, api, privateKeyWrapper}) => { - const alice = privateKeyWrapper('//Alice'); - const caller = await createEthAccountWithBalance(api, web3, privateKeyWrapper); - const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}}); - const token = await createItemExpectSuccess(alice, collection, 'NFT'); - await executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, [{ + itEth('Can be deleted', async({helper}) => { + const caller = await helper.eth.createAccountWithBalance(donor); + const collection = await helper.nft.mintCollection(alice); + const token = await collection.mintToken(alice); + + await collection.setTokenPropertyPermissions(alice, [{ key: 'testKey', permission: { mutable: true, collectionAdmin: true, }, - }])); - await executeTransaction(api, alice, api.tx.unique.setTokenProperties(collection, token, [{key: 'testKey', value: 'testValue'}])); + }]); + await token.setProperties(alice, [{key: 'testKey', value: 'testValue'}]); - await addCollectionAdminExpectSuccess(alice, collection, {Ethereum: caller}); + await collection.addAdmin(alice, {Ethereum: caller}); - const address = collectionIdToAddress(collection); - const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}); + const address = helper.ethAddress.fromCollectionId(collection.collectionId); + const contract = helper.ethNativeContract.collection(address, 'nft', caller); - await contract.methods.deleteProperty(token, 'testKey').send({from: caller}); + await contract.methods.deleteProperty(token.tokenId, 'testKey').send({from: caller}); - const result = (await api.rpc.unique.tokenProperties(collection, token, ['testKey'])).toJSON()! as any; + const result = await token.getProperties(['testKey']); expect(result.length).to.equal(0); }); - itWeb3('Can be read', async({web3, api, privateKeyWrapper}) => { - const alice = privateKeyWrapper('//Alice'); - const caller = createEthAccount(web3); - const collection = await createCollectionExpectSuccess({mode: {type:'NFT'}}); - const token = await createItemExpectSuccess(alice, collection, 'NFT'); - await executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, [{ + itEth('Can be read', async({helper}) => { + const caller = helper.eth.createAccount(); + const collection = await helper.nft.mintCollection(alice); + const token = await collection.mintToken(alice); + + await collection.setTokenPropertyPermissions(alice, [{ key: 'testKey', permission: { collectionAdmin: true, }, - }])); - await executeTransaction(api, alice, api.tx.unique.setTokenProperties(collection, token, [{key: 'testKey', value: 'testValue'}])); + }]); + await token.setProperties(alice, [{key: 'testKey', value: 'testValue'}]); - const address = collectionIdToAddress(collection); - const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}); + const address = helper.ethAddress.fromCollectionId(collection.collectionId); + const contract = helper.ethNativeContract.collection(address, 'nft', caller); - const value = await contract.methods.property(token, 'testKey').call(); - expect(value).to.equal(web3.utils.toHex('testValue')); + const value = await contract.methods.property(token.tokenId, 'testKey').call(); + expect(value).to.equal(helper.getWeb3().utils.toHex('testValue')); }); }); --- a/tests/src/eth/util/playgrounds/index.ts +++ b/tests/src/eth/util/playgrounds/index.ts @@ -1,6 +1,7 @@ // Copyright 2019-2022 Unique Network (Gibraltar) Ltd. // SPDX-License-Identifier: Apache-2.0 +import * as path from 'path'; import {IKeyringPair} from '@polkadot/types/types'; import config from '../../../config'; @@ -13,12 +14,13 @@ import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import chaiLike from 'chai-like'; -import {requirePalletsOrSkip} from '../../../util/playgrounds'; +import {getTestSeed, requirePalletsOrSkip} from '../../../util/playgrounds'; + chai.use(chaiAsPromised); chai.use(chaiLike); export const expect = chai.expect; -export const usingEthPlaygrounds = async (code: (helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair) => Promise) => { +export const usingEthPlaygrounds = async (code: (helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise) => Promise) => { const silentConsole = new SilentConsole(); silentConsole.enable(); @@ -28,7 +30,20 @@ await helper.connect(config.substrateUrl); await helper.connectWeb3(config.substrateUrl); const ss58Format = helper.chain.getChainProperties().ss58Format; - const privateKey = (seed: string) => helper.util.fromSeed(seed, ss58Format); + const privateKey = async (seed: string | {filename: string}) => { + if (typeof seed === 'string') { + return helper.util.fromSeed(seed, ss58Format); + } + else { + const actualSeed = getTestSeed(seed.filename); + let account = helper.util.fromSeed(actualSeed, ss58Format); + if (await helper.balance.getSubstrate(account.address) == 0n) { + console.warn(`${path.basename(seed.filename)}: Not enough funds present on the filename account. Using the default one as the donor instead.`); + account = helper.util.fromSeed('//Alice', ss58Format); + } + return account; + } + }; await code(helper, privateKey); } finally { @@ -38,7 +53,7 @@ } }; -export async function itEth(name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { +export async function itEth(name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { (opts.only ? it.only : opts.skip ? it.skip : it)(name, async function() { await usingEthPlaygrounds(async (helper, privateKey) => { @@ -51,13 +66,25 @@ }); } -export async function itEthIfWithPallet(name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { +export async function itEthIfWithPallet(name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { return itEth(name, cb, {requiredPallets: required, ...opts}); } -itEth.only = (name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itEth(name, cb, {only: true}); -itEth.skip = (name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itEth(name, cb, {skip: true}); +itEth.only = (name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any) => itEth(name, cb, {only: true}); +itEth.skip = (name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any) => itEth(name, cb, {skip: true}); -itEthIfWithPallet.only = (name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itEthIfWithPallet(name, required, cb, {only: true}); -itEthIfWithPallet.skip = (name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itEthIfWithPallet(name, required, cb, {skip: true}); +itEthIfWithPallet.only = (name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any) => itEthIfWithPallet(name, required, cb, {only: true}); +itEthIfWithPallet.skip = (name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any) => itEthIfWithPallet(name, required, cb, {skip: true}); itEth.ifWithPallets = itEthIfWithPallet; + +type ElementOf = A extends readonly (infer T)[] ? T : never; +// I want a fancier api, not a memory efficiency +export function* cartesian>, R extends Array>(internalRest: [...R], ...args: [...T]): Generator<[...R, ...{[K in keyof T]: ElementOf}]> { + if(args.length === 0) { + yield internalRest as any; + return; + } + for(const value of args[0]) { + yield* cartesian([...internalRest, value], ...args.slice(1)) as any; + } +} --- a/tests/src/evmCoder.test.ts +++ b/tests/src/evmCoder.test.ts @@ -92,7 +92,7 @@ before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); --- a/tests/src/fungible.test.ts +++ b/tests/src/fungible.test.ts @@ -20,12 +20,13 @@ const U128_MAX = (1n << 128n) - 1n; describe('integration test: Fungible functionality:', () => { + let donor: IKeyringPair; let alice: IKeyringPair; let bob: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor); }); }); @@ -43,9 +44,9 @@ expect(aliceBalance).to.be.equal(U128_MAX); }); - itSub('RPC method tokenOnewrs for fungible collection and token', async ({helper, privateKey}) => { + itSub('RPC method tokenOnewrs for fungible collection and token', async ({helper}) => { const ethAcc = {Ethereum: '0x67fb3503a61b284dc83fa96dceec4192db47dc7c'}; - const facelessCrowd = Array(7).fill(0).map((_, i) => ({Substrate: privateKey(`//Alice+${i}`).address})); + const facelessCrowd = (await helper.arrange.createAccounts(Array(7).fill(0n), donor)).map(keyring => {return {Substrate: keyring.address};}); const collection = await helper.ft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'}); @@ -64,7 +65,7 @@ expect(owners).to.deep.include.members([{Substrate: alice.address}, ethAcc, {Substrate: bob.address}, ...facelessCrowd]); expect(owners.length).to.be.equal(10); - const eleven = privateKey('//ALice+11'); + const [eleven] = await helper.arrange.createAccounts([0n], donor); expect(await collection.transfer(alice, {Substrate: eleven.address}, 10n)).to.be.true; expect((await collection.getTop10Owners()).length).to.be.equal(10); }); --- a/tests/src/getPropertiesRpc.test.ts +++ b/tests/src/getPropertiesRpc.test.ts @@ -63,7 +63,7 @@ before(async () => { await usingPlaygrounds(async (_, privateKey) => { - alice = privateKey('//Alice'); + alice = await privateKey({filename: __filename}); }); }); --- a/tests/src/inflation.test.ts +++ b/tests/src/inflation.test.ts @@ -23,7 +23,7 @@ before(async () => { await usingPlaygrounds(async (_, privateKey) => { - superuser = privateKey('//Alice'); + superuser = await privateKey('//Alice'); }); }); --- a/tests/src/limits.test.ts +++ b/tests/src/limits.test.ts @@ -22,7 +22,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); @@ -60,7 +60,7 @@ await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); @@ -292,7 +292,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); @@ -333,7 +333,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); @@ -366,7 +366,7 @@ await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); @@ -404,7 +404,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); --- a/tests/src/nesting/graphs.test.ts +++ b/tests/src/nesting/graphs.test.ts @@ -45,7 +45,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); --- a/tests/src/nesting/nest.test.ts +++ b/tests/src/nesting/nest.test.ts @@ -23,7 +23,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor); }); }); @@ -137,7 +137,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([50n, 10n, 10n], donor); }); }); @@ -343,7 +343,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 50n], donor); }); }); --- a/tests/src/nesting/properties.test.ts +++ b/tests/src/nesting/properties.test.ts @@ -26,7 +26,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor); }); }); @@ -141,7 +141,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor); }); }); @@ -269,7 +269,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor); }); }); @@ -332,7 +332,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor); }); }); @@ -453,7 +453,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); @@ -777,7 +777,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); let dave: IKeyringPair; [alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor); @@ -977,7 +977,7 @@ await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -1002,7 +1002,7 @@ ])).to.be.rejectedWith(/common\.NoPermission/); }); - itSub('Forbids mutating token property with tokenOwher==true when signer doesn\'t have all pieces', async ({helper}) => { + itSub('Forbids mutating token property with tokenOwner==true when signer doesn\'t have all pieces', async ({helper}) => { const token = await prepare(helper); await expect(token.collection.setTokenPropertyPermissions(alice, [{key: 'fractals', permission: {mutable:true, tokenOwner: true}}])) --- a/tests/src/nesting/unnest.test.ts +++ b/tests/src/nesting/unnest.test.ts @@ -22,7 +22,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice] = await helper.arrange.createAccounts([50n], donor); }); }); @@ -91,7 +91,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor); }); }); --- a/tests/src/nextSponsoring.test.ts +++ b/tests/src/nextSponsoring.test.ts @@ -25,7 +25,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor); }); }); --- a/tests/src/refungible.test.ts +++ b/tests/src/refungible.test.ts @@ -20,6 +20,7 @@ const MAX_REFUNGIBLE_PIECES = 1_000_000_000_000_000_000_000n; describe('integration test: Refungible functionality:', async () => { + let donor: IKeyringPair; let alice: IKeyringPair; let bob: IKeyringPair; @@ -27,7 +28,7 @@ await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - const donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor); }); }); @@ -61,9 +62,9 @@ .to.eventually.be.rejectedWith(/refungible\.WrongRefungiblePieces/); }); - itSub('RPC method tokenOnewrs for refungible collection and token', async ({helper, privateKey}) => { + itSub('RPC method tokenOnewrs for refungible collection and token', async ({helper}) => { const ethAcc = {Ethereum: '0x67fb3503a61b284dc83fa96dceec4192db47dc7c'}; - const facelessCrowd = Array(7).fill(0).map((_, i) => ({Substrate: privateKey(`//Alice+${i}`).address})); + const facelessCrowd = (await helper.arrange.createAccounts(Array(7).fill(0n), donor)).map(keyring => {return {Substrate: keyring.address};}); const collection = await helper.rft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'}); @@ -82,7 +83,7 @@ expect(owners).to.deep.include.members([{Substrate: alice.address}, ethAcc, {Substrate: bob.address}, ...facelessCrowd]); expect(owners.length).to.be.equal(10); - const eleven = privateKey('//ALice+11'); + const [eleven] = await helper.arrange.createAccounts([0n], donor); expect(await token.transfer(alice, {Substrate: eleven.address}, 10n)).to.be.true; expect((await token.getTop10Owners()).length).to.be.equal(10); }); --- a/tests/src/removeCollectionAdmin.test.ts +++ b/tests/src/removeCollectionAdmin.test.ts @@ -23,7 +23,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor); }); }); @@ -62,7 +62,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor); }); }); --- a/tests/src/removeCollectionSponsor.test.ts +++ b/tests/src/removeCollectionSponsor.test.ts @@ -24,7 +24,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor); }); }); @@ -78,7 +78,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor); }); }); --- a/tests/src/rpc.test.ts +++ b/tests/src/rpc.test.ts @@ -25,7 +25,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor); }); }); --- a/tests/src/setCollectionLimits.test.ts +++ b/tests/src/setCollectionLimits.test.ts @@ -29,7 +29,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor); }); }); @@ -104,7 +104,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor); }); }); --- a/tests/src/setCollectionSponsor.test.ts +++ b/tests/src/setCollectionSponsor.test.ts @@ -24,7 +24,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor); }); }); @@ -93,7 +93,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([10n, 5n], donor); }); }); --- a/tests/src/setPermissions.test.ts +++ b/tests/src/setPermissions.test.ts @@ -23,7 +23,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor); }); }); @@ -79,7 +79,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor); }); }); --- a/tests/src/transfer.test.ts +++ b/tests/src/transfer.test.ts @@ -19,12 +19,13 @@ import {itSub, Pallets, usingPlaygrounds, expect} from './util/playgrounds'; describe('Integration Test Transfer(recipient, collection_id, item_id, value)', () => { + let donor: IKeyringPair; let alice: IKeyringPair; let bob: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor); }); }); @@ -42,8 +43,7 @@ expect(bobsBalanceAfter > bobsBalanceBefore).to.be.true; }); - itSub('Inability to pay fees error message is correct', async ({helper, privateKey}) => { - const donor = privateKey('//Alice'); + itSub('Inability to pay fees error message is correct', async ({helper}) => { const [zero] = await helper.arrange.createAccounts([0n], donor); // console.error = () => {}; @@ -117,7 +117,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor); }); }); @@ -256,7 +256,7 @@ before(async function() { await usingEthPlaygrounds(async (_, privateKey) => { - donor = privateKey('//Alice'); + donor = await privateKey({filename: __filename}); }); }); --- a/tests/src/transferFrom.test.ts +++ b/tests/src/transferFrom.test.ts @@ -24,7 +24,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor); }); }); @@ -91,7 +91,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = privateKey('//Alice'); + const donor = await privateKey({filename: __filename}); [alice, bob, charlie] = await helper.arrange.createAccounts([50n, 10n, 10n], donor); }); }); --- /dev/null +++ b/tests/src/util/playgrounds/feedAlices.ts @@ -0,0 +1,77 @@ +// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +import * as path from 'path'; +import {promises as fs} from 'fs'; +import {usingPlaygrounds} from '.'; + +async function getFiles(rootPath: string): Promise { + const files = await fs.readdir(rootPath, {withFileTypes: true}); + const filenames: string[] = []; + for (const entry of files) { + const res = path.resolve(rootPath, entry.name); + if (entry.isDirectory()) { + filenames.push(...await getFiles(res)); + } else { + filenames.push(res); + } + } + return filenames; +} + +const fundFilenames = async () => { + await usingPlaygrounds(async (helper, privateKey) => { + const oneToken = helper.balance.getOneTokenNominal(); + const alice = await privateKey('//Alice'); + const nonce = await helper.chain.getNonce(alice.address); + const filenames = await getFiles(path.resolve(__dirname, '../..')); + + console.log(`Main Alice address: ${alice.address}, with balance:`, await helper.balance.getSubstrate(alice.address)); + + const batchSize = 20; + let balanceGrantedCounter = 0; + for (let b = 0; b < filenames.length; b += batchSize) { + const tx = []; + let batchBalanceGrantedCounter = 0; + for (const f of filenames.slice(b, b + batchSize)) { + if (!f.endsWith('.test.ts')) continue; + const account = await privateKey({filename: f}); + const aliceBalance = await helper.balance.getSubstrate(account.address); + + if (aliceBalance < 5000n * oneToken) { + tx.push(helper.executeExtrinsic( + alice, + 'api.tx.balances.transfer', + [account.address, 10000n * oneToken], + true, + {nonce: nonce + balanceGrantedCounter++}, + ).then(() => true).catch(() => {console.error(`Transaction to ${path.basename(f)} registered as failed. Strange.`); return false;})); + batchBalanceGrantedCounter++; + } + } + + if(tx.length > 0) { + console.log(`Granting funds to ${batchBalanceGrantedCounter} filename accounts.`); + const result = await Promise.all(tx); + if (result && result.lastIndexOf(false) > -1) throw new Error('The transactions actually probably succeeded, should check the balances.'); + } + } + + if (balanceGrantedCounter == 0) console.log('No account needs additional funding.'); + }); +}; + +const fundFilenamesWithRetries = async (retriesLeft: number): Promise => { + if (retriesLeft <= 0) return Promise.resolve(false); + return fundFilenames() + .then(() => Promise.resolve(true)) + .catch(() => { + console.error(`Some transactions have failed. ${retriesLeft >= 1 ? 'Retrying...' : 'Something is wrong.'}`); + return fundFilenamesWithRetries(--retriesLeft); + }); +}; + +fundFilenamesWithRetries(2).then((result) => process.exit(result ? 0 : 1)).catch(e => { + console.error(e); + process.exit(1); +}); --- a/tests/src/util/playgrounds/index.ts +++ b/tests/src/util/playgrounds/index.ts @@ -1,6 +1,8 @@ // Copyright 2019-2022 Unique Network (Gibraltar) Ltd. // SPDX-License-Identifier: Apache-2.0 +import * as path from 'path'; +import * as crypto from 'crypto'; import {IKeyringPair} from '@polkadot/types/types'; import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; @@ -12,7 +14,16 @@ chai.use(chaiAsPromised); export const expect = chai.expect; -export const usingPlaygrounds = async (code: (helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair) => Promise, url: string = config.substrateUrl) => { +const getTestHash = (filename: string) => { + return crypto.createHash('md5').update(path.basename(filename)).digest('hex'); +}; + +export const getTestSeed = (filename: string) => { + return `//Alice+${getTestHash(filename)}`; +}; + +// todo:playgrounds normalize to seed and filename +export const usingPlaygrounds = async (code: (helper: DevUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise) => Promise, url: string = config.substrateUrl) => { const silentConsole = new SilentConsole(); silentConsole.enable(); @@ -21,7 +32,20 @@ try { await helper.connect(url); const ss58Format = helper.chain.getChainProperties().ss58Format; - const privateKey = (seed: string) => helper.util.fromSeed(seed, ss58Format); + const privateKey = async (seed: string | {filename: string}) => { + if (typeof seed === 'string') { + return helper.util.fromSeed(seed, ss58Format); + } + else { + const actualSeed = getTestSeed(seed.filename); + let account = helper.util.fromSeed(actualSeed, ss58Format); + if (await helper.balance.getSubstrate(account.address) == 0n) { + console.warn(`${path.basename(seed.filename)}: Not enough funds present on the filename account. Using the default one as the donor instead.`); + account = helper.util.fromSeed('//Alice', ss58Format); + } + return account; + } + }; await code(helper, privateKey); } finally { @@ -50,7 +74,7 @@ } } -export async function itSub(name: string, cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { +export async function itSub(name: string, cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => Promise }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { (opts.only ? it.only : opts.skip ? it.skip : it)(name, async function () { await usingPlaygrounds(async (helper, privateKey) => { @@ -62,12 +86,12 @@ }); }); } -export async function itSubIfWithPallet(name: string, required: string[], cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { +export async function itSubIfWithPallet(name: string, required: string[], cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => Promise }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { return itSub(name, cb, {requiredPallets: required, ...opts}); } -itSub.only = (name: string, cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itSub(name, cb, {only: true}); -itSub.skip = (name: string, cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itSub(name, cb, {skip: true}); +itSub.only = (name: string, cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => Promise }) => any) => itSub(name, cb, {only: true}); +itSub.skip = (name: string, cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => Promise }) => any) => itSub(name, cb, {skip: true}); -itSubIfWithPallet.only = (name: string, required: string[], cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itSubIfWithPallet(name, required, cb, {only: true}); -itSubIfWithPallet.skip = (name: string, required: string[], cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => IKeyringPair }) => any) => itSubIfWithPallet(name, required, cb, {skip: true}); +itSubIfWithPallet.only = (name: string, required: string[], cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => Promise }) => any) => itSubIfWithPallet(name, required, cb, {only: true}); +itSubIfWithPallet.skip = (name: string, required: string[], cb: (apis: { helper: DevUniqueHelper, privateKey: (seed: string) => Promise }) => any) => itSubIfWithPallet(name, required, cb, {skip: true}); itSub.ifWithPallets = itSubIfWithPallet; -- gitstuff