1234567891011121314151617import {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\.ConfirmUnsetSponsorFail/);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});