1import {expect} from 'chai';2import {tokenIdToAddress} from '../eth/util/helpers';3import usingApi, {executeTransaction} from '../substrate/substrate-api';4import {createCollectionExpectSuccess, createFungibleItemExpectSuccess, createItemExpectSuccess, CrossAccountId, getCreateCollectionResult, requirePallets, Pallets} from '../util/helpers';5import {IKeyringPair} from '@polkadot/types/types';67describe('nesting check', () => {8 let alice!: IKeyringPair;9 let nestTarget!: CrossAccountId;10 before(async() => {11 await usingApi(async (api, privateKeyWrapper) => {12 alice = privateKeyWrapper('//Alice');13 const bob = privateKeyWrapper('//Bob');14 const events = await executeTransaction(api, alice, api.tx.unique.createCollectionEx({15 mode: 'NFT',16 permissions: {17 nesting: {tokenOwner: true, restricted: []},18 },19 }));20 const collection = getCreateCollectionResult(events).collectionId;21 const token = await createItemExpectSuccess(alice, collection, 'NFT', {Substrate: bob.address});22 nestTarget = {Ethereum: tokenIdToAddress(collection, token)};23 });24 });2526 it('called for fungible', async () => {27 await usingApi(async api => {28 const collection = await createCollectionExpectSuccess({mode: {type: 'Fungible',decimalPoints:0}});29 await expect(executeTransaction(api, alice, api.tx.unique.createItem(collection, nestTarget, {Fungible: {Value: 1}})))30 .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);3132 await createFungibleItemExpectSuccess(alice, collection, {Value:1n}, {Substrate: alice.address});33 await expect(executeTransaction(api, alice, api.tx.unique.transfer(nestTarget, collection, 0, 1n)))34 .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);35 });36 });3738 it('called for nonfungible', async () => {39 await usingApi(async api => {40 const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});41 await expect(executeTransaction(api, alice, api.tx.unique.createItem(collection, nestTarget, {NFT: {properties: []}})))42 .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);4344 const token = await createItemExpectSuccess(alice, collection, 'NFT', {Substrate: alice.address});45 await expect(executeTransaction(api, alice, api.tx.unique.transfer(nestTarget, collection, token, 1n)))46 .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);47 });48 });4950 it('called for refungible', async function() {51 await requirePallets(this, [Pallets.ReFungible]);5253 await usingApi(async api => {54 const collection = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});55 await expect(executeTransaction(api, alice, api.tx.unique.createItem(collection, nestTarget, {ReFungible: {}})))56 .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);5758 const token = await createItemExpectSuccess(alice, collection, 'ReFungible', {Substrate: alice.address});59 await expect(executeTransaction(api, alice, api.tx.unique.transfer(nestTarget, collection, token, 1n)))60 .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);61 });62 });63});