git.delta.rocks / unique-network / refs/commits / fced7659a53c

difftreelog

Tests can build

Greg Zaitsev2021-06-25parent: #90fcef9.patch.diff
in: master

8 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -5996,34 +5996,34 @@
 [[package]]
 name = "pallet-scheduler"
 version = "3.0.0"
+source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
  "parity-scale-codec 2.1.3",
- "serde",
- "sp-core",
  "sp-io",
  "sp-runtime",
  "sp-std",
- "substrate-test-utils",
- "up-sponsorship",
 ]
 
 [[package]]
 name = "pallet-scheduler"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
  "parity-scale-codec 2.1.3",
+ "serde",
+ "sp-core",
  "sp-io",
  "sp-runtime",
  "sp-std",
+ "substrate-test-utils",
+ "up-sponsorship",
 ]
 
 [[package]]
modifiedlaunch-config.jsondiffbeforeafterboth
--- a/launch-config.json
+++ b/launch-config.json
@@ -45,8 +45,15 @@
                     "nodes": [
                             {
                                     "port": 31200,
+                                    "wsPort": "9944",
                                     "name": "alice",
                                     "flags": []
+                            },
+                            {
+                                    "port": 31201,
+                                    "wsPort": "9945",
+                                    "name": "bob",
+                                    "flags": []
                             }
                     ]
             }
modifiedruntime/src/lib.rsdiffbeforeafterboth
--- a/runtime/src/lib.rs
+++ b/runtime/src/lib.rs
@@ -216,7 +216,7 @@
 /// by  Operational  extrinsics.
 const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75);
 /// We allow for 2 seconds of compute with a 6 second average block time.
-const MAXIMUM_BLOCK_WEIGHT: Weight = 2 * WEIGHT_PER_SECOND;
+const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND / 2;
 
 parameter_types! {
 	pub const BlockHashCount: BlockNumber = 2400;
modifiedtests/src/config.tsdiffbeforeafterboth
--- a/tests/src/config.ts
+++ b/tests/src/config.ts
@@ -6,7 +6,7 @@
 import process from 'process';
 
 const config = {
-  substrateUrl: process.env.substrateUrl || 'ws://127.0.0.1:9844'
+  substrateUrl: process.env.substrateUrl || 'ws://127.0.0.1:9944'
 }
 
 export default config;
\ No newline at end of file
modifiedtests/src/contracts.test.tsdiffbeforeafterboth
before · tests/src/contracts.test.ts
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import chai from "chai";7import chaiAsPromised from 'chai-as-promised';8import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from "./substrate/substrate-api";9import fs from "fs";10import { Abi, ContractPromise as Contract } from "@polkadot/api-contract";11import privateKey from "./substrate/privateKey";12import {13  deployFlipper,14  getFlipValue,15  deployTransferContract,16} from "./util/contracthelpers";1718import {19  addToWhiteListExpectSuccess,20  approveExpectSuccess,21  createCollectionExpectSuccess,22  createItemExpectSuccess,23  enablePublicMintingExpectSuccess,24  enableWhiteListExpectSuccess,25  getGenericResult,26  normalizeAccountId,27  isWhitelisted,28  transferFromExpectSuccess29} from "./util/helpers";303132chai.use(chaiAsPromised);33const expect = chai.expect;3435const value = 0;36const gasLimit = 9000n * 1000000n;37const marketContractAddress = '5CYN9j3YvRkqxewoxeSvRbhAym4465C57uMmX5j4yz99L5H6';3839describe('Contracts', () => {40  it(`Can deploy smart contract Flipper, instantiate it and call it's get and flip messages.`, async () => {41    await usingApi(async api => {42      const [contract, deployer] = await deployFlipper(api);43      const initialGetResponse = await getFlipValue(contract, deployer);4445      const bob = privateKey("//Bob");46      const flip = contract.tx.flip(value, gasLimit);47      await submitTransactionAsync(bob, flip);4849      const afterFlipGetResponse = await getFlipValue(contract, deployer);50      expect(afterFlipGetResponse).not.to.be.eq(initialGetResponse, 'Flipping should change value.');51    });52  });5354  it('Can initialize contract instance', async () => {55    await usingApi(async (api) => {56      const metadata = JSON.parse(fs.readFileSync('./src/flipper/metadata.json').toString('utf-8'));57      const abi = new Abi(metadata);58      const newContractInstance = new Contract(api, abi, marketContractAddress);59      expect(newContractInstance).to.have.property('address');60      expect(newContractInstance.address.toString()).to.equal(marketContractAddress);61    });62  });63});6465describe.only('Chain extensions', () => {66  it('Transfer CE', async () => {67    await usingApi(async api => {68      const alice = privateKey("//Alice");69      const bob = privateKey("//Bob");7071      // Prep work72      const collectionId = await createCollectionExpectSuccess();73      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');74      const [contract, deployer] = await deployTransferContract(api);75      const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, contract.address);76      await submitTransactionAsync(alice, changeAdminTx);7778      const tokenBefore: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON();79      80      // Transfer81      const transferTx = contract.tx.transfer(value, gasLimit, bob.address, collectionId, tokenId, 1);82      const events = await submitTransactionAsync(alice, transferTx);83      const result = getGenericResult(events);84      const tokenAfter: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON();8586      // tslint:disable-next-line:no-unused-expression87      expect(result.success).to.be.true;88      expect(tokenBefore.Owner).to.be.deep.equal(normalizeAccountId(alice.address));89      expect(tokenAfter.Owner).to.be.deep.equal(normalizeAccountId(bob.address));90    });91  });9293  it('Mint CE', async () => {94    await usingApi(async api => {95      const alice = privateKey('//Alice');96      const bob = privateKey('//Bob');9798      const collectionId = await createCollectionExpectSuccess();99      const [contract, deployer] = await deployTransferContract(api);100      await enablePublicMintingExpectSuccess(alice, collectionId);101      await enableWhiteListExpectSuccess(alice, collectionId);102      await addToWhiteListExpectSuccess(alice, collectionId, contract.address);103      await addToWhiteListExpectSuccess(alice, collectionId, bob.address);104105      const transferTx = contract.tx.createItem(value, gasLimit, bob.address, collectionId, { Nft: {const_data: '0x010203', variable_data: '0x020304' }});106      const events = await submitTransactionAsync(alice, transferTx);107      const result = getGenericResult(events);108      expect(result.success).to.be.true;109110      const tokensAfter: any = (await api.query.nft.nftItemList.entries(collectionId) as any).map((kv: any) => kv[1].toJSON());111      expect(tokensAfter).to.be.deep.equal([112        {113          Owner: bob.address,114          ConstData: '0x010203',115          VariableData: '0x020304',116        },117      ]);118    });119  });120121  it('Bulk mint CE', async () => {122    await usingApi(async api => {123      const alice = privateKey('//Alice');124      const bob = privateKey('//Bob');125126      const collectionId = await createCollectionExpectSuccess();127      const [contract, deployer] = await deployTransferContract(api);128      await enablePublicMintingExpectSuccess(alice, collectionId);129      await enableWhiteListExpectSuccess(alice, collectionId);130      await addToWhiteListExpectSuccess(alice, collectionId, contract.address);131      await addToWhiteListExpectSuccess(alice, collectionId, bob.address);132133      const transferTx = contract.tx.createMultipleItems(value, gasLimit, bob.address, collectionId, [134        { Nft: { const_data: '0x010203', variable_data: '0x020304' } },135        { Nft: { const_data: '0x010204', variable_data: '0x020305' } },136        { Nft: { const_data: '0x010205', variable_data: '0x020306' } }137      ]);138      const events = await submitTransactionAsync(alice, transferTx);139      const result = getGenericResult(events);140      expect(result.success).to.be.true;141142      const tokensAfter: any = (await api.query.nft.nftItemList.entries(collectionId) as any)143        .map((kv: any) => kv[1].toJSON())144        .sort((a: any, b: any) => a.ConstData.localeCompare(b.ConstData));145      expect(tokensAfter).to.be.deep.equal([146        {147          Owner: bob.address,148          ConstData: '0x010203',149          VariableData: '0x020304',150        },151        {152          Owner: bob.address,153          ConstData: '0x010204',154          VariableData: '0x020305',155        },156        {157          Owner: bob.address,158          ConstData: '0x010205',159          VariableData: '0x020306',160        },161      ]);162    });163  });164165  it('Approve CE', async () => {166    await usingApi(async api => {167      const alice = privateKey('//Alice');168      const bob = privateKey('//Bob');169      const charlie = privateKey('//Charlie');170171      const collectionId = await createCollectionExpectSuccess();172      const [contract, deployer] = await deployTransferContract(api);173      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', contract.address.toString());174175      const transferTx = contract.tx.approve(value, gasLimit, bob.address, collectionId, tokenId, 1);176      const events = await submitTransactionAsync(alice, transferTx);177      const result = getGenericResult(events);178      expect(result.success).to.be.true;179180      await transferFromExpectSuccess(collectionId, tokenId, bob, contract.address.toString(), charlie, 1, 'NFT');181    });182  });183184  it('TransferFrom CE', async () => {185    await usingApi(async api => {186      const alice = privateKey('//Alice');187      const bob = privateKey('//Bob');188      const charlie = privateKey('//Charlie');189190      const collectionId = await createCollectionExpectSuccess();191      const [contract, deployer] = await deployTransferContract(api);192      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', bob.address);193      await approveExpectSuccess(collectionId, tokenId, bob, contract.address.toString(), 1);194195      const transferTx = contract.tx.transferFrom(value, gasLimit, bob.address, charlie.address, collectionId, tokenId, 1);196      const events = await submitTransactionAsync(alice, transferTx);197      const result = getGenericResult(events);198      expect(result.success).to.be.true;199200      const token: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap()201      expect(token.Owner.toString()).to.be.equal(charlie.address);202    });203  });204205  it('SetVariableMetaData CE', async () => {206    await usingApi(async api => {207      const alice = privateKey('//Alice');208209      const collectionId = await createCollectionExpectSuccess();210      const [contract, deployer] = await deployTransferContract(api);211      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', contract.address.toString());212213      const transferTx = contract.tx.setVariableMetaData(value, gasLimit, collectionId, tokenId, '0x121314');214      const events = await submitTransactionAsync(alice, transferTx);215      const result = getGenericResult(events);216      expect(result.success).to.be.true;217218      const token: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap()219      expect(token.VariableData.toString()).to.be.equal('0x121314');220    });221  });222223  it('ToggleWhiteList CE', async () => {224    await usingApi(async api => {225      const alice = privateKey('//Alice');226      const bob = privateKey('//Bob');227228      const collectionId = await createCollectionExpectSuccess();229      const [contract, deployer] = await deployTransferContract(api);230      const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, contract.address);231      await submitTransactionAsync(alice, changeAdminTx);      232233      expect(await isWhitelisted(collectionId, bob.address)).to.be.false;234235      {236        const transferTx = contract.tx.toggleWhiteList(value, gasLimit, collectionId, bob.address, true);237        const events = await submitTransactionAsync(alice, transferTx);238        const result = getGenericResult(events);239        expect(result.success).to.be.true;240241        expect(await isWhitelisted(collectionId, bob.address)).to.be.true;242      }243      {244        const transferTx = contract.tx.toggleWhiteList(value, gasLimit, collectionId, bob.address, false);245        const events = await submitTransactionAsync(alice, transferTx);246        const result = getGenericResult(events);247        expect(result.success).to.be.true;248249        expect(await isWhitelisted(collectionId, bob.address)).to.be.false;250      }251    });252  });253});
modifiedtests/src/removeFromWhiteList.test.tsdiffbeforeafterboth
--- a/tests/src/removeFromWhiteList.test.ts
+++ b/tests/src/removeFromWhiteList.test.ts
@@ -16,6 +16,7 @@
   findNotExistingCollection,
   removeFromWhiteListExpectFailure,
   disableWhiteListExpectSuccess,
+  normalizeAccountId
 } from './util/helpers';
 import { IKeyringPair } from '@polkadot/types/types';
 import privateKey from './substrate/privateKey';
@@ -40,7 +41,7 @@
       await enableWhiteListExpectSuccess(alice, collectionId);
       await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
 
-      await removeFromWhiteListExpectSuccess(alice, collectionId, bob.address);
+      await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(bob.address));
       expect(await isWhitelisted(collectionId, bob.address)).to.be.false;
     });
   });
@@ -52,7 +53,7 @@
       await addToWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, bob.address);
       await disableWhiteListExpectSuccess(alice, collectionWithoutWhitelistId);
 
-      await removeFromWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, bob.address);
+      await removeFromWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, normalizeAccountId(bob.address));
     });
   });
 });
@@ -72,7 +73,7 @@
     await usingApi(async (api) => {
       const collectionId = await findNotExistingCollection(api);
 
-      await removeFromWhiteListExpectFailure(alice, collectionId, bob.address);
+      await removeFromWhiteListExpectFailure(alice, collectionId, normalizeAccountId(bob.address));
     });
   });
 
@@ -83,7 +84,7 @@
       await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
       await destroyCollectionExpectSuccess(collectionId);
 
-      await removeFromWhiteListExpectFailure(alice, collectionId, bob.address);
+      await removeFromWhiteListExpectFailure(alice, collectionId, normalizeAccountId(bob.address));
     });
   });
 });
modifiedtests/src/toggleContractWhiteList.test.tsdiffbeforeafterboth
--- a/tests/src/toggleContractWhiteList.test.ts
+++ b/tests/src/toggleContractWhiteList.test.ts
@@ -45,14 +45,14 @@
       const [contract, deployer] = await deployFlipper(api);
 
       let flipValueBefore = await getFlipValue(contract, deployer);
-      const flip = contract.exec('flip', value, gasLimit);
+      const flip = contract.tx.flip(value, gasLimit);
       await submitTransactionAsync(bob, flip);
       const flipValueAfter = await getFlipValue(contract,deployer);
       expect(flipValueAfter).to.be.eq(!flipValueBefore, `Anyone can call new contract.`);
 
       const deployerCanFlip = async () => {
         let flipValueBefore = await getFlipValue(contract, deployer);
-        const deployerFlip = contract.exec('flip', value, gasLimit);
+        const deployerFlip = contract.tx.flip(value, gasLimit);
         await submitTransactionAsync(deployer, deployerFlip);
         const aliceFlip1Response = await getFlipValue(contract, deployer);
         expect(aliceFlip1Response).to.be.eq(!flipValueBefore, `Deployer always can flip.`);
@@ -62,7 +62,7 @@
       flipValueBefore = await getFlipValue(contract, deployer);
       const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, true);
       const enableResult = await submitTransactionAsync(deployer, enableWhiteListTx);
-      const flipWithEnabledWhiteList = contract.exec('flip', value, gasLimit);
+      const flipWithEnabledWhiteList = contract.tx.flip(value, gasLimit);
       await expect(submitTransactionExpectFailAsync(bob, flipWithEnabledWhiteList)).to.be.rejected;
       const flipValueAfterEnableWhiteList = await getFlipValue(contract, deployer);
       expect(flipValueAfterEnableWhiteList).to.be.eq(flipValueBefore, `Enabling whitelist doesn't make it possible to call contract for everyone.`);
@@ -72,7 +72,7 @@
       flipValueBefore = await getFlipValue(contract, deployer);
       const addBobToWhiteListTx = api.tx.nft.addToContractWhiteList(contract.address, bob.address);
       const addBobResult = await submitTransactionAsync(deployer, addBobToWhiteListTx);
-      const flipWithWhitelistedBob = contract.exec('flip', value, gasLimit);
+      const flipWithWhitelistedBob = contract.tx.flip(value, gasLimit);
       await submitTransactionAsync(bob, flipWithWhitelistedBob);
       const flipAfterWhiteListed = await getFlipValue(contract,deployer);
       expect(flipAfterWhiteListed).to.be.eq(!flipValueBefore, `Bob was whitelisted, now he can flip.`);
@@ -82,7 +82,7 @@
       flipValueBefore = await getFlipValue(contract, deployer);
       const removeBobFromWhiteListTx = api.tx.nft.removeFromContractWhiteList(contract.address, bob.address);
       const removeBobResult = await submitTransactionAsync(deployer, removeBobFromWhiteListTx);
-      const bobRemoved = contract.exec('flip', value, gasLimit);
+      const bobRemoved = contract.tx.flip(value, gasLimit);
       await expect(submitTransactionExpectFailAsync(bob, bobRemoved)).to.be.rejected;
       const afterBobRemoved = await getFlipValue(contract, deployer);
       expect(afterBobRemoved).to.be.eq(flipValueBefore, `Bob can't call contract, now when he is removeed from white list.`);
@@ -92,7 +92,7 @@
       flipValueBefore = await getFlipValue(contract, deployer);
       const disableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, false);
       const disableWhiteListResult = await submitTransactionAsync(deployer, disableWhiteListTx);
-      const whiteListDisabledFlip = contract.exec('flip', value, gasLimit);
+      const whiteListDisabledFlip = contract.tx.flip(value, gasLimit);
       await submitTransactionAsync(bob, whiteListDisabledFlip);
       const afterWhiteListDisabled = await getFlipValue(contract,deployer);
       expect(afterWhiteListDisabled).to.be.eq(!flipValueBefore, `Anyone can call contract with disabled whitelist.`);
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -29,7 +29,7 @@
 } | {
   ethereum: string,
 };
-export function normalizeAccountId(input: string | CrossAccountId | IKeyringPair): CrossAccountId {
+export function normalizeAccountId(input: string | AccountId | CrossAccountId | IKeyringPair): CrossAccountId {
   if (typeof input === 'string')
     return { substrate: input };
   if ('address' in input) {
@@ -37,8 +37,11 @@
   }
   if ('ethereum' in input) {
     input.ethereum = input.ethereum.toLowerCase();
+    return input;
   }
-  return input;
+
+  // AccountId
+  return {substrate: input.toString()}
 }
 export function toSubstrateAddress(input: string | CrossAccountId | IKeyringPair): string {
   input = normalizeAccountId(input);