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

difftreelog

Fix tests for quartz and unique: remove global before

Max Andreev2022-09-16parent: #fb3fa28.patch.diff
in: master

2 files changed

modifiedtests/src/adminTransferAndBurn.test.tsdiffbeforeafterboth
--- a/tests/src/adminTransferAndBurn.test.ts
+++ b/tests/src/adminTransferAndBurn.test.ts
@@ -24,19 +24,14 @@
 
 let donor: IKeyringPair;
 
-before(async () => {
-  await usingPlaygrounds(async (_, privateKey) => {
-    donor = privateKey('//Alice');
-  });
-});
-
 describe('Integration Test: ownerCanTransfer allows admins to use only transferFrom/burnFrom:', () => {
   let alice: IKeyringPair;
   let bob: IKeyringPair;
   let charlie: IKeyringPair;
 
   before(async () => {
-    await usingPlaygrounds(async (helper) => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      donor = privateKey('//Alice');
       [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor);
     });
   });
modifiedtests/src/allowLists.test.tsdiffbeforeafterboth
before · tests/src/allowLists.test.ts
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import {IKeyringPair} from '@polkadot/types/types';18import chai from 'chai';19import chaiAsPromised from 'chai-as-promised';20import {usingPlaygrounds} from './util/playgrounds';2122chai.use(chaiAsPromised);23const expect = chai.expect;2425let donor: IKeyringPair;2627before(async () => {28  await usingPlaygrounds(async (_, privateKey) => {29    donor = privateKey('//Alice');30  });31});3233let alice: IKeyringPair;34let bob: IKeyringPair;35let charlie: IKeyringPair;3637describe('Integration Test ext. Allow list tests', () => {3839  before(async () => {40    await usingPlaygrounds(async (helper) => {41      [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);42    });43  });4445  it('Owner can add address to allow list', async () => {46    await usingPlaygrounds(async (helper) => {47      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});48      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});49      const allowList = await helper.nft.getAllowList(collectionId);50      expect(allowList).to.be.deep.contains({Substrate: bob.address});51    });52  });5354  it('Admin can add address to allow list', async () => {55    await usingPlaygrounds(async (helper) => {56      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});57      await helper.nft.addAdmin(alice, collectionId, {Substrate: bob.address});5859      await helper.nft.addToAllowList(bob, collectionId, {Substrate: charlie.address});60      const allowList = await helper.nft.getAllowList(collectionId);61      expect(allowList).to.be.deep.contains({Substrate: charlie.address});62    });63  });6465  it('Non-privileged user cannot add address to allow list', async () => {66    await usingPlaygrounds(async (helper) => {67      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});68      const addToAllowListTx = async () => helper.nft.addToAllowList(bob, collectionId, {Substrate: charlie.address});69      await expect(addToAllowListTx()).to.be.rejected;70    });71  });7273  it('Nobody can add address to allow list of non-existing collection', async () => {74    const collectionId = (1<<32) - 1;75    await usingPlaygrounds(async (helper) => {76      const addToAllowListTx = async () => helper.nft.addToAllowList(bob, collectionId, {Substrate: charlie.address});77      await expect(addToAllowListTx()).to.be.rejected;78    });79  });8081  it('Nobody can add address to allow list of destroyed collection', async () => {82    await usingPlaygrounds(async (helper) => {83      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});84      await helper.collection.burn(alice, collectionId);85      const addToAllowListTx = async () => helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});86      await expect(addToAllowListTx()).to.be.rejected;87    });88  });8990  it('If address is already added to allow list, nothing happens', async () => {91    await usingPlaygrounds(async (helper) => {92      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});93      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});94      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});95      const allowList = await helper.nft.getAllowList(collectionId);96      expect(allowList).to.be.deep.contains({Substrate: bob.address});97    });98  });99100  it('Owner can remove address from allow list', async () => {101    await usingPlaygrounds(async (helper) => {102      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});103      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});104105      await helper.collection.removeFromAllowList(alice, collectionId, {Substrate: bob.address});106107      const allowList = await helper.nft.getAllowList(collectionId);108109      expect(allowList).to.be.not.deep.contains({Substrate: bob.address});110    });111  });112113  it('Admin can remove address from allow list', async () => {114    await usingPlaygrounds(async (helper) => {115      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});116      await helper.nft.addAdmin(alice, collectionId, {Substrate: charlie.address});117      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});118      await helper.collection.removeFromAllowList(charlie, collectionId, {Substrate: bob.address});119120      const allowList = await helper.nft.getAllowList(collectionId);121122      expect(allowList).to.be.not.deep.contains({Substrate: bob.address});123    });124  });125126  it('Non-privileged user cannot remove address from allow list', async () => {127    await usingPlaygrounds(async (helper) => {128      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});129      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});130      const removeTx = async () => helper.collection.removeFromAllowList(bob, collectionId, {Substrate: charlie.address});131      await expect(removeTx()).to.be.rejected;132      const allowList = await helper.nft.getAllowList(collectionId);133134      expect(allowList).to.be.deep.contains({Substrate: charlie.address});135    });136  });137138  it('Nobody can remove address from allow list of non-existing collection', async () => {139    const collectionId = (1<<32) - 1;140    await usingPlaygrounds(async (helper) => {141      const removeTx = async () => helper.collection.removeFromAllowList(bob, collectionId, {Substrate: charlie.address});142      await expect(removeTx()).to.be.rejected;143    });144  });145146  it('Nobody can remove address from allow list of deleted collection', async () => {147    await usingPlaygrounds(async (helper) => {148      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});149      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});150      await helper.collection.burn(alice, collectionId);151      const removeTx = async () => helper.collection.removeFromAllowList(alice, collectionId, {Substrate: bob.address});152153      await expect(removeTx()).to.be.rejected;154    });155  });156157  it('If address is already removed from allow list, nothing happens', async () => {158    await usingPlaygrounds(async (helper) => {159      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});160      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});161      await helper.collection.removeFromAllowList(alice, collectionId, {Substrate: bob.address});162      const allowListBefore = await helper.nft.getAllowList(collectionId);163      expect(allowListBefore).to.be.not.deep.contains({Substrate: bob.address});164165      await helper.collection.removeFromAllowList(alice, collectionId, {Substrate: bob.address});166167      const allowListAfter = await helper.nft.getAllowList(collectionId);168      expect(allowListAfter).to.be.not.deep.contains({Substrate: bob.address});169    });170  });171172  it('If Public Access mode is set to AllowList, tokens can’t be transferred from a non-allowlisted address with transfer or transferFrom. Test1', async () => {173    await usingPlaygrounds(async (helper) => {174      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});175      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});176      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});177      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});178179      const transferResult = async () => helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});180      await expect(transferResult()).to.be.rejected;181    });182  });183184  it('If Public Access mode is set to AllowList, tokens can’t be transferred from a non-allowlisted address with transfer or transferFrom. Test2', async () => {185    await usingPlaygrounds(async (helper) => {186      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});187      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});188      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});189      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});190      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});191      await helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: charlie.address});192      await helper.collection.removeFromAllowList(alice, collectionId, {Substrate: alice.address});193194      const transferResult = async () => helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});195      await expect(transferResult()).to.be.rejected;196    });197  });198199  it('If Public Access mode is set to AllowList, tokens can’t be transferred to a non-allowlisted address with transfer or transferFrom. Test1', async () => {200    await usingPlaygrounds(async (helper) => {201      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});202      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});203      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});204      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});205206      const transferResult = async () => helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});207      await expect(transferResult()).to.be.rejected;208    });209  });210211  it('If Public Access mode is set to AllowList, tokens can’t be transferred to a non-allowlisted address with transfer or transferFrom. Test2', async () => {212    await usingPlaygrounds(async (helper) => {213      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});214      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});215      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});216      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});217      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});218219      await helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: charlie.address});220      await helper.collection.removeFromAllowList(alice, collectionId, {Substrate: alice.address});221222      const transferResult = async () => helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});223      await expect(transferResult()).to.be.rejected;224    });225  });226227  it('If Public Access mode is set to AllowList, tokens can’t be destroyed by a non-allowlisted address (even if it owned them before enabling AllowList mode)', async () => {228    await usingPlaygrounds(async (helper) => {229      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});230      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});231      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});232      const burnTx = async () => helper.nft.burnToken(bob, collectionId, tokenId);233      await expect(burnTx()).to.be.rejected;234    });235  });236237  it('If Public Access mode is set to AllowList, token transfers can’t be Approved by a non-allowlisted address (see Approve method)', async () => {238    await usingPlaygrounds(async (helper) => {239      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});240      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});241      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});242      const approveTx = async () => helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address});243      await expect(approveTx()).to.be.rejected;244    });245  });246247  it('If Public Access mode is set to AllowList, tokens can be transferred to a allowlisted address with transfer.', async () => {248    await usingPlaygrounds(async (helper) => {249      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});250      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});251      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});252      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});253      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});254      await helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});255      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);256      expect(owner.Substrate).to.be.equal(charlie.address);257    });258  });259260  it('If Public Access mode is set to AllowList, tokens can be transferred to a allowlisted address with transferFrom.', async () => {261    await usingPlaygrounds(async (helper) => {262      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});263      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});264      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});265      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});266      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});267      await helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: charlie.address});268269      await helper.nft.transferTokenFrom(alice, collectionId, tokenId, {Substrate: alice.address}, {Substrate: charlie.address});270      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);271      expect(owner.Substrate).to.be.equal(charlie.address);272    });273  });274275  it('If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transfer', async () => {276    await usingPlaygrounds(async (helper) => {277      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});278      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});279      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});280      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});281      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});282283      await helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});284      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);285      expect(owner.Substrate).to.be.equal(charlie.address);286    });287  });288289  it('If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transferFrom', async () => {290    await usingPlaygrounds(async (helper) => {291      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});292      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});293      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});294      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});295      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});296      await helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: charlie.address});297298      await helper.nft.transferTokenFrom(alice, collectionId, tokenId, {Substrate: alice.address}, {Substrate: charlie.address});299      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);300      expect(owner.Substrate).to.be.equal(charlie.address);301    });302  });303304  it('If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by owner', async () => {305    await usingPlaygrounds(async (helper) => {306      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});307      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: false});308      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});309      const token = await helper.nft.getToken(collectionId, tokenId);310      expect(token).to.be.not.null;311    });312  });313314  it('If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by admin', async () => {315    await usingPlaygrounds(async (helper) => {316      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});317      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: false});318      await helper.collection.addAdmin(alice, collectionId, {Substrate: bob.address});319      const {tokenId} = await helper.nft.mintToken(bob, {collectionId: collectionId, owner: bob.address});320      const token = await helper.nft.getToken(collectionId, tokenId);321      expect(token).to.be.not.null;322    });323  });324325  it('If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and allow-listed address', async () => {326    await usingPlaygrounds(async (helper) => {327      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});328      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: false});329      await helper.collection.addToAllowList(alice, collectionId, {Substrate: bob.address});330      const mintTokenTx = async () => helper.nft.mintToken(bob, {collectionId: collectionId, owner: bob.address});331      await expect(mintTokenTx()).to.be.rejected;332    });333  });334335  it('If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-allow listed address', async () => {336    await usingPlaygrounds(async (helper) => {337      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});338      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: false});339      const mintTokenTx = async () => helper.nft.mintToken(bob, {collectionId: collectionId, owner: bob.address});340      await expect(mintTokenTx()).to.be.rejected;341    });342  });343344  it('If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by owner', async () => {345    await usingPlaygrounds(async (helper) => {346      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});347      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: true});348      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});349      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);350      expect(owner.Substrate).to.be.equal(alice.address);351    });352  });353354  it('If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by admin', async () => {355    await usingPlaygrounds(async (helper) => {356      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});357      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: true});358      await helper.nft.addAdmin(alice, collectionId, {Substrate: bob.address});359      const {tokenId} = await helper.nft.mintToken(bob, {collectionId: collectionId, owner: bob.address});360      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);361      expect(owner.Substrate).to.be.equal(bob.address);362    });363  });364365  it('If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-allow listed address', async () => {366    await usingPlaygrounds(async (helper) => {367      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});368      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: true});369      const mintTokenTx = async () => helper.nft.mintToken(bob, {collectionId: collectionId, owner: bob.address});370      await expect(mintTokenTx()).to.be.rejected;371    });372  });373374  it('If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by non-privileged and allow listed address', async () => {375    await usingPlaygrounds(async (helper) => {376      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});377      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: true});378      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});379      const {tokenId} = await helper.nft.mintToken(bob, {collectionId: collectionId, owner: bob.address});380      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);381      expect(owner.Substrate).to.be.equal(bob.address);382    });383  });384});
after · tests/src/allowLists.test.ts
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import {IKeyringPair} from '@polkadot/types/types';18import chai from 'chai';19import chaiAsPromised from 'chai-as-promised';20import {usingPlaygrounds} from './util/playgrounds';2122chai.use(chaiAsPromised);23const expect = chai.expect;2425let donor: IKeyringPair;2627let alice: IKeyringPair;28let bob: IKeyringPair;29let charlie: IKeyringPair;3031describe('Integration Test ext. Allow list tests', () => {3233  before(async () => {34    await usingPlaygrounds(async (helper, privateKey) => {35      donor = privateKey('//Alice');36      [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);37    });38  });3940  it('Owner can add address to allow list', async () => {41    await usingPlaygrounds(async (helper) => {42      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});43      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});44      const allowList = await helper.nft.getAllowList(collectionId);45      expect(allowList).to.be.deep.contains({Substrate: bob.address});46    });47  });4849  it('Admin can add address to allow list', async () => {50    await usingPlaygrounds(async (helper) => {51      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});52      await helper.nft.addAdmin(alice, collectionId, {Substrate: bob.address});5354      await helper.nft.addToAllowList(bob, collectionId, {Substrate: charlie.address});55      const allowList = await helper.nft.getAllowList(collectionId);56      expect(allowList).to.be.deep.contains({Substrate: charlie.address});57    });58  });5960  it('Non-privileged user cannot add address to allow list', async () => {61    await usingPlaygrounds(async (helper) => {62      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});63      const addToAllowListTx = async () => helper.nft.addToAllowList(bob, collectionId, {Substrate: charlie.address});64      await expect(addToAllowListTx()).to.be.rejected;65    });66  });6768  it('Nobody can add address to allow list of non-existing collection', async () => {69    const collectionId = (1<<32) - 1;70    await usingPlaygrounds(async (helper) => {71      const addToAllowListTx = async () => helper.nft.addToAllowList(bob, collectionId, {Substrate: charlie.address});72      await expect(addToAllowListTx()).to.be.rejected;73    });74  });7576  it('Nobody can add address to allow list of destroyed collection', async () => {77    await usingPlaygrounds(async (helper) => {78      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});79      await helper.collection.burn(alice, collectionId);80      const addToAllowListTx = async () => helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});81      await expect(addToAllowListTx()).to.be.rejected;82    });83  });8485  it('If address is already added to allow list, nothing happens', async () => {86    await usingPlaygrounds(async (helper) => {87      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});88      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});89      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});90      const allowList = await helper.nft.getAllowList(collectionId);91      expect(allowList).to.be.deep.contains({Substrate: bob.address});92    });93  });9495  it('Owner can remove address from allow list', async () => {96    await usingPlaygrounds(async (helper) => {97      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});98      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});99100      await helper.collection.removeFromAllowList(alice, collectionId, {Substrate: bob.address});101102      const allowList = await helper.nft.getAllowList(collectionId);103104      expect(allowList).to.be.not.deep.contains({Substrate: bob.address});105    });106  });107108  it('Admin can remove address from allow list', async () => {109    await usingPlaygrounds(async (helper) => {110      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});111      await helper.nft.addAdmin(alice, collectionId, {Substrate: charlie.address});112      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});113      await helper.collection.removeFromAllowList(charlie, collectionId, {Substrate: bob.address});114115      const allowList = await helper.nft.getAllowList(collectionId);116117      expect(allowList).to.be.not.deep.contains({Substrate: bob.address});118    });119  });120121  it('Non-privileged user cannot remove address from allow list', async () => {122    await usingPlaygrounds(async (helper) => {123      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});124      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});125      const removeTx = async () => helper.collection.removeFromAllowList(bob, collectionId, {Substrate: charlie.address});126      await expect(removeTx()).to.be.rejected;127      const allowList = await helper.nft.getAllowList(collectionId);128129      expect(allowList).to.be.deep.contains({Substrate: charlie.address});130    });131  });132133  it('Nobody can remove address from allow list of non-existing collection', async () => {134    const collectionId = (1<<32) - 1;135    await usingPlaygrounds(async (helper) => {136      const removeTx = async () => helper.collection.removeFromAllowList(bob, collectionId, {Substrate: charlie.address});137      await expect(removeTx()).to.be.rejected;138    });139  });140141  it('Nobody can remove address from allow list of deleted collection', async () => {142    await usingPlaygrounds(async (helper) => {143      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});144      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});145      await helper.collection.burn(alice, collectionId);146      const removeTx = async () => helper.collection.removeFromAllowList(alice, collectionId, {Substrate: bob.address});147148      await expect(removeTx()).to.be.rejected;149    });150  });151152  it('If address is already removed from allow list, nothing happens', async () => {153    await usingPlaygrounds(async (helper) => {154      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});155      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});156      await helper.collection.removeFromAllowList(alice, collectionId, {Substrate: bob.address});157      const allowListBefore = await helper.nft.getAllowList(collectionId);158      expect(allowListBefore).to.be.not.deep.contains({Substrate: bob.address});159160      await helper.collection.removeFromAllowList(alice, collectionId, {Substrate: bob.address});161162      const allowListAfter = await helper.nft.getAllowList(collectionId);163      expect(allowListAfter).to.be.not.deep.contains({Substrate: bob.address});164    });165  });166167  it('If Public Access mode is set to AllowList, tokens can’t be transferred from a non-allowlisted address with transfer or transferFrom. Test1', async () => {168    await usingPlaygrounds(async (helper) => {169      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});170      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});171      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});172      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});173174      const transferResult = async () => helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});175      await expect(transferResult()).to.be.rejected;176    });177  });178179  it('If Public Access mode is set to AllowList, tokens can’t be transferred from a non-allowlisted address with transfer or transferFrom. Test2', async () => {180    await usingPlaygrounds(async (helper) => {181      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});182      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});183      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});184      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});185      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});186      await helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: charlie.address});187      await helper.collection.removeFromAllowList(alice, collectionId, {Substrate: alice.address});188189      const transferResult = async () => helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});190      await expect(transferResult()).to.be.rejected;191    });192  });193194  it('If Public Access mode is set to AllowList, tokens can’t be transferred to a non-allowlisted address with transfer or transferFrom. Test1', async () => {195    await usingPlaygrounds(async (helper) => {196      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});197      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});198      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});199      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});200201      const transferResult = async () => helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});202      await expect(transferResult()).to.be.rejected;203    });204  });205206  it('If Public Access mode is set to AllowList, tokens can’t be transferred to a non-allowlisted address with transfer or transferFrom. Test2', async () => {207    await usingPlaygrounds(async (helper) => {208      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});209      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});210      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});211      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});212      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});213214      await helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: charlie.address});215      await helper.collection.removeFromAllowList(alice, collectionId, {Substrate: alice.address});216217      const transferResult = async () => helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});218      await expect(transferResult()).to.be.rejected;219    });220  });221222  it('If Public Access mode is set to AllowList, tokens can’t be destroyed by a non-allowlisted address (even if it owned them before enabling AllowList mode)', async () => {223    await usingPlaygrounds(async (helper) => {224      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});225      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});226      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});227      const burnTx = async () => helper.nft.burnToken(bob, collectionId, tokenId);228      await expect(burnTx()).to.be.rejected;229    });230  });231232  it('If Public Access mode is set to AllowList, token transfers can’t be Approved by a non-allowlisted address (see Approve method)', async () => {233    await usingPlaygrounds(async (helper) => {234      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});235      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});236      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});237      const approveTx = async () => helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address});238      await expect(approveTx()).to.be.rejected;239    });240  });241242  it('If Public Access mode is set to AllowList, tokens can be transferred to a allowlisted address with transfer.', async () => {243    await usingPlaygrounds(async (helper) => {244      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});245      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});246      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});247      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});248      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});249      await helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});250      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);251      expect(owner.Substrate).to.be.equal(charlie.address);252    });253  });254255  it('If Public Access mode is set to AllowList, tokens can be transferred to a allowlisted address with transferFrom.', async () => {256    await usingPlaygrounds(async (helper) => {257      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});258      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});259      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});260      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});261      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});262      await helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: charlie.address});263264      await helper.nft.transferTokenFrom(alice, collectionId, tokenId, {Substrate: alice.address}, {Substrate: charlie.address});265      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);266      expect(owner.Substrate).to.be.equal(charlie.address);267    });268  });269270  it('If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transfer', async () => {271    await usingPlaygrounds(async (helper) => {272      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});273      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});274      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});275      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});276      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});277278      await helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});279      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);280      expect(owner.Substrate).to.be.equal(charlie.address);281    });282  });283284  it('If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transferFrom', async () => {285    await usingPlaygrounds(async (helper) => {286      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});287      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});288      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList'});289      await helper.nft.addToAllowList(alice, collectionId, {Substrate: alice.address});290      await helper.nft.addToAllowList(alice, collectionId, {Substrate: charlie.address});291      await helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: charlie.address});292293      await helper.nft.transferTokenFrom(alice, collectionId, tokenId, {Substrate: alice.address}, {Substrate: charlie.address});294      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);295      expect(owner.Substrate).to.be.equal(charlie.address);296    });297  });298299  it('If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by owner', async () => {300    await usingPlaygrounds(async (helper) => {301      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});302      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: false});303      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});304      const token = await helper.nft.getToken(collectionId, tokenId);305      expect(token).to.be.not.null;306    });307  });308309  it('If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by admin', async () => {310    await usingPlaygrounds(async (helper) => {311      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});312      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: false});313      await helper.collection.addAdmin(alice, collectionId, {Substrate: bob.address});314      const {tokenId} = await helper.nft.mintToken(bob, {collectionId: collectionId, owner: bob.address});315      const token = await helper.nft.getToken(collectionId, tokenId);316      expect(token).to.be.not.null;317    });318  });319320  it('If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and allow-listed address', async () => {321    await usingPlaygrounds(async (helper) => {322      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});323      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: false});324      await helper.collection.addToAllowList(alice, collectionId, {Substrate: bob.address});325      const mintTokenTx = async () => helper.nft.mintToken(bob, {collectionId: collectionId, owner: bob.address});326      await expect(mintTokenTx()).to.be.rejected;327    });328  });329330  it('If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-allow listed address', async () => {331    await usingPlaygrounds(async (helper) => {332      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});333      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: false});334      const mintTokenTx = async () => helper.nft.mintToken(bob, {collectionId: collectionId, owner: bob.address});335      await expect(mintTokenTx()).to.be.rejected;336    });337  });338339  it('If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by owner', async () => {340    await usingPlaygrounds(async (helper) => {341      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});342      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: true});343      const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});344      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);345      expect(owner.Substrate).to.be.equal(alice.address);346    });347  });348349  it('If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by admin', async () => {350    await usingPlaygrounds(async (helper) => {351      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});352      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: true});353      await helper.nft.addAdmin(alice, collectionId, {Substrate: bob.address});354      const {tokenId} = await helper.nft.mintToken(bob, {collectionId: collectionId, owner: bob.address});355      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);356      expect(owner.Substrate).to.be.equal(bob.address);357    });358  });359360  it('If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-allow listed address', async () => {361    await usingPlaygrounds(async (helper) => {362      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});363      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: true});364      const mintTokenTx = async () => helper.nft.mintToken(bob, {collectionId: collectionId, owner: bob.address});365      await expect(mintTokenTx()).to.be.rejected;366    });367  });368369  it('If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by non-privileged and allow listed address', async () => {370    await usingPlaygrounds(async (helper) => {371      const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});372      await helper.nft.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: true});373      await helper.nft.addToAllowList(alice, collectionId, {Substrate: bob.address});374      const {tokenId} = await helper.nft.mintToken(bob, {collectionId: collectionId, owner: bob.address});375      const owner = await helper.nft.getTokenOwner(collectionId, tokenId);376      expect(owner.Substrate).to.be.equal(bob.address);377    });378  });379});