From 3069e4dc18cec91573ab8d2225ad10aa6094d6cc Mon Sep 17 00:00:00 2001 From: rkv Date: Tue, 20 Sep 2022 15:43:26 +0000 Subject: [PATCH] add helpers & fix replace mistakes --- --- a/tests/src/allowLists.test.ts +++ b/tests/src/allowLists.test.ts @@ -1,12 +1,12 @@ // Copyright 2019-2022 Unique Network (Gibraltar) Ltd. // This file is part of Unique Network. -// Unique Network is free software: you can redistribute itSub and/or modify -// itSub under the terms of the GNU General Public License as published by +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. -// Unique Network is distributed in the hope that itSub will be useful, +// Unique Network is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. --- a/tests/src/change-collection-owner.test.ts +++ b/tests/src/change-collection-owner.test.ts @@ -1,12 +1,12 @@ // Copyright 2019-2022 Unique Network (Gibraltar) Ltd. // This file is part of Unique Network. -// Unique Network is free software: you can redistribute itSub and/or modify -// itSub under the terms of the GNU General Public License as published by +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. -// Unique Network is distributed in the hope that itSub will be useful, +// Unique Network is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. --- a/tests/src/confirmSponsorship.test.ts +++ b/tests/src/confirmSponsorship.test.ts @@ -1,12 +1,12 @@ // Copyright 2019-2022 Unique Network (Gibraltar) Ltd. // This file is part of Unique Network. -// Unique Network is free software: you can redistribute itSub and/or modify -// itSub under the terms of the GNU General Public License as published by +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. -// Unique Network is distributed in the hope that itSub will be useful, +// Unique Network is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. @@ -17,6 +17,18 @@ import {IKeyringPair} from '@polkadot/types/types'; import {usingPlaygrounds, expect, itSub, Pallets} from './util/playgrounds'; +async function setSponsorHelper(collection: any, signer: IKeyringPair, sponsorAddress: string) { + await collection.setSponsor(signer, sponsorAddress); + const raw = (await collection.getData())?.raw; + expect(raw.sponsorship.Unconfirmed).to.be.equal(sponsorAddress); +} + +async function confirmSponsorHelper(collection: any, signer: IKeyringPair) { + await collection.confirmSponsorship(signer); + const raw = (await collection.getData())?.raw; + expect(raw.sponsorship.Confirmed).to.be.equal(signer.address); +} + describe('integration test: ext. confirmSponsorship():', () => { let alice: IKeyringPair; let bob: IKeyringPair; @@ -32,21 +44,21 @@ itSub('Confirm collection sponsorship', async ({helper}) => { const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}); - await collection.setSponsor(alice, bob.address); - await collection.confirmSponsorship(bob); + await setSponsorHelper(collection, alice, bob.address); + await confirmSponsorHelper(collection, bob); }); itSub('Add sponsor to a collection after the same sponsor was already added and confirmed', async ({helper}) => { const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}); - await collection.setSponsor(alice, bob.address); - await collection.confirmSponsorship(bob); - await collection.setSponsor(alice, bob.address); + await setSponsorHelper(collection, alice, bob.address); + await confirmSponsorHelper(collection, bob); + await setSponsorHelper(collection, alice, bob.address); }); itSub('Add new sponsor to a collection after another sponsor was already added and confirmed', async ({helper}) => { const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}); - await collection.setSponsor(alice, bob.address); - await collection.confirmSponsorship(bob); - await collection.setSponsor(alice, charlie.address); + await setSponsorHelper(collection, alice, bob.address); + await confirmSponsorHelper(collection, bob); + await setSponsorHelper(collection, alice, charlie.address); }); itSub('NFT: Transfer fees are paid by the sponsor after confirmation', async ({helper}) => { --- a/tests/src/createCollection.test.ts +++ b/tests/src/createCollection.test.ts @@ -1,12 +1,12 @@ // Copyright 2019-2022 Unique Network (Gibraltar) Ltd. // This file is part of Unique Network. -// Unique Network is free software: you can redistribute itSub and/or modify -// itSub under the terms of the GNU General Public License as published by +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. -// Unique Network is distributed in the hope that itSub will be useful, +// Unique Network is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. @@ -16,7 +16,33 @@ import {usingPlaygrounds, expect, itSub, Pallets} from './util/playgrounds'; import {IKeyringPair} from '@polkadot/types/types'; -import {IProperty} from './util/playgrounds/types'; +import {ICollectionCreationOptions, IProperty} from './util/playgrounds/types'; +import {DevUniqueHelper} from './util/playgrounds/unique.dev'; + +async function mintCollectionHelper(helper: DevUniqueHelper, signer: IKeyringPair, options: ICollectionCreationOptions, type?: 'nft' | 'fungible' | 'refungible') { + let collection; + if (type === 'nft') { + collection = await helper.nft.mintCollection(signer, options); + } else if (type === 'fungible') { + collection = await helper.ft.mintCollection(signer, options, 0); + } else { + collection = await helper.rft.mintCollection(signer, options); + } + const data = await collection.getData(); + expect(data?.normalizedOwner).to.be.equal(signer.address); + expect(data?.name).to.be.equal(options.name); + expect(data?.description).to.be.equal(options.description); + expect(data?.raw.tokenPrefix).to.be.equal(options.tokenPrefix); + if (options.properties) { + expect(data?.raw.properties).to.be.deep.equal(options.properties); + } + + if (options.tokenPropertyPermissions) { + expect(data?.raw.tokenPropertyPermissions).to.be.deep.equal(options.tokenPropertyPermissions); + } + + return collection; +} describe('integration test: ext. createCollection():', () => { let alice: IKeyringPair; @@ -29,41 +55,41 @@ }); itSub('Create new NFT collection', async ({helper}) => { - await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}); + await mintCollectionHelper(helper, alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 'nft'); }); itSub('Create new NFT collection whith collection_name of maximum length (64 bytes)', async ({helper}) => { - await helper.nft.mintCollection(alice, {name: 'A'.repeat(64), description: 'descr', tokenPrefix: 'COL'}); + await mintCollectionHelper(helper, alice, {name: 'A'.repeat(64), description: 'descr', tokenPrefix: 'COL'}, 'nft'); }); itSub('Create new NFT collection whith collection_description of maximum length (256 bytes)', async ({helper}) => { - await helper.nft.mintCollection(alice, {name: 'name', description: 'A'.repeat(256), tokenPrefix: 'COL'}); + await mintCollectionHelper(helper, alice, {name: 'name', description: 'A'.repeat(256), tokenPrefix: 'COL'}, 'nft'); }); itSub('Create new NFT collection whith token_prefix of maximum length (16 bytes)', async ({helper}) => { - await helper.nft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'A'.repeat(16)}); + await mintCollectionHelper(helper, alice, {name: 'name', description: 'descr', tokenPrefix: 'A'.repeat(16)}, 'nft'); }); itSub('Create new Fungible collection', async ({helper}) => { - await helper.ft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'}, 0); + await mintCollectionHelper(helper, alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'}, 'fungible'); }); itSub.ifWithPallets('Create new ReFungible collection', [Pallets.ReFungible], async ({helper}) => { - await helper.rft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'}); + await mintCollectionHelper(helper, alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'}, 'refungible'); }); itSub('create new collection with properties', async ({helper}) => { - await helper.nft.mintCollection(alice, { + await mintCollectionHelper(helper, alice, { name: 'name', description: 'descr', tokenPrefix: 'COL', properties: [{key: 'key1', value: 'val1'}], tokenPropertyPermissions: [{key: 'key1', permission: {tokenOwner: true, mutable: false, collectionAdmin: true}}], - }); + }, 'nft'); }); itSub('Create new collection with extra fields', async ({helper}) => { - const collection = await helper.ft.mintCollection(alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'}, 8); + const collection = await mintCollectionHelper(helper, alice, {name: 'name', description: 'descr', tokenPrefix: 'COL'}, 'fungible'); await collection.setPermissions(alice, {access: 'AllowList'}); await collection.setLimits(alice, {accountTokenOwnershipLimit: 3}); const data = await collection.getData(); @@ -74,7 +100,7 @@ expect(data?.name).to.be.equal('name'); expect(data?.description).to.be.equal('descr'); expect(raw.permissions.access).to.be.equal('AllowList'); - expect(raw.mode).to.be.deep.equal({Fungible: '8'}); + expect(raw.mode).to.be.deep.equal({Fungible: '0'}); expect(limits.accountTokenOwnershipLimit).to.be.equal(3); }); --- a/tests/src/createItem.test.ts +++ b/tests/src/createItem.test.ts @@ -1,12 +1,12 @@ // Copyright 2019-2022 Unique Network (Gibraltar) Ltd. // This file is part of Unique Network. -// Unique Network is free software: you can redistribute itSub and/or modify -// itSub under the terms of the GNU General Public License as published by +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. -// Unique Network is distributed in the hope that itSub will be useful, +// Unique Network is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. @@ -21,13 +21,39 @@ itApi, normalizeAccountId, getCreateItemResult, + CrossAccountId, } from './util/helpers'; import {usingPlaygrounds, expect, itSub, Pallets} from './util/playgrounds'; import {IProperty} from './util/playgrounds/types'; import {executeTransaction} from './substrate/substrate-api'; +import {DevUniqueHelper} from './util/playgrounds/unique.dev'; +async function mintTokenHelper(helper: DevUniqueHelper, collection: any, signer: IKeyringPair, owner: CrossAccountId, type: 'nft' | 'fungible' | 'refungible'='nft', properties?: IProperty[]) { + let token; + const itemCountBefore = await helper.collection.getLastTokenId(collection.collectionId); + const itemBalanceBefore = (await helper.api!.rpc.unique.balance(collection.collectionId, owner, 0)).toBigInt(); + if (type === 'nft') { + token = await collection.mintToken(signer, owner, properties); + } else if (type === 'fungible') { + await collection.mint(signer, 10n, owner); + } else { + token = await collection.mintToken(signer, 100n, owner, properties); + } + const itemCountAfter = await helper.collection.getLastTokenId(collection.collectionId); + const itemBalanceAfter = (await helper.api!.rpc.unique.balance(collection.collectionId, owner, 0)).toBigInt(); + + if (type === 'fungible') { + expect(itemBalanceAfter - itemBalanceBefore).to.be.equal(10n); + } else { + expect(itemCountAfter).to.be.equal(itemCountBefore + 1); + } + + return token; +} + + describe('integration test: ext. ():', () => { let alice: IKeyringPair; let bob: IKeyringPair; @@ -41,55 +67,55 @@ itSub('Create new item in NFT collection', async ({helper}) => { const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}); - await collection.mintToken(alice, {Substrate: alice.address}); + await mintTokenHelper(helper, collection, alice, {Substrate: alice.address}); }); itSub('Create new item in Fungible collection', async ({helper}) => { const collection = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0); - await collection.mint(alice, 10n, {Substrate: alice.address}); + await mintTokenHelper(helper, collection, alice, {Substrate: alice.address}, 'fungible'); }); - itApi.skip('Check events on create new item in Fungible collection', async ({api}) => { - const createMode = 'Fungible'; + itSub('Check events on create new item in Fungible collection', async ({helper}) => { + const {collectionId} = await helper.ft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'}, 0); + const api = helper.api!; - const newCollectionID = (await createCollection(api, alice, {mode: {type: createMode, decimalPoints: 0}})).collectionId; const to = normalizeAccountId(alice); { const createData = {fungible: {value: 100}}; - const tx = api.tx.unique.createItem(newCollectionID, to, createData as any); + const tx = api.tx.unique.createItem(collectionId, to, createData as any); const events = await executeTransaction(api, alice, tx); const result = getCreateItemResult(events); expect(result.amount).to.be.equal(100); - expect(result.collectionId).to.be.equal(newCollectionID); + expect(result.collectionId).to.be.equal(collectionId); expect(result.recipient).to.be.deep.equal(to); } { const createData = {fungible: {value: 50}}; - const tx = api.tx.unique.createItem(newCollectionID, to, createData as any); + const tx = api.tx.unique.createItem(collectionId, to, createData as any); const events = await executeTransaction(api, alice, tx); const result = getCreateItemResult(events); expect(result.amount).to.be.equal(50); - expect(result.collectionId).to.be.equal(newCollectionID); + expect(result.collectionId).to.be.equal(collectionId); expect(result.recipient).to.be.deep.equal(to); } }); itSub.ifWithPallets('Create new item in ReFungible collection', [Pallets.ReFungible], async ({helper}) => { const collection = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}); - await collection.mintToken(alice, 100n, {Substrate: alice.address}); + await mintTokenHelper(helper, collection, alice, {Substrate: alice.address}, 'refungible'); }); itSub('Create new item in NFT collection with collection admin permissions', async ({helper}) => { const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}); await collection.addAdmin(alice, {Substrate: bob.address}); - await collection.mintToken(bob, {Substrate: alice.address}); + await mintTokenHelper(helper, collection, bob, {Substrate: alice.address}); }); itSub('Create new item in Fungible collection with collection admin permissions', async ({helper}) => { const collection = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0); await collection.addAdmin(alice, {Substrate: bob.address}); - await collection.mint(bob, 10n, {Substrate: alice.address}); + await mintTokenHelper(helper, collection, bob, {Substrate: alice.address}, 'fungible'); }); itSub.ifWithPallets('Create new item in ReFungible collection with collection admin permissions', [Pallets.ReFungible], async ({helper}) => { const collection = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}); await collection.addAdmin(alice, {Substrate: bob.address}); - await collection.mintToken(bob, 100n, {Substrate: alice.address}); + await mintTokenHelper(helper, collection, bob, {Substrate: alice.address}, 'refungible'); }); itSub('Set property Admin', async ({helper}) => { @@ -97,7 +123,7 @@ properties: [{key: 'k', value: 'v'}], tokenPropertyPermissions: [{key: 'k', permission: {tokenOwner: false, mutable: true, collectionAdmin: true}}], }); - await collection.mintToken(alice, {Substrate: bob.address}, [{key: 'k', value: 'v'}]); + await mintTokenHelper(helper, collection, alice, {Substrate: bob.address}, 'nft', [{key: 'k', value: 'v'}]); }); itSub('Set property AdminConst', async ({helper}) => { @@ -105,7 +131,7 @@ properties: [{key: 'k', value: 'v'}], tokenPropertyPermissions: [{key: 'k', permission: {tokenOwner: false, mutable: false, collectionAdmin: true}}], }); - await collection.mintToken(alice, {Substrate: bob.address}, [{key: 'k', value: 'v'}]); + await mintTokenHelper(helper, collection, alice, {Substrate: bob.address}, 'nft', [{key: 'k', value: 'v'}]); }); itSub('Set property itemOwnerOrAdmin', async ({helper}) => { @@ -113,13 +139,13 @@ properties: [{key: 'k', value: 'v'}], tokenPropertyPermissions: [{key: 'k', permission: {tokenOwner: true, mutable: true, collectionAdmin: true}}], }); - await collection.mintToken(alice, {Substrate: bob.address}, [{key: 'k', value: 'v'}]); + await mintTokenHelper(helper, collection, alice, {Substrate: bob.address}, 'nft', [{key: 'k', value: 'v'}]); }); itSub('Check total pieces of Fungible token', async ({helper}) => { const collection = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0); const amount = 10n; - await collection.mint(alice, amount, {Substrate: bob.address}); + await mintTokenHelper(helper, collection, alice, {Substrate: bob.address}, 'fungible'); { const totalPieces = await collection.getTotalPieces(); expect(totalPieces).to.be.equal(amount); @@ -134,7 +160,7 @@ itSub('Check total pieces of NFT token', async ({helper}) => { const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}); const amount = 1n; - const token = await collection.mintToken(alice, {Substrate: bob.address}); + const token = await mintTokenHelper(helper, collection, alice, {Substrate: bob.address}); { const totalPieces = await helper.api?.rpc.unique.totalPieces(collection.collectionId, token.tokenId); expect(totalPieces?.unwrap().toBigInt()).to.be.equal(amount); @@ -149,7 +175,7 @@ itSub.ifWithPallets('Check total pieces of ReFungible token', [Pallets.ReFungible], async ({helper}) => { const collection = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}); const amount = 100n; - const token = await collection.mintToken(alice, amount, {Substrate: bob.address}); + const token = await mintTokenHelper(helper, collection, alice, {Substrate: bob.address}, 'refungible'); { const totalPieces = await token.getTotalPieces(); expect(totalPieces).to.be.equal(amount); --- a/tests/src/createMultipleItems.test.ts +++ b/tests/src/createMultipleItems.test.ts @@ -1,12 +1,12 @@ // Copyright 2019-2022 Unique Network (Gibraltar) Ltd. // This file is part of Unique Network. -// Unique Network is free software: you can redistribute itSub and/or modify -// itSub under the terms of the GNU General Public License as published by +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. -// Unique Network is distributed in the hope that itSub will be useful, +// Unique Network is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -- gitstuff