1234567891011121314151617import {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;2627describe('Integration Test: ownerCanTransfer allows admins to use only transferFrom/burnFrom:', () => {28 let alice: IKeyringPair;29 let bob: IKeyringPair;30 let charlie: IKeyringPair;3132 before(async () => {33 await usingPlaygrounds(async (helper, privateKey) => {34 donor = privateKey('//Alice');35 [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor);36 });37 });3839 it('admin transfers other user\'s token', async () => {40 await usingPlaygrounds(async (helper) => {41 const {collectionId} = await helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'});42 await helper.collection.setLimits(alice, collectionId, {ownerCanTransfer: true});43 const limits = await helper.collection.getEffectiveLimits(collectionId);44 expect(limits.ownerCanTransfer).to.be.true;4546 const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: bob.address});47 const transferResult = async () => helper.nft.transferToken(alice, collectionId, tokenId, {Substrate: charlie.address});48 await expect(transferResult()).to.be.rejected;4950 await helper.nft.transferTokenFrom(alice, collectionId, tokenId, {Substrate: bob.address}, {Substrate: charlie.address});51 const newTokenOwner = await helper.nft.getTokenOwner(collectionId, tokenId);52 expect(newTokenOwner.Substrate).to.be.equal(charlie.address);53 });54 });5556 it('admin burns other user\'s token', async () => {57 await usingPlaygrounds(async (helper) => {58 const {collectionId} = await helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'});5960 await helper.collection.setLimits(alice, collectionId, {ownerCanTransfer: true});61 const limits = await helper.collection.getEffectiveLimits(collectionId);62 expect(limits.ownerCanTransfer).to.be.true;6364 const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: bob.address});65 const burnTxFailed = async () => helper.nft.burnToken(alice, collectionId, tokenId);6667 await expect(burnTxFailed()).to.be.rejected;6869 await helper.nft.burnToken(bob, collectionId, tokenId);70 const token = await helper.nft.getToken(collectionId, tokenId);71 expect(token).to.be.null;72 });73 });74});