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

difftreelog

source

tests/src/rmrk/equipNft.test.ts10.9 KiBsourcehistory
1import {ApiPromise} from '@polkadot/api';2import {expect} from 'chai';3import {getApiConnection} from '../substrate/substrate-api';4import {getNft, getParts, NftIdTuple} from './util/fetch';5import {expectTxFailure} from './util/helpers';6import {7  addNftComposableResource,8  addNftSlotResource,9  createBase,10  createCollection,11  equipNft,12  mintNft,13  sendNft,14  unequipNft,15} from './util/tx';1617const Alice = '//Alice';18const Bob = '//Bob';1920const composableParts: number[] = [5, 2, 7];21const composableSrc = 'test-cmp-src';22const composableMetadata = 'test-cmp-metadata';23const composableLicense = 'test-comp-license';24const composableThumb = 'test-comp-thumb';2526const slotSrc = 'test-slot-src';27const slotLicense = 'test-slot-license';28const slotMetadata = 'test-slot-metadata';29const slotThumb = 'test-slot-thumb';3031const slotId = 1;3233async function createTestCollection(api: ApiPromise): Promise<number> {34  return createCollection(35    api,36    Alice,37    'test-metadata',38    null,39    'test-symbol',40  );41}4243async function mintTestNft(api: ApiPromise, collectionId: number): Promise<number> {44  return await mintNft(45    api,46    Alice,47    Alice,48    collectionId,49    'nft-metadata',50  );51}5253async function mintChildNft(api: ApiPromise, collectionId: number, parentNftId: number): Promise<number> {54  const nftChildId = await mintTestNft(api, collectionId);5556  const parentNFT: NftIdTuple = [collectionId, parentNftId];5758  await sendNft(api, 'sent', Alice, collectionId, nftChildId, parentNFT);5960  return nftChildId;61}6263async function createTestBase(api: ApiPromise): Promise<number> {64  return createBase(api, Alice, 'test-base', 'DTBase', [65    {66      SlotPart: {67        id: slotId,68        equippable: 'All',69        z: 1,70        src: slotSrc,71      },72    },73  ]);74}7576async function addTestComposable(api: ApiPromise, collectionId: number, nftId: number, baseId: number) {77  await addNftComposableResource(78    api,79    Alice,80    'added',81    collectionId,82    nftId,83    composableParts,84    baseId,85    composableSrc,86    composableMetadata,87    composableLicense,88    composableThumb,89  );90}9192async function addTestSlot(api: ApiPromise, collectionId: number, nftId: number, baseId: number, slotId: number): Promise<number> {93  return await addNftSlotResource(94    api,95    Alice,96    'added',97    collectionId,98    nftId,99    baseId,100    slotId,101    slotSrc,102    slotMetadata,103    slotLicense,104    slotThumb,105  );106}107108async function checkEquipStatus(109  api: ApiPromise,110  expectedStatus: 'equipped' | 'unequipped',111  collectionId: number,112  nftId: number,113) {114  const itemNftDataOpt = await getNft(api, collectionId, nftId);115  expect(itemNftDataOpt.isSome, 'Error: unable to fetch item NFT data');116117  const itemNftData = itemNftDataOpt.unwrap();118  expect(itemNftData.equipped.isTrue, `Error: item NFT should be ${expectedStatus}`)119    .to.be.equal(expectedStatus === 'equipped');120}121122describe.skip('integration test: Equip NFT', () => {123124  let api: any;125  before(async () => {126    api = await getApiConnection();127  });128129  it('equip nft', async () => {130    const collectionId = await createTestCollection(api);131    const nftParentId = await mintTestNft(api, collectionId);132    const nftChildId = await mintChildNft(api, collectionId, nftParentId);133134    const baseId = await createTestBase(api);135136    await addTestComposable(api, collectionId, nftParentId, baseId);137    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);138139    const equipperNFT: NftIdTuple = [collectionId, nftParentId];140    const itemNFT: NftIdTuple = [collectionId, nftChildId];141142    await equipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, slotId);143144    await checkEquipStatus(api, 'equipped', collectionId, nftChildId);145  });146147  it('unequip nft', async () => {148    const collectionId = await createTestCollection(api);149    const nftParentId = await mintTestNft(api, collectionId);150    const nftChildId = await mintChildNft(api, collectionId, nftParentId);151152    const baseId = await createTestBase(api);153154    await addTestComposable(api, collectionId, nftParentId, baseId);155    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);156157    const equipperNFT: NftIdTuple = [collectionId, nftParentId];158    const itemNFT: NftIdTuple = [collectionId, nftChildId];159160    await equipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, slotId);161162    await checkEquipStatus(api, 'equipped', collectionId, nftChildId);163164    await unequipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, slotId);165    await checkEquipStatus(api, 'unequipped', collectionId, nftChildId);166  });167168  it('[negative] equip NFT onto non-existing NFT', async () => {169    const collectionId = await createTestCollection(api);170171    const nftChildId = await mintNft(172      api,173      Alice,174      Alice,175      collectionId,176      'nft-metadata',177    );178179    const itemNFT: NftIdTuple = [collectionId, nftChildId];180    const invalidEquipperNFT: NftIdTuple = [collectionId, 9999999];181182    const baseId = 0;183    const resourceId = 0;184185    const tx = equipNft(api, Alice, itemNFT, invalidEquipperNFT, resourceId, baseId, slotId);186    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);187  });188189  it('[negative] equip non-existing NFT', async () => {190    const collectionId = await createTestCollection(api);191    const nftParentId = await mintNft(192      api,193      Alice,194      Alice,195      collectionId,196      'nft-metadata',197    );198199    const baseId = await createTestBase(api);200201    await addTestComposable(api, collectionId, nftParentId, baseId);202203    const equipperNFT: NftIdTuple = [collectionId, nftParentId];204    const invalidItemNFT: NftIdTuple = [collectionId, 99999999];205206    const resourceId = 0;207208    const tx = equipNft(api, Alice, invalidItemNFT, equipperNFT, resourceId, baseId, slotId);209    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);210  });211212  it('[negative] equip NFT by a not-an-owner user', async () => {213    const collectionId = await createTestCollection(api);214    const nftParentId = await mintTestNft(api, collectionId);215    const nftChildId = await mintChildNft(api, collectionId, nftParentId);216217    const baseId = await createTestBase(api);218219    await addTestComposable(api, collectionId, nftParentId, baseId);220221    const equipperNFT: NftIdTuple = [collectionId, nftParentId];222    const itemNFT: NftIdTuple = [collectionId, nftChildId];223224    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);225226    const tx = equipNft(api, Bob, itemNFT, equipperNFT, resourceId, baseId, slotId);227    await expectTxFailure(/rmrkEquip\.PermissionError/, tx);228  });229230  it('[negative] unable to equip NFT onto indirect parent NFT', async () => {231    const collectionId = await createTestCollection(api);232    const nftParentId = await mintTestNft(api, collectionId);233    const nftChildId = await mintChildNft(api, collectionId, nftParentId);234    const nftGrandchildId = await mintChildNft(api, collectionId, nftChildId);235236    const baseId = await createTestBase(api);237238    await addTestComposable(api, collectionId, nftParentId, baseId);239    const resourceId = await addTestSlot(api, collectionId, nftGrandchildId, baseId, slotId);240241    const equipperNFT: NftIdTuple = [collectionId, nftParentId];242    const itemNFT: NftIdTuple = [collectionId, nftGrandchildId];243244    const tx = equipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, slotId);245    await expectTxFailure(/rmrkEquip\.MustBeDirectParent/, tx);246  });247248  it('[negative] unable to equip NFT onto parent NFT with another base', async () => {249    const collectionId = await createTestCollection(api);250    const nftParentId = await mintTestNft(api, collectionId);251    const nftChildId = await mintChildNft(api, collectionId, nftParentId);252253    const baseId = await createTestBase(api);254255    await addTestComposable(api, collectionId, nftParentId, baseId);256    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);257258    const equipperNFT: NftIdTuple = [collectionId, nftParentId];259    const itemNFT: NftIdTuple = [collectionId, nftChildId];260261    const invalidBaseId = 99999;262263    const tx = equipNft(api, Alice, itemNFT, equipperNFT, resourceId, invalidBaseId, slotId);264    await expectTxFailure(/rmrkEquip\.NoResourceForThisBaseFoundOnNft/, tx);265  });266267  it('[negative] unable to equip NFT into slot with another id', async () => {268    const collectionId = await createTestCollection(api);269    const nftParentId = await mintTestNft(api, collectionId);270    const nftChildId = await mintChildNft(api, collectionId, nftParentId);271272    const baseId = await createTestBase(api);273274    await addTestComposable(api, collectionId, nftParentId, baseId);275    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);276277    const equipperNFT: NftIdTuple = [collectionId, nftParentId];278    const itemNFT: NftIdTuple = [collectionId, nftChildId];279280    const incorrectSlotId = slotId + 1;281    const tx = equipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, incorrectSlotId);282    await expectTxFailure(/rmrkEquip\.ItemHasNoResourceToEquipThere/, tx);283  });284285  it('[negative] unable to equip NFT with incorrect slot (fixed part)', async () => {286    const collectionId = await createTestCollection(api);287    const nftParentId = await mintTestNft(api, collectionId);288    const nftChildId = await mintChildNft(api, collectionId, nftParentId);289290    const baseId = await createBase(api, Alice, 'test-base', 'DTBase', [291      {292        FixedPart: {293          id: slotId,294          equippable: 'All',295          z: 1,296          src: slotSrc,297        },298      },299    ]);300301    await addTestComposable(api, collectionId, nftParentId, baseId);302    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);303304    const equipperNFT: NftIdTuple = [collectionId, nftParentId];305    const itemNFT: NftIdTuple = [collectionId, nftChildId];306307    const tx = equipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, slotId);308    await expectTxFailure(/rmrkEquip\.CantEquipFixedPart/, tx);309  });310311  it('[negative] unable to equip NFT from a collection that is not allowed by the slot', async () => {312    const collectionId = await createTestCollection(api);313    const nftParentId = await mintTestNft(api, collectionId);314    const nftChildId = await mintChildNft(api, collectionId, nftParentId);315316    const baseId = await createBase(api, Alice, 'test-base', 'DTBase', [317      {318        SlotPart: {319          id: 1,320          z: 1,321          equippable: 'Empty',322          src: slotSrc,323        },324      },325    ]);326327    await addTestComposable(api, collectionId, nftParentId, baseId);328    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);329330    const equipperNFT: NftIdTuple = [collectionId, nftParentId];331    const itemNFT: NftIdTuple = [collectionId, nftChildId];332333    const tx = equipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, slotId);334    await expectTxFailure(/rmrkEquip\.CollectionNotEquippable/, tx);335  });336337  after(() => {338    api.disconnect();339  });340});