1234567891011121314151617import {IKeyringPair} from '@polkadot/types/types';18import {usingPlaygrounds, expect, itSub} from './util';19import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';2021describe('Integration Test changeCollectionOwner(collection_id, new_owner):', () => {22 let alice: IKeyringPair;23 let bob: IKeyringPair;2425 before(async () => {26 await usingPlaygrounds(async (helper, privateKey) => {27 const donor = await privateKey({url: import.meta.url});28 [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);29 });30 });3132 itSub('Changing owner changes owner address', async ({helper}) => {33 const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});34 const beforeChanging = await helper.collection.getData(collection.collectionId);35 expect(beforeChanging?.normalizedOwner).to.be.equal(helper.address.normalizeSubstrate(alice.address));3637 await collection.changeOwner(alice, bob.address);38 const afterChanging = await helper.collection.getData(collection.collectionId);39 expect(afterChanging?.normalizedOwner).to.be.equal(helper.address.normalizeSubstrate(bob.address));40 });41});4243describe('Integration Test changeCollectionOwner(collection_id, new_owner) special checks for exOwner:', () => {44 let alice: IKeyringPair;45 let bob: IKeyringPair;46 let charlie: IKeyringPair;4748 before(async () => {49 await usingPlaygrounds(async (helper, privateKey) => {50 const donor = await privateKey({url: import.meta.url});51 [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);52 });53 });5455 itSub('Changing the owner of the collection is not allowed for the former owner', async ({helper}) => {56 const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});5758 await collection.changeOwner(alice, bob.address);5960 const changeOwnerTx = () => collection.changeOwner(alice, alice.address);61 await expect(changeOwnerTx()).to.be.rejectedWith(/common\.NoPermission/);6263 const afterChanging = await helper.collection.getData(collection.collectionId);64 expect(afterChanging?.normalizedOwner).to.be.equal(helper.address.normalizeSubstrate(bob.address));65 });6667 itSub('New collectionOwner has access to sponsorship management operations in the collection', async ({helper}) => {68 const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});69 await collection.changeOwner(alice, bob.address);7071 const afterChanging = await helper.collection.getData(collection.collectionId);72 expect(afterChanging?.normalizedOwner).to.be.equal(helper.address.normalizeSubstrate(bob.address));7374 await collection.setSponsor(bob, charlie.address);75 await collection.confirmSponsorship(charlie);76 await collection.removeSponsor(bob);77 const limits = {78 accountTokenOwnershipLimit: 1,79 tokenLimit: 1,80 sponsorTransferTimeout: 1,81 ownerCanDestroy: true,82 ownerCanTransfer: true,83 };8485 await collection.setLimits(bob, limits);86 const gotLimits = await collection.getEffectiveLimits();87 expect(gotLimits).to.be.deep.contains(limits);8889 await collection.setPermissions(bob, {access: 'AllowList', mintMode: true});9091 await collection.burn(bob);92 const collectionData = await helper.collection.getData(collection.collectionId);93 expect(collectionData).to.be.null;94 });9596 itSub('New collectionOwner has access to changeCollectionOwner', async ({helper}) => {97 const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});98 await collection.changeOwner(alice, bob.address);99 await collection.changeOwner(bob, charlie.address);100 const collectionData = await collection.getData();101 expect(collectionData?.normalizedOwner).to.be.equal(helper.address.normalizeSubstrate(charlie.address));102 });103});104105describe('Negative Integration Test changeCollectionOwner(collection_id, new_owner):', () => {106 let alice: IKeyringPair;107 let bob: IKeyringPair;108 let charlie: IKeyringPair;109110 before(async () => {111 await usingPlaygrounds(async (helper, privateKey) => {112 const donor = await privateKey({url: import.meta.url});113 [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);114 });115 });116117 itSub('Not owner can\'t change owner.', async ({helper}) => {118 const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});119 const changeOwnerTx = () => collection.changeOwner(bob, bob.address);120 await expect(changeOwnerTx()).to.be.rejectedWith(/common\.NoPermission/);121 });122123 itSub('Collection admin can\'t change owner.', async ({helper}) => {124 const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});125 await collection.addAdmin(alice, {Substrate: bob.address});126 const changeOwnerTx = () => collection.changeOwner(bob, bob.address);127 await expect(changeOwnerTx()).to.be.rejectedWith(/common\.NoPermission/);128 });129130 itSub('Can\'t change owner of a non-existing collection.', async ({helper}) => {131 const collectionId = NON_EXISTENT_COLLECTION_ID;132 const changeOwnerTx = () => helper.collection.changeOwner(bob, collectionId, bob.address);133 await expect(changeOwnerTx()).to.be.rejectedWith(/common\.CollectionNotFound/);134 });135136 itSub('Former collectionOwner not allowed to sponsorship management operations in the collection', async ({helper}) => {137 const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});138 await collection.changeOwner(alice, bob.address);139140 const changeOwnerTx = () => collection.changeOwner(alice, alice.address);141 await expect(changeOwnerTx()).to.be.rejectedWith(/common\.NoPermission/);142143 const afterChanging = await helper.collection.getData(collection.collectionId);144 expect(afterChanging?.normalizedOwner).to.be.equal(helper.address.normalizeSubstrate(bob.address));145146 const setSponsorTx = () => collection.setSponsor(alice, charlie.address);147 const confirmSponsorshipTx = () => collection.confirmSponsorship(alice);148 const removeSponsorTx = () => collection.removeSponsor(alice);149 await expect(setSponsorTx()).to.be.rejectedWith(/common\.NoPermission/);150 await expect(confirmSponsorshipTx()).to.be.rejectedWith(/common\.ConfirmSponsorshipFail/);151 await expect(removeSponsorTx()).to.be.rejectedWith(/common\.NoPermission/);152153 const limits = {154 accountTokenOwnershipLimit: 1,155 tokenLimit: 1,156 sponsorTransferTimeout: 1,157 ownerCanDestroy: true,158 ownerCanTransfer: true,159 };160161 const setLimitsTx = () => collection.setLimits(alice, limits);162 await expect(setLimitsTx()).to.be.rejectedWith(/common\.NoPermission/);163164 const setPermissionTx = () => collection.setPermissions(alice, {access: 'AllowList', mintMode: true});165 await expect(setPermissionTx()).to.be.rejectedWith(/common\.NoPermission/);166167 const burnTx = () => collection.burn(alice);168 await expect(burnTx()).to.be.rejectedWith(/common\.NoPermission/);169 });170});