git.delta.rocks / unique-network / refs/commits / 7d316fa0c4f8

difftreelog

test burn/mint

Yaroslav Bolyukin2021-08-11parent: #c535db9.patch.diff
in: master

2 files changed

modifiedtests/src/eth/nonFungible.test.tsdiffbeforeafterboth
4//4//
55
6import privateKey from '../substrate/privateKey';6import privateKey from '../substrate/privateKey';
7import { approveExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess } from '../util/helpers';7import { approveExpectSuccess, burnItemExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess } from '../util/helpers';
8import { collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents, recordEvents, subToEth, transferBalanceToEth } from './util/helpers';8import { collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents, recordEvents, subToEth, transferBalanceToEth } from './util/helpers';
9import { evmToAddress } from '@polkadot/util-crypto';
9import nonFungibleAbi from './nonFungibleAbi.json';10import nonFungibleAbi from './nonFungibleAbi.json';
10import { expect } from 'chai';11import { expect } from 'chai';
11import waitNewBlocks from '../substrate/wait-new-blocks';12import waitNewBlocks from '../substrate/wait-new-blocks';
13import { submitTransactionAsync } from '../substrate/substrate-api';
1214
13describe('NFT: Information getting', () => {15describe('NFT: Information getting', () => {
14 itWeb3('totalSupply', async ({ api, web3 }) => {16 itWeb3('totalSupply', async ({ api, web3 }) => {
64});66});
6567
66describe('NFT: Plain calls', () => {68describe('NFT: Plain calls', () => {
69 itWeb3('Can perform mint()', async ({ web3, api }) => {
70 const collection = await createCollectionExpectSuccess({
71 mode: { type: 'NFT' },
72 });
73 const alice = privateKey('//Alice');
74
75 const caller = await createEthAccountWithBalance(api, web3);
76 const changeAdminTx = api.tx.nft.addCollectionAdmin(collection, { ethereum: caller });
77 await submitTransactionAsync(alice, changeAdminTx);
78 const receiver = createEthAccount(web3);
79
80 const address = collectionIdToAddress(collection);
81 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
82
83 {
84 const nextTokenId = await contract.methods.nextTokenId().call();
85 expect(nextTokenId).to.be.equal('1');
86 const result = await contract.methods.mintWithTokenURI(
87 receiver,
88 nextTokenId,
89 'Test URI',
90 ).send({from: caller});
91 const events = normalizeEvents(result.events);
92
93 expect(events).to.be.deep.equal([
94 {
95 address,
96 event: 'Transfer',
97 args: {
98 from: '0x0000000000000000000000000000000000000000',
99 to: receiver,
100 tokenId: nextTokenId,
101 },
102 },
103 ]);
104
105 await waitNewBlocks(api, 1);
106 expect(await contract.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');
107 }
108 });
109
110 itWeb3('Can perform burn()', async ({ web3, api }) => {
111 const collection = await createCollectionExpectSuccess({
112 mode: {type: 'NFT'},
113 });
114 const alice = privateKey('//Alice');
115
116 const owner = await createEthAccountWithBalance(api, web3);
117
118 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
119
120 const address = collectionIdToAddress(collection);
121 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: owner, ...GAS_ARGS});
122
123 {
124 const result = await contract.methods.burn(tokenId).send({ from: owner });
125 const events = normalizeEvents(result.events);
126
127 expect(events).to.be.deep.equal([
128 {
129 address,
130 event: 'Transfer',
131 args: {
132 from: owner,
133 to: '0x0000000000000000000000000000000000000000',
134 tokenId: tokenId.toString(),
135 },
136 },
137 ]);
138 }
139 });
140
67 itWeb3('Can perform approve()', async ({ web3, api }) => {141 itWeb3('Can perform approve()', async ({ web3, api }) => {
68 const collection = await createCollectionExpectSuccess({142 const collection = await createCollectionExpectSuccess({
193});267});
194268
195describe('NFT: Substrate calls', () => {269describe('NFT: Substrate calls', () => {
270 itWeb3('Events emitted for mint()', async ({ web3 }) => {
271 const collection = await createCollectionExpectSuccess({
272 mode: { type: 'NFT' },
273 });
274 const alice = privateKey('//Alice');
275
276 const address = collectionIdToAddress(collection);
277 const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
278
279 let tokenId: number;
280 const events = await recordEvents(contract, async () => {
281 tokenId = await createItemExpectSuccess(alice, collection, 'NFT');
282 });
283
284 expect(events).to.be.deep.equal([
285 {
286 address,
287 event: 'Transfer',
288 args: {
289 from: '0x0000000000000000000000000000000000000000',
290 to: subToEth(alice.address),
291 tokenId: tokenId!.toString(),
292 },
293 },
294 ]);
295 });
296
297 itWeb3('Events emitted for burn()', async ({ web3 }) => {
298 const collection = await createCollectionExpectSuccess({
299 mode: { type: 'NFT' },
300 });
301 const alice = privateKey('//Alice');
302
303 const address = collectionIdToAddress(collection);
304 const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
305
306 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT');
307 const events = await recordEvents(contract, async () => {
308 await burnItemExpectSuccess(alice, collection, tokenId);
309 });
310
311 expect(events).to.be.deep.equal([
312 {
313 address,
314 event: 'Transfer',
315 args: {
316 from: subToEth(alice.address),
317 to: '0x0000000000000000000000000000000000000000',
318 tokenId: tokenId.toString(),
319 },
320 },
321 ]);
322 });
323
196 itWeb3('Events emitted for approve()', async ({ web3 }) => {324 itWeb3('Events emitted for approve()', async ({ web3 }) => {
197 const collection = await createCollectionExpectSuccess({325 const collection = await createCollectionExpectSuccess({
modifiedtests/src/eth/nonFungibleAbi.jsondiffbeforeafterboth
--- a/tests/src/eth/nonFungibleAbi.json
+++ b/tests/src/eth/nonFungibleAbi.json
@@ -50,6 +50,12 @@
         "type": "event"
     },
     {
+        "anonymous": true,
+        "inputs": [],
+        "name": "MintingFinished",
+        "type": "event"
+    },
+    {
         "anonymous": false,
         "inputs": [
             {
@@ -89,7 +95,7 @@
         ],
         "name": "approve",
         "outputs": [],
-        "stateMutability": "payable",
+        "stateMutability": "nonpayable",
         "type": "function"
     },
     {
@@ -119,6 +125,32 @@
                 "type": "uint256"
             }
         ],
+        "name": "burn",
+        "outputs": [],
+        "stateMutability": "nonpayable",
+        "type": "function"
+    },
+    {
+        "inputs": [],
+        "name": "finishMinting",
+        "outputs": [
+            {
+                "internalType": "bool",
+                "name": "",
+                "type": "bool"
+            }
+        ],
+        "stateMutability": "nonpayable",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            }
+        ],
         "name": "getApproved",
         "outputs": [
             {
@@ -146,11 +178,77 @@
         "name": "isApprovedForAll",
         "outputs": [
             {
+                "internalType": "address",
+                "name": "",
+                "type": "address"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "to",
+                "type": "address"
+            },
+            {
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            }
+        ],
+        "name": "mint",
+        "outputs": [
+            {
                 "internalType": "bool",
                 "name": "",
                 "type": "bool"
             }
         ],
+        "stateMutability": "nonpayable",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "to",
+                "type": "address"
+            },
+            {
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            },
+            {
+                "internalType": "string",
+                "name": "tokenURI",
+                "type": "string"
+            }
+        ],
+        "name": "mintWithTokenURI",
+        "outputs": [
+            {
+                "internalType": "bool",
+                "name": "",
+                "type": "bool"
+            }
+        ],
+        "stateMutability": "nonpayable",
+        "type": "function"
+    },
+    {
+        "inputs": [],
+        "name": "mintingFinished",
+        "outputs": [
+            {
+                "internalType": "bool",
+                "name": "",
+                "type": "bool"
+            }
+        ],
         "stateMutability": "view",
         "type": "function"
     },
@@ -160,7 +258,7 @@
         "outputs": [
             {
                 "internalType": "string",
-                "name": "res_name",
+                "name": "",
                 "type": "string"
             }
         ],
@@ -168,6 +266,19 @@
         "type": "function"
     },
     {
+        "inputs": [],
+        "name": "nextTokenId",
+        "outputs": [
+            {
+                "internalType": "uint256",
+                "name": "",
+                "type": "uint256"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
         "inputs": [
             {
                 "internalType": "uint256",
@@ -206,7 +317,7 @@
         ],
         "name": "safeTransferFrom",
         "outputs": [],
-        "stateMutability": "payable",
+        "stateMutability": "nonpayable",
         "type": "function"
     },
     {
@@ -232,9 +343,9 @@
                 "type": "bytes"
             }
         ],
-        "name": "safeTransferFrom",
+        "name": "safeTransferFromWithData",
         "outputs": [],
-        "stateMutability": "payable",
+        "stateMutability": "nonpayable",
         "type": "function"
     },
     {
@@ -258,9 +369,9 @@
     {
         "inputs": [
             {
-                "internalType": "bytes4",
-                "name": "interfaceID",
-                "type": "bytes4"
+                "internalType": "uint32",
+                "name": "interfaceId",
+                "type": "uint32"
             }
         ],
         "name": "supportsInterface",
@@ -271,7 +382,7 @@
                 "type": "bool"
             }
         ],
-        "stateMutability": "pure",
+        "stateMutability": "view",
         "type": "function"
     },
     {
@@ -280,7 +391,7 @@
         "outputs": [
             {
                 "internalType": "string",
-                "name": "res_symbol",
+                "name": "",
                 "type": "string"
             }
         ],
@@ -366,11 +477,6 @@
         "inputs": [
             {
                 "internalType": "address",
-                "name": "from",
-                "type": "address"
-            },
-            {
-                "internalType": "address",
                 "name": "to",
                 "type": "address"
             },
@@ -380,15 +486,20 @@
                 "type": "uint256"
             }
         ],
-        "name": "transferFrom",
+        "name": "transfer",
         "outputs": [],
-        "stateMutability": "payable",
+        "stateMutability": "nonpayable",
         "type": "function"
     },
     {
         "inputs": [
             {
                 "internalType": "address",
+                "name": "from",
+                "type": "address"
+            },
+            {
+                "internalType": "address",
                 "name": "to",
                 "type": "address"
             },
@@ -398,9 +509,9 @@
                 "type": "uint256"
             }
         ],
-        "name": "transfer",
+        "name": "transferFrom",
         "outputs": [],
-        "stateMutability": "payable",
+        "stateMutability": "nonpayable",
         "type": "function"
     }
 ]
\ No newline at end of file