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

difftreelog

source

tests/src/change-collection-owner.test.ts7.8 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';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});