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

difftreelog

source

tests/src/rmrk/sendNft.test.ts9.4 KiBsourcehistory
1import {expect} from 'chai';2import {getApiConnection} from '../substrate/substrate-api';3import {createCollection, mintNft, sendNft} from './util/tx';4import {NftIdTuple} from './util/fetch';5import {isNftChildOfAnother, expectTxFailure} from './util/helpers';6import {requirePallets, Pallets} from '../util/helpers';78describe('integration test: send NFT', () => {9  let api: any;10  before(async function () {11    api = await getApiConnection();12    await requirePallets(this, [Pallets.RmrkCore]);13  });1415  const maxNftId = 0xFFFFFFFF;1617  const alice = '//Alice';18  const bob = '//Bob';1920  const createTestCollection = async (issuerUri: string) => {21    return await createCollection(22      api,23      issuerUri,24      'nft-collection-metadata',25      null,26      'nft-collection',27    );28  };293031  it('send NFT to another user', async () => {32    const originalOwnerUri = alice;33    const newOwnerUri = bob;3435    const collectionId = await createTestCollection(alice);3637    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');3839    await sendNft(api, 'sent', originalOwnerUri, collectionId, nftId, newOwnerUri);40  });4142  it('[negative] unable to send non-existing NFT', async () => {43    const originalOwnerUri = alice;44    const newOwnerUri = bob;4546    const collectionId = 0;47    const tx = sendNft(api, 'sent', originalOwnerUri, collectionId, maxNftId, newOwnerUri);4849    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);50  });5152  it('[negative] unable to send NFT by a not-an-owner', async () => {53    const originalOwnerUri = alice;54    const newOwnerUri = bob;5556    const collectionId = await createTestCollection(alice);5758    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');5960    const tx = sendNft(api, 'sent', newOwnerUri, collectionId, nftId, newOwnerUri);61    await expectTxFailure(/rmrkCore\.NoPermission/, tx);62  });6364  it('send NFT to another NFT (same owner)', async () => {65    const originalOwnerUri = alice;6667    const collectionId = await createTestCollection(alice);6869    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');70    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');7172    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];7374    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);7576    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);77    expect(isChild).to.be.true;78  });7980  it('[negative] send non-existing NFT to another NFT', async () => {81    const originalOwnerUri = alice;8283    const collectionId = await createTestCollection(alice);8485    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');86    const childNftId = maxNftId;8788    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];8990    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);9192    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);9394    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);95    expect(isChild).to.be.false;96  });9798  it('send NFT to another NFT (by not-an-owner)', async () => {99    const originalOwnerUri = alice;100101    const collectionId = await createTestCollection(alice);102103    const author = alice;104    const attacker = bob;105106    const parentNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'parent-nft-metadata');107    const childNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'child-nft-metadata');108109    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];110111    const tx = sendNft(api, 'sent', attacker, collectionId, childNftId, newOwnerNFT);112113    await expectTxFailure(/rmrkCore\.NoPermission/, tx);114115    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);116    expect(isChild).to.be.false;117  });118119  it('[negative] send NFT to non-existing NFT', async () => {120    const originalOwnerUri = alice;121122    const collectionId = await createTestCollection(alice);123124    const parentNftId = maxNftId;125    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');126127    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];128129    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);130131    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);132133    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);134    expect(isChild).to.be.false;135  });136137  it('send NFT to another NFT owned by another user', async () => {138    const ownerAlice = alice;139    const ownerBob = bob;140141    const aliceCollectionId = await createTestCollection(alice);142    const bobCollectionId = await createTestCollection(bob);143144    const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, 'parent-nft-metadata');145    const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, 'child-nft-metadata');146147    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];148149    await sendNft(api, 'pending', bob, bobCollectionId, childNftId, newOwnerNFT);150  });151152  it('[negative] unable to send NFT to itself', async () => {153    const nftOwner = alice;154    const collectionId = await createTestCollection(alice);155156    const nftId = await mintNft(api, alice, nftOwner, collectionId, 'ouroboros-nft-metadata');157158    const newOwnerNFT: NftIdTuple = [collectionId, nftId];159160    const tx = sendNft(api, 'sent', alice, collectionId, nftId, newOwnerNFT);161162    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);163164    const isChild = await isNftChildOfAnother(api, collectionId, nftId, newOwnerNFT);165    expect(isChild).to.be.false;166  });167168  it('[negative] unable to send NFT to child NFT', async () => {169    const originalOwnerUri = alice;170171    const collectionId = await createTestCollection(alice);172173    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');174    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');175176    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];177178    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);179180    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);181    expect(isChild).to.be.true;182183    const descendentOwner: NftIdTuple = [collectionId, childNftId];184    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, descendentOwner);185186    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);187    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, descendentOwner);188    expect(isOuroboros).to.be.false;189  });190191  it('[negative] unable to send NFT to descendent NFT', async () => {192    const originalOwnerUri = alice;193194    const collectionId = await createTestCollection(alice);195196    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');197    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');198    const grandsonNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'grandson-nft-metadata');199200    const ownerParentNFT: NftIdTuple = [collectionId, parentNftId];201202    await sendNft(api, 'sent', alice, collectionId, childNftId, ownerParentNFT);203204    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, ownerParentNFT);205    expect(isChild).to.be.true;206207    const ownerChildNFT: NftIdTuple = [collectionId, childNftId];208    await sendNft(api, 'sent', alice, collectionId, grandsonNftId, ownerChildNFT);209210    const isGrandson = await isNftChildOfAnother(api, collectionId, grandsonNftId, ownerChildNFT);211    expect(isGrandson).to.be.true;212213    const ownerGrandsonNFT: NftIdTuple = [collectionId, grandsonNftId];214    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, ownerGrandsonNFT);215216    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);217    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, ownerGrandsonNFT);218    expect(isOuroboros).to.be.false;219  });220221  it('send nested NFT to another user', async () => {222    const originalOwner = alice;223    const newOwner = bob;224225    const collectionId = await createTestCollection(alice);226227    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');228    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');229230    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];231232    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);233234    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, newOwner);235  });236237  it('[negative] send nested NFT to another user (by a not-root-owner)', async () => {238    const originalOwner = alice;239    const newOwner = bob;240241    const collectionId = await createTestCollection(alice);242243    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');244    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');245246    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];247248    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);249250    const tx = sendNft(api, 'sent', newOwner, collectionId, childNftId, newOwner);251252    await expectTxFailure(/rmrkCore\.NoPermission/, tx);253  });254255  after(() => { api.disconnect(); });256});