git.delta.rocks / unique-network / refs/commits / 885653bf99d3

difftreelog

source

tests/src/rmrk/sendNft.seqtest.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, requirePallets, Pallets} from './util/helpers';67describe('integration test: send NFT', () => {8  let api: any;9  before(async function () {10    api = await getApiConnection();11    await requirePallets(this, [Pallets.RmrkCore]);12  });1314  const maxNftId = 0xFFFFFFFF;1516  const alice = '//Alice';17  const bob = '//Bob';1819  const createTestCollection = async (issuerUri: string) => {20    return await createCollection(21      api,22      issuerUri,23      'nft-collection-metadata',24      null,25      'nft-collection',26    );27  };282930  it('send NFT to another user', async () => {31    const originalOwnerUri = alice;32    const newOwnerUri = bob;3334    const collectionId = await createTestCollection(alice);3536    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');3738    await sendNft(api, 'sent', originalOwnerUri, collectionId, nftId, newOwnerUri);39  });4041  it('[negative] unable to send non-existing NFT', async () => {42    const originalOwnerUri = alice;43    const newOwnerUri = bob;4445    const collectionId = 0;46    const tx = sendNft(api, 'sent', originalOwnerUri, collectionId, maxNftId, newOwnerUri);4748    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);49  });5051  it('[negative] unable to send NFT by a not-an-owner', async () => {52    const originalOwnerUri = alice;53    const newOwnerUri = bob;5455    const collectionId = await createTestCollection(alice);5657    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');5859    const tx = sendNft(api, 'sent', newOwnerUri, collectionId, nftId, newOwnerUri);60    await expectTxFailure(/rmrkCore\.NoPermission/, tx);61  });6263  it('send NFT to another NFT (same owner)', async () => {64    const originalOwnerUri = alice;6566    const collectionId = await createTestCollection(alice);6768    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');69    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');7071    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];7273    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);7475    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);76    expect(isChild).to.be.true;77  });7879  it('[negative] send non-existing NFT to another NFT', async () => {80    const originalOwnerUri = alice;8182    const collectionId = await createTestCollection(alice);8384    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');85    const childNftId = maxNftId;8687    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];8889    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);9091    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);9293    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);94    expect(isChild).to.be.false;95  });9697  it('send NFT to another NFT (by not-an-owner)', async () => {98    const originalOwnerUri = alice;99100    const collectionId = await createTestCollection(alice);101102    const author = alice;103    const attacker = bob;104105    const parentNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'parent-nft-metadata');106    const childNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'child-nft-metadata');107108    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];109110    const tx = sendNft(api, 'sent', attacker, collectionId, childNftId, newOwnerNFT);111112    await expectTxFailure(/rmrkCore\.NoPermission/, tx);113114    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);115    expect(isChild).to.be.false;116  });117118  it('[negative] send NFT to non-existing NFT', async () => {119    const originalOwnerUri = alice;120121    const collectionId = await createTestCollection(alice);122123    const parentNftId = maxNftId;124    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');125126    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];127128    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);129130    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);131132    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);133    expect(isChild).to.be.false;134  });135136  it('send NFT to another NFT owned by another user', async () => {137    const ownerAlice = alice;138    const ownerBob = bob;139140    const aliceCollectionId = await createTestCollection(alice);141    const bobCollectionId = await createTestCollection(bob);142143    const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, 'parent-nft-metadata');144    const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, 'child-nft-metadata');145146    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];147148    await sendNft(api, 'pending', bob, bobCollectionId, childNftId, newOwnerNFT);149  });150151  it('[negative] unable to send NFT to itself', async () => {152    const nftOwner = alice;153    const collectionId = await createTestCollection(alice);154155    const nftId = await mintNft(api, alice, nftOwner, collectionId, 'ouroboros-nft-metadata');156157    const newOwnerNFT: NftIdTuple = [collectionId, nftId];158159    const tx = sendNft(api, 'sent', alice, collectionId, nftId, newOwnerNFT);160161    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);162163    const isChild = await isNftChildOfAnother(api, collectionId, nftId, newOwnerNFT);164    expect(isChild).to.be.false;165  });166167  it('[negative] unable to send NFT to child NFT', async () => {168    const originalOwnerUri = alice;169170    const collectionId = await createTestCollection(alice);171172    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');173    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');174175    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];176177    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);178179    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);180    expect(isChild).to.be.true;181182    const descendentOwner: NftIdTuple = [collectionId, childNftId];183    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, descendentOwner);184185    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);186    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, descendentOwner);187    expect(isOuroboros).to.be.false;188  });189190  it('[negative] unable to send NFT to descendent NFT', async () => {191    const originalOwnerUri = alice;192193    const collectionId = await createTestCollection(alice);194195    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');196    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');197    const grandsonNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'grandson-nft-metadata');198199    const ownerParentNFT: NftIdTuple = [collectionId, parentNftId];200201    await sendNft(api, 'sent', alice, collectionId, childNftId, ownerParentNFT);202203    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, ownerParentNFT);204    expect(isChild).to.be.true;205206    const ownerChildNFT: NftIdTuple = [collectionId, childNftId];207    await sendNft(api, 'sent', alice, collectionId, grandsonNftId, ownerChildNFT);208209    const isGrandson = await isNftChildOfAnother(api, collectionId, grandsonNftId, ownerChildNFT);210    expect(isGrandson).to.be.true;211212    const ownerGrandsonNFT: NftIdTuple = [collectionId, grandsonNftId];213    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, ownerGrandsonNFT);214215    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);216    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, ownerGrandsonNFT);217    expect(isOuroboros).to.be.false;218  });219220  it('send nested NFT to another user', async () => {221    const originalOwner = alice;222    const newOwner = bob;223224    const collectionId = await createTestCollection(alice);225226    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');227    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');228229    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];230231    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);232233    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, newOwner);234  });235236  it('[negative] send nested NFT to another user (by a not-root-owner)', async () => {237    const originalOwner = alice;238    const newOwner = bob;239240    const collectionId = await createTestCollection(alice);241242    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');243    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');244245    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];246247    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);248249    const tx = sendNft(api, 'sent', newOwner, collectionId, childNftId, newOwner);250251    await expectTxFailure(/rmrkCore\.NoPermission/, tx);252  });253254  after(async() => { await api.disconnect(); });255});