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

difftreelog

source

tests/src/toggleContractWhiteList.test.ts7.2 KiBsourcehistory
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 privateKey from "./substrate/privateKey";10import {11  deployFlipper,12  getFlipValue13} from "./util/contracthelpers";14import {15  getGenericResult16} from "./util/helpers"1718chai.use(chaiAsPromised);19const expect = chai.expect;2021const value = 0;22const gasLimit = 3000n * 1000000n;2324describe('Integration Test toggleContractWhiteList', () => {2526  it(`Enable white list contract mode`, async () => {27    await usingApi(async api => {28      const [contract, deployer] = await deployFlipper(api);2930      const enabledBefore = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();31      const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, true);32      const enableEvents = await submitTransactionAsync(deployer, enableWhiteListTx);33      const enabled = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();3435      expect(getGenericResult(enableEvents).success).to.be.true;36      expect(enabledBefore).to.be.false;37      expect(enabled).to.be.true;38    });39  });4041  it(`Only whitelisted account can call contract`, async () => {42    await usingApi(async api => {43      const bob = privateKey("//Bob");4445      const [contract, deployer] = await deployFlipper(api);4647      let flipValueBefore = await getFlipValue(contract, deployer);48      const flip = contract.exec('flip', value, gasLimit);49      await submitTransactionAsync(bob, flip);50      const flipValueAfter = await getFlipValue(contract,deployer);51      expect(flipValueAfter).to.be.eq(!flipValueBefore, `Anyone can call new contract.`);5253      const deployerCanFlip = async () => {54        let flipValueBefore = await getFlipValue(contract, deployer);55        const deployerFlip = contract.exec('flip', value, gasLimit);56        await submitTransactionAsync(deployer, deployerFlip);57        const aliceFlip1Response = await getFlipValue(contract, deployer);58        expect(aliceFlip1Response).to.be.eq(!flipValueBefore, `Deployer always can flip.`);59      };60      await deployerCanFlip();6162      flipValueBefore = await getFlipValue(contract, deployer);63      const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, true);64      const enableResult = await submitTransactionAsync(deployer, enableWhiteListTx);65      const flipWithEnabledWhiteList = contract.exec('flip', value, gasLimit);66      await expect(submitTransactionExpectFailAsync(bob, flipWithEnabledWhiteList)).to.be.rejected;67      const flipValueAfterEnableWhiteList = await getFlipValue(contract, deployer);68      expect(flipValueAfterEnableWhiteList).to.be.eq(flipValueBefore, `Enabling whitelist doesn't make it possible to call contract for everyone.`);6970      await deployerCanFlip();7172      flipValueBefore = await getFlipValue(contract, deployer);73      const addBobToWhiteListTx = api.tx.nft.addToContractWhiteList(contract.address, bob.address);74      const addBobResult = await submitTransactionAsync(deployer, addBobToWhiteListTx);75      const flipWithWhitelistedBob = contract.exec('flip', value, gasLimit);76      await submitTransactionAsync(bob, flipWithWhitelistedBob);77      const flipAfterWhiteListed = await getFlipValue(contract,deployer);78      expect(flipAfterWhiteListed).to.be.eq(!flipValueBefore, `Bob was whitelisted, now he can flip.`);7980      await deployerCanFlip();8182      flipValueBefore = await getFlipValue(contract, deployer);83      const removeBobFromWhiteListTx = api.tx.nft.removeFromContractWhiteList(contract.address, bob.address);84      const removeBobResult = await submitTransactionAsync(deployer, removeBobFromWhiteListTx);85      const bobRemoved = contract.exec('flip', value, gasLimit);86      await expect(submitTransactionExpectFailAsync(bob, bobRemoved)).to.be.rejected;87      const afterBobRemoved = await getFlipValue(contract, deployer);88      expect(afterBobRemoved).to.be.eq(flipValueBefore, `Bob can't call contract, now when he is removeed from white list.`);8990      await deployerCanFlip();9192      flipValueBefore = await getFlipValue(contract, deployer);93      const disableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, false);94      const disableWhiteListResult = await submitTransactionAsync(deployer, disableWhiteListTx);95      const whiteListDisabledFlip = contract.exec('flip', value, gasLimit);96      await submitTransactionAsync(bob, whiteListDisabledFlip);97      const afterWhiteListDisabled = await getFlipValue(contract,deployer);98      expect(afterWhiteListDisabled).to.be.eq(!flipValueBefore, `Anyone can call contract with disabled whitelist.`);99100    });101  });102103  it(`Enabling white list repeatedly should not produce errors`, async () => {104    await usingApi(async api => {105      const [contract, deployer] = await deployFlipper(api);106107      const enabledBefore = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();108      const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, true);109      const enableEvents = await submitTransactionAsync(deployer, enableWhiteListTx);110      const enabled = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();111      const enableAgainEvents = await submitTransactionAsync(deployer, enableWhiteListTx);112      const enabledAgain = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();113114      expect(getGenericResult(enableEvents).success).to.be.true;115      expect(enabledBefore).to.be.false;116      expect(enabled).to.be.true;117      expect(getGenericResult(enableAgainEvents).success).to.be.true;118      expect(enabledAgain).to.be.true;119    });120  });121122});123124describe('Negative Integration Test toggleContractWhiteList', () => {125126  it(`Enable white list for a non-contract`, async () => {127    await usingApi(async api => {128      const alice = privateKey("//Alice");129      const bobGuineaPig = privateKey("//Bob");130131      const enabledBefore = (await api.query.nft.contractWhiteListEnabled(bobGuineaPig.address)).toJSON();132      const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(bobGuineaPig.address, true);133      await expect(submitTransactionExpectFailAsync(alice, enableWhiteListTx)).to.be.rejected;134      const enabled = (await api.query.nft.contractWhiteListEnabled(bobGuineaPig.address)).toJSON();135136      expect(enabledBefore).to.be.false;137      expect(enabled).to.be.false;138    });139  });140141  it(`Enable white list using a non-owner address`, async () => {142    await usingApi(async api => {143      const bob = privateKey("//Bob");144      const [contract, deployer] = await deployFlipper(api);145146      const enabledBefore = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();147      const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, true);148      await expect(submitTransactionExpectFailAsync(bob, enableWhiteListTx)).to.be.rejected;149      const enabled = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();150151      expect(enabledBefore).to.be.false;152      expect(enabled).to.be.false;153    });154  });155156});