git.delta.rocks / unique-network / refs/commits / 0a3544788f57

difftreelog

source

tests/src/change-collection-owner.test.ts7.7 KiBsourcehistory
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 {usingPlaygrounds, expect, itSub} from './util';1920describe('Integration Test changeCollectionOwner(collection_id, new_owner):', () => {21  let alice: IKeyringPair;22  let bob: IKeyringPair;2324  before(async () => {25    await usingPlaygrounds(async (helper, privateKey) => {26      const donor = await privateKey({filename: __filename});27      [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);28    });29  });3031  itSub('Changing owner changes owner address', async ({helper}) => {32    const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});33    const beforeChanging = await helper.collection.getData(collection.collectionId);34    expect(beforeChanging?.normalizedOwner).to.be.equal(helper.address.normalizeSubstrate(alice.address));3536    await collection.changeOwner(alice, bob.address);37    const afterChanging = await helper.collection.getData(collection.collectionId);38    expect(afterChanging?.normalizedOwner).to.be.equal(helper.address.normalizeSubstrate(bob.address));39  });40});4142describe('Integration Test changeCollectionOwner(collection_id, new_owner) special checks for exOwner:', () => {43  let alice: IKeyringPair;44  let bob: IKeyringPair;45  let charlie: IKeyringPair;4647  before(async () => {48    await usingPlaygrounds(async (helper, privateKey) => {49      const donor = await privateKey({filename: __filename});50      [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);51    });52  });5354  itSub('Changing the owner of the collection is not allowed for the former owner', async ({helper}) => {55    const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});5657    await collection.changeOwner(alice, bob.address);5859    const changeOwnerTx = () => collection.changeOwner(alice, alice.address);60    await expect(changeOwnerTx()).to.be.rejectedWith(/common\.NoPermission/);6162    const afterChanging = await helper.collection.getData(collection.collectionId);63    expect(afterChanging?.normalizedOwner).to.be.equal(helper.address.normalizeSubstrate(bob.address));64  });6566  itSub('New collectionOwner has access to sponsorship management operations in the collection', async ({helper}) => {67    const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});68    await collection.changeOwner(alice, bob.address);6970    const afterChanging = await helper.collection.getData(collection.collectionId);71    expect(afterChanging?.normalizedOwner).to.be.equal(helper.address.normalizeSubstrate(bob.address));7273    await collection.setSponsor(bob, charlie.address);74    await collection.confirmSponsorship(charlie);75    await collection.removeSponsor(bob);76    const limits = {77      accountTokenOwnershipLimit: 1,78      tokenLimit: 1,79      sponsorTransferTimeout: 1,80      ownerCanDestroy: true,81      ownerCanTransfer: true,82    };8384    await collection.setLimits(bob, limits);85    const gotLimits = await collection.getEffectiveLimits();86    expect(gotLimits).to.be.deep.contains(limits);8788    await collection.setPermissions(bob, {access: 'AllowList', mintMode: true});8990    await collection.burn(bob);91    const collectionData = await helper.collection.getData(collection.collectionId);92    expect(collectionData).to.be.null;93  });9495  itSub('New collectionOwner has access to changeCollectionOwner', async ({helper}) => {96    const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});97    await collection.changeOwner(alice, bob.address);98    await collection.changeOwner(bob, charlie.address);99    const collectionData = await collection.getData();100    expect(collectionData?.normalizedOwner).to.be.equal(helper.address.normalizeSubstrate(charlie.address));101  });102});103104describe('Negative Integration Test changeCollectionOwner(collection_id, new_owner):', () => {105  let alice: IKeyringPair;106  let bob: IKeyringPair;107  let charlie: IKeyringPair;108109  before(async () => {110    await usingPlaygrounds(async (helper, privateKey) => {111      const donor = await privateKey({filename: __filename});112      [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);113    });114  });115116  itSub('Not owner can\'t change owner.', async ({helper}) => {117    const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});118    const changeOwnerTx = () => collection.changeOwner(bob, bob.address);119    await expect(changeOwnerTx()).to.be.rejectedWith(/common\.NoPermission/);120  });121122  itSub('Collection admin can\'t change owner.', async ({helper}) => {123    const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});124    await collection.addAdmin(alice, {Substrate: bob.address});125    const changeOwnerTx = () => collection.changeOwner(bob, bob.address);126    await expect(changeOwnerTx()).to.be.rejectedWith(/common\.NoPermission/);127  });128129  itSub('Can\'t change owner of a non-existing collection.', async ({helper}) => {130    const collectionId = (1 << 32) - 1;131    const changeOwnerTx = () => helper.collection.changeOwner(bob, collectionId, bob.address);132    await expect(changeOwnerTx()).to.be.rejectedWith(/common\.CollectionNotFound/);133  });134135  itSub('Former collectionOwner not allowed to sponsorship management operations in the collection', async ({helper}) => {136    const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});137    await collection.changeOwner(alice, bob.address);138139    const changeOwnerTx = () => collection.changeOwner(alice, alice.address);140    await expect(changeOwnerTx()).to.be.rejectedWith(/common\.NoPermission/);141142    const afterChanging = await helper.collection.getData(collection.collectionId);143    expect(afterChanging?.normalizedOwner).to.be.equal(helper.address.normalizeSubstrate(bob.address));144145    const setSponsorTx = () => collection.setSponsor(alice, charlie.address);146    const confirmSponsorshipTx = () => collection.confirmSponsorship(alice);147    const removeSponsorTx = () => collection.removeSponsor(alice);148    await expect(setSponsorTx()).to.be.rejectedWith(/common\.NoPermission/);149    await expect(confirmSponsorshipTx()).to.be.rejectedWith(/common\.ConfirmSponsorshipFail/);150    await expect(removeSponsorTx()).to.be.rejectedWith(/common\.NoPermission/);151152    const limits = {153      accountTokenOwnershipLimit: 1,154      tokenLimit: 1,155      sponsorTransferTimeout: 1,156      ownerCanDestroy: true,157      ownerCanTransfer: true,158    };159160    const setLimitsTx = () => collection.setLimits(alice, limits);161    await expect(setLimitsTx()).to.be.rejectedWith(/common\.NoPermission/);162163    const setPermissionTx = () => collection.setPermissions(alice, {access: 'AllowList', mintMode: true});164    await expect(setPermissionTx()).to.be.rejectedWith(/common\.NoPermission/);165166    const burnTx = () => collection.burn(alice);167    await expect(burnTx()).to.be.rejectedWith(/common\.NoPermission/);168  });169});