difftreelog
Fix tests for quartz and unique: remove global before
in: master
2 files changed
tests/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);
});
});
tests/src/allowLists.test.tsdiffbeforeafterboth1// 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});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});