1import {expect} from 'chai';2import {getApiConnection} from '../substrate/substrate-api';3import {getNft} from './util/fetch';4import {expectTxFailure} from './util/helpers';5import {createCollection, mintNft} from './util/tx';67describe('integration test: mint new NFT', () => {8 let api: any;9 before(async () => { api = await getApiConnection(); });1011 const alice = '//Alice';12 const bob = '//Bob';13 const maxCollectionId = 0xFFFFFFFF;14 const maxNftId = 0xFFFFFFFF;1516 it('mint NFT', async () => {17 const owner = null;18 const collectionMetadata = 'mintingCollectionMetadata';19 const collectionMax = null;20 const collectionSymbol = 'MCS';21 const recipientUri = null;22 const royalty = null;23 const nftMetadata = 'NFT-test-metadata';2425 const collectionId = await createCollection(26 api,27 alice,28 collectionMetadata,29 collectionMax,30 collectionSymbol,31 );3233 await mintNft(34 api,35 alice,36 owner,37 collectionId,38 nftMetadata,39 recipientUri,40 royalty,41 );42 });4344 it('mint NFT and set another owner', async () => {45 const owner = bob;46 const collectionMetadata = 'setOwnerCollectionMetadata';47 const collectionMax = null;48 const collectionSymbol = 'SOCS';49 const recipientUri = null;50 const royalty = null;51 const nftMetadata = 'setOwner-NFT-metadata';5253 const collectionId = await createCollection(54 api,55 alice,56 collectionMetadata,57 collectionMax,58 collectionSymbol,59 );6061 await mintNft(62 api,63 alice,64 owner,65 collectionId,66 nftMetadata,67 recipientUri,68 royalty,69 );70 });7172 it('mint NFT with recipient and roalty', async () => {73 const owner = alice;74 const collectionMetadata = 'mintingCollectionMetadata';75 const collectionMax = null;76 const collectionSymbol = 'MCS';77 const recipientUri = bob;78 const royalty = 70000;79 const nftMetadata = 'recipient-royalty-NFT-test-metadata';8081 const collectionId = await createCollection(82 api,83 alice,84 collectionMetadata,85 collectionMax,86 collectionSymbol,87 );8889 await mintNft(90 api,91 alice,92 owner,93 collectionId,94 nftMetadata,95 recipientUri,96 royalty,97 );98 });99100 it('mint NFT with resources', async () => {101 const owner = alice;102 const collectionMetadata = 'mintingCollectionMetadata';103 const collectionMax = null;104 const collectionSymbol = 'MCS';105 const nftMetadata = 'NFT-with-resources-test-metadata';106 const resources = [107 {108 basic: {109 metadata: 'basic-resource-nft-minting',110 },111 }, {112 slot: {113 metadata: 'slot-resource-nft-minting',114 slot: 9,115 },116 }, {117 composable: {118 metadata: 'composable-resource-nft-minting',119 parts: [0, 5, 2],120 },121 }, {122 slot: {123 metadata: 'slot-resource-nft-minting-2',124 thumb: 'srnm2',125 base: 5,126 },127 },128 ];129130 const collectionId = await createCollection(131 api,132 alice,133 collectionMetadata,134 collectionMax,135 collectionSymbol,136 );137138 await mintNft(139 api,140 alice,141 owner,142 collectionId,143 nftMetadata,144 null,145 null,146 true,147 resources,148 );149 });150151 it('[negative] unable to mint NFT within non-existing collection', async () => {152 const owner = alice;153 const recipientUri = null;154 const royalty = null;155 const nftMetadata = 'NFT-test-metadata';156157 const tx = mintNft(158 api,159 alice,160 owner,161 maxCollectionId,162 nftMetadata,163 recipientUri,164 royalty,165 );166167 await expectTxFailure(/rmrkCore\.CollectionUnknown/, tx);168 });169170 it("[negative] unable to mint NFT by a user that isn't the owner of the collection", async () => {171 const owner = alice;172 const collectionMetadata = 'mintingCollectionMetadata';173 const collectionMax = null;174 const collectionSymbol = 'MCS';175 const recipientUri = null;176 const royalty = null;177 const nftMetadata = 'NFT-test-metadata';178179 const collectionId = await createCollection(180 api,181 alice,182 collectionMetadata,183 collectionMax,184 collectionSymbol,185 );186187 const tx = mintNft(188 api,189 bob,190 owner,191 collectionId,192 nftMetadata,193 recipientUri,194 royalty,195 );196197 await expectTxFailure(/rmrkCore\.NoPermission/, tx);198 });199200 it('[negative] unable to fetch non-existing NFT', async () => {201 const nft = await getNft(api, maxCollectionId, maxNftId);202 expect(nft.isSome).to.be.false;203 });204205 after(() => { api.disconnect(); });206});