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

difftreelog

fixup tests

Yaroslav Bolyukin2022-01-26parent: #a11cc83.patch.diff
in: master

3 files changed

modifiedtests/src/eth/contractSponsoring.test.tsdiffbeforeafterboth
before · tests/src/eth/contractSponsoring.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 privateKey from '../substrate/privateKey';7import {expect} from 'chai';8import {9  contractHelpers,10  createEthAccountWithBalance,11  transferBalanceToEth,12  deployFlipper,13  itWeb3,14  SponsoringMode,15  createEthAccount,16} from './util/helpers';1718describe('Sponsoring EVM contracts', () => {19  itWeb3('Sponsoring can be set by the address that has deployed the contract', async ({api, web3}) => {20    const owner = await createEthAccountWithBalance(api, web3);21    const flipper = await deployFlipper(web3, owner);22    const helpers = contractHelpers(web3, owner);23    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;24    await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});25    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;26  });2728  itWeb3('Sponsoring cannot be set by the address that did not deployed the contract', async ({api, web3}) => {29    const owner = await createEthAccountWithBalance(api, web3);30    const notOwner = await createEthAccountWithBalance(api, web3);31    const flipper = await deployFlipper(web3, owner);32    const helpers = contractHelpers(web3, owner);33    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;34    await expect(helpers.methods.setSponsoringMode(notOwner, SponsoringMode.Allowlisted).send({from: notOwner})).to.rejected;35    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;36  });3738  itWeb3('In generous mode, non-allowlisted user transaction will be sponsored', async ({ api, web3 }) => {39    const alice = privateKey('//Alice');4041    const owner = await createEthAccountWithBalance(api, web3);42    const caller = await createEthAccountWithBalance(api, web3);4344    const flipper = await deployFlipper(web3, owner);4546    const helpers = contractHelpers(web3, owner);4748    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;49    await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Generous).send({from: owner});50    await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});51    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;5253    await transferBalanceToEth(api, alice, flipper.options.address);5455    const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);56    expect(originalFlipperBalance).to.be.not.equal('0');5758    await flipper.methods.flip().send({from: caller});59    expect(await flipper.methods.getValue().call()).to.be.true;6061    // Balance should be taken from flipper instead of caller62    const balanceAfter = await web3.eth.getBalance(flipper.options.address);63    expect(+balanceAfter).to.be.lessThan(+originalFlipperBalance);64  });6566  itWeb3('Sponsoring is set, an address that has no UNQ can send a transaction and it works. Sponsor balance should decrease (allowlisted)', async ({api, web3}) => {67    const alice = privateKey('//Alice');6869    const owner = await createEthAccountWithBalance(api, web3);70    const caller = await createEthAccount(api);7172    const flipper = await deployFlipper(web3, owner);7374    const helpers = contractHelpers(web3, owner);75    await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});76    await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});7778    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;79    await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});80    await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});81    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;8283    await transferBalanceToEth(api, alice, flipper.options.address);8485    const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);86    expect(originalFlipperBalance).to.be.not.equal('0');8788    await flipper.methods.flip().send({from: caller});89    expect(await flipper.methods.getValue().call()).to.be.true;9091    // Balance should be taken from flipper instead of caller92    const balanceAfter = await web3.eth.getBalance(flipper.options.address);93    expect(+balanceAfter).to.be.lessThan(+originalFlipperBalance);94  });9596  itWeb3('Sponsoring is set, an address that has no UNQ can send a transaction and it works. Sponsor balance should not decrease (non-allowlisted)', async ({api, web3}) => {97    const alice = privateKey('//Alice');9899    const owner = await createEthAccountWithBalance(api, web3);100    const caller = await createEthAccount(api);101102    const flipper = await deployFlipper(web3, owner);103104    const helpers = contractHelpers(web3, owner);105106    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;107    await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});108    await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});109    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;110111    await transferBalanceToEth(api, alice, flipper.options.address);112113    const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);114    expect(originalFlipperBalance).to.be.not.equal('0');115116    await flipper.methods.flip().send({from: caller});117    expect(await flipper.methods.getValue().call()).to.be.true;118119    // Balance should be taken from flipper instead of caller120    const balanceAfter = await web3.eth.getBalance(flipper.options.address);121    expect(+balanceAfter).to.be.equals(+originalFlipperBalance);122  });123124  itWeb3('Sponsoring is set, an address that has UNQ can send a transaction and it works. User balance should not change', async ({api, web3}) => {125    const alice = privateKey('//Alice');126127    const owner = await createEthAccountWithBalance(api, web3);128    const caller = await createEthAccountWithBalance(api, web3);129    const originalCallerBalance = await web3.eth.getBalance(caller);130131    const flipper = await deployFlipper(web3, owner);132133    const helpers = contractHelpers(web3, owner);134    await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});135    await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});136137    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;138    await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});139    await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});140    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;141142    await transferBalanceToEth(api, alice, flipper.options.address);143144    const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);145    expect(originalFlipperBalance).to.be.not.equal('0');146147    await flipper.methods.flip().send({from: caller});148    expect(await flipper.methods.getValue().call()).to.be.true;149150    expect(await web3.eth.getBalance(caller)).to.be.equals(originalCallerBalance);151  });152153  itWeb3('Sponsoring is limited, with setContractRateLimit. The limitation is working if transactions are sent more often, the sender pays the commission.', async ({api, web3}) => {154    const alice = privateKey('//Alice');155156    const owner = await createEthAccountWithBalance(api, web3);157    const caller = await createEthAccountWithBalance(api, web3);158    const originalCallerBalance = await web3.eth.getBalance(caller);159160    const flipper = await deployFlipper(web3, owner);161162    const helpers = contractHelpers(web3, owner);163    await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});164    await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});165166    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;167    await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});168    await helpers.methods.setSponsoringRateLimit(flipper.options.address, 10).send({from: owner});169    expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;170171    await transferBalanceToEth(api, alice, flipper.options.address);172173    const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);174    expect(originalFlipperBalance).to.be.not.equal('0');175176    await flipper.methods.flip().send({from: caller});177    expect(await flipper.methods.getValue().call()).to.be.true;178    expect(await web3.eth.getBalance(caller)).to.be.equals(originalCallerBalance);179180    await flipper.methods.flip().send({from: caller});181    expect(await web3.eth.getBalance(caller)).to.be.not.equals(originalCallerBalance);182  });183184  // TODO: Find a way to calculate default rate limit185  itWeb3('Default rate limit equals 7200', async ({api, web3}) => {186    const owner = await createEthAccountWithBalance(api, web3);187    const flipper = await deployFlipper(web3, owner);188    const helpers = contractHelpers(web3, owner);189    expect(await helpers.methods.getSponsoringRateLimit(flipper.options.address).call()).to.be.equals('7200');190  });191});
modifiedtests/src/eth/util/contractHelpersAbi.jsondiffbeforeafterboth
--- a/tests/src/eth/util/contractHelpersAbi.json
+++ b/tests/src/eth/util/contractHelpersAbi.json
@@ -147,6 +147,43 @@
                 "type": "address"
             },
             {
+                "internalType": "uint8",
+                "name": "mode",
+                "type": "uint8"
+            }
+        ],
+        "name": "setSponsoringMode",
+        "outputs": [],
+        "stateMutability": "nonpayable",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "target",
+                "type": "address"
+            }
+        ],
+        "name": "sponsoringMode",
+        "outputs": [
+            {
+                "internalType": "uint8",
+                "name": "",
+                "type": "uint8"
+            }
+        ],
+        "stateMutability": "nonpayable",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "target",
+                "type": "address"
+            },
+            {
                 "internalType": "uint32",
                 "name": "limit",
                 "type": "uint32"
@@ -176,4 +213,4 @@
         "stateMutability": "view",
         "type": "function"
     }
-]
\ No newline at end of file
+]
modifiedtests/src/eth/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/eth/util/helpers.ts
+++ b/tests/src/eth/util/helpers.ts
@@ -22,9 +22,9 @@
 export const GAS_ARGS = {gas: 2500000};
 
 export enum SponsoringMode {
-  Disabled,
-  Allowlisted,
-  Generous,
+  Disabled = 0,
+  Allowlisted = 1,
+  Generous = 2,
 }
 
 let web3Connected = false;